lkml.org 
[lkml]   [2012]   [Dec]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectIncrementing module reference count
Hi,

I have a kernel module which other modules register with in order to
export access functions. So far I have everything working but I want to
prevent a module that is registered with my module from unloading since
now my module is dependent on the other module.

Is there a way I can cause the reference count of the module registering
with my module to increase? I tried calling get_device with the device
structure of the module that is registering but that does not seem to work.

For example, I have the following function:

/**
* Adds a mapping of a device node to a memory accessor
*
* @param[in] dev - device
* @param[in] macc - memory accessor
*
* @returns 0 for success or -ENOMEM
*/
int of_memory_accessor_register(struct device *dev,
struct memory_accessor *macc)
{
struct of_macc_entry *mentry;

mentry = kmalloc(sizeof(*mentry), GFP_KERNEL);
if (mentry == NULL)
return -ENOMEM;

mentry->dev = dev;
mentry->macc = macc;

mutex_lock(&lock);

get_device(dev);
list_add(&(mentry->list), &macc_list);

mutex_unlock(&lock);

return 0;
}
EXPORT_SYMBOL(of_memory_accessor_register);

Basically my module is used for things like serial EEPROMs and whatnot
so that external modules can find the accessor functions based on the
device tree. In my case I am updating the Vitesse VSC848X driver so that
it can read the SFP module when it is plugged in using the AT24 I2C
EEPROM module. I want to prevent the at24 module from unloading while
other modules in turn are using it. The at24 module does not export any
symbols.

NOTE that I plan to change the above code so that I only increment the
eeprom modules reference count when another module actually uses it and
release it only when all other modules are no longer using the accessor
functions.

I also am not subscribed to the LKML so please CC me on any responses.

-Aaron

--
Aaron Williams
Software Engineer
Cavium, Inc.
(408) 943-7198 (510) 789-8988 (cell)



\
 
 \ /
  Last update: 2012-12-08 02:41    [W:0.364 / U:0.276 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site