lkml.org 
[lkml]   [2006]   [Feb]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: How to call a function in a module from the kernel code !!! (Linux kernel)
Date
On Feb 10, 2006, at 02:55, Steven Rostedt wrote:
> 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?

No, not at all! I suspect there is possibly/probably a better way to
do what the OP wants. Also, the particular example of putting a
pointer to a module function into the kernel core is quite racy and
hard to get the locking/memory-barriers correct for, so a review of
that part would probably be useful to the poster.

>> 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.

Oh of course not, but that's not what I was saying. I just wanted to
clarify that such deep linkage into the kernel implied that the full
terms of the GPL applied to any distribution.

>> Also, I think what you are describing is basically impossible. I
>> believe what you want to do is this:

Oops, this isn't what I meant to say. I meant that it's _possible_
but hard to get correct.

>> /* 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.

This is precisely why I asked the original poster to send a link to
code (doesn't have to be the whole thing, but even just the pertinent
snippets of the module code). You or I (or anybody else whose reading
this thread) could easily help them verify their locking and pointer
usage.

Cheers,
Kyle Moffett

--
I lost interest in "blade servers" when I found they didn't throw
knives at people who weren't supposed to be in your machine room.
-- Anthony de Boer


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2006-02-10 09:19    [W:0.038 / U:0.296 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site