On Thu, 9 Feb 2006, Kyle Moffett wrote:
It would help a lot if you could post a link to your source code.
Not really. The question is pretty straight forward, so no source is really necessary. Are you just asking this because you want to stress the next point?
Let me point out (in case you don't know this already) that if you do what you describe and distribute the result, you are automatically licensing your ll.c file under the GPLv2. By distributing a derivative of both the Linux kernel and your proprietary module (You are taking Linux kernel sources and modifying them explicitly for your module), the result must be GPL.
Well, just because something is under the GPL, doesn't mean you need to post a link for all to have.
Also, I think what you are describing is basically impossible. I believe what you want to do is this:
/* in shm.c */
unsigned long long (*ptr1)(int);
EXPORT_SYMBOL(ptr1);
However this makes it impossible to reliably remove your module,
because a process could race entering the function as the module
loader is trying to remove the module.
Not really impossible. As I have done in my (yes GPL) logdev module http://www.kihontech.com/logdev/logdev-2.6.15-rt16.patch
I have a "hooks" file that has all the functions I need for the loadable module. But to call any of the hooks, you must call wrapper functions that grabs a spinlock before calling the function. This spinlock is also used to reset the function pointer when removing the module. Yes, I know that this is inefficient, but when the module is compiled into the kernel, those wrapper functions also turn into direct functions without the need of the spinlock, or redirected function pointers.