memrar: Address kernel oops during resource cleanup
PATCH 1/2 memrar: Address kernel oops during resource cleanup
From: Ossama Othman <[email protected]>
Some delayed initialization is performed in this driver. Make sure resources that are used during driver clean-up (e.g. during driver's release() function) are fully initialized before first use. This is particularly important for the case when the delayed initialization isn't completed, leaving behind a partially initialized driver.
Such a scenario can occur when RAR is not available on the platform, and the driver is release()d.
Signed-off-by Ossama Othman <[email protected]>
Signed-off-by Alan Cox <[email protected]>
---
drivers/staging/memrar/memrar_handler.c | 28 +++++++++++++++++++--------- 1 files changed, 19 insertions(+), 9 deletions(-)
drivers/staging/memrar/memrar_handler.c +19 -9
@@ -278,15 +278,6 @@ static int memrar_init_rar_resources(int rarnum, char const *devname)BUG_ON (!memrar_is_valid_rar_type (rarnum));BUG_ON (rar->allocated); -mutex_init (&rar->lock); - -/* -* Initialize the process table before we reach any -* code that exit on failure since the finalization -* code requires an initialized list. -*/ -INIT_LIST_HEAD (&rar->buffers.list); -if (rar_get_address (rarnum, &low, &high) !=0 )/* No RAR is available. */ return -ENODEV ;
@@ -940,9 +931,28 @@ static int memrar_registration_callback(unsigned long rar)static int __init memrar_init (void ) {int err; +int i;printk (banner); +/* +* Some delayed initialization is performed in this driver. +* Make sure resources that are used during driver clean-up +* (e.g. during driver's release() function) are fully +* initialized before first use. This is particularly +* important for the case when the delayed initialization +* isn't completed, leaving behind a partially initialized +* driver. +* +* Such a scenario can occur when RAR is not available on the +* platform, and the driver is release()d. +*/ +for (i =0 ; i !=ARRAY_SIZE (memrars); ++i) { +struct memrar_rar_info *const rar = &memrars[i]; +mutex_init (&rar->lock); +INIT_LIST_HEAD (&rar->buffers.list); + } + err =misc_register (&memrar_miscdev);if (err)return err;
PATCH 2/2 memrar: Updated maintainer contact information
From: Ossama Othman <[email protected]>
Signed-off-by Ossama Othman <[email protected]>
Signed-off-by Alan Cox <[email protected]>
---
drivers/staging/memrar/TODO | 2 +- drivers/staging/memrar/memrar-abi | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-)
drivers/staging/memrar/TODO +1 -1
@@ -1,7 +1,7 @@ RAR Handler (memrar) Driver TODO Items ====================================== -Maintainer: Ossama Othman <[email protected]> +Maintainer: Eugene Epshteyn <[email protected]> memrar.h --------
drivers/staging/memrar/memrar-abi +2 -2
@@ -1,7 +1,7 @@ What: /dev/memrar Date: March 2010 -KernelVersion: Kernel version this feature first showed up in. -Contact: Ossama Othman <[email protected]> +KernelVersion: 2.6.34 +Contact: Eugene Epshteyn <[email protected]> Description: The Intel Moorestown Restricted Access Region (RAR) Handler driver exposes an ioctl() based interface that allows a user to reserve and release blocks of RAR