Communication between kernel and kernel module
Hi, Is there any way to call a function defined in a kernel module from within the kernel proper? Here's what I'm trying to do: I'm trying to keep track of when and for how long a process is being executed on the processor, i.e. I need to know when context switches occur. There is a function called context_switch() in linux/kernel/sched/core.c that is called whenever a context switch happens. I would like to call a function in a kernel module I've written from within context_switch() and pass some data to it. I've seen how to communicate between user space and kernel space, such as using a file in /dev or using system calls, but not how to communicate within the kernel itself. Regards, Drew
On Tue, May 22, 2012 at 9:18 PM, drewd77.gm <drewd77.gm@gmail.com> wrote:
Hi,
Is there any way to call a function defined in a kernel module from within the kernel proper?
Here's what I'm trying to do:
I'm trying to keep track of when and for how long a process is being executed on the processor, i.e. I need to know when context switches occur.
Kprobes [1] might be useful. I for one haven't used Kprobes before, but I'm sure others on this list can provide useful insight. [1] http://lwn.net/Articles/132196/ Hope this helps, Vlad
Hi, On 05/23/2012 02:18 AM, drewd77.gm wrote:
Hi,
Is there any way to call a function defined in a kernel module from within the kernel proper?
Here's what I'm trying to do:
I'm trying to keep track of when and for how long a process is being executed on the processor, i.e. I need to know when context switches occur.
There is a function called context_switch() in linux/kernel/sched/core.c that is called whenever a context switch happens. I would like to call a function in a kernel module I've written from within context_switch() and pass some data to it. There are lots of ways to do it, maybe you don't need to write a module or hacking the kernel like that... Check perf and systemtap. They may help.
I've seen how to communicate between user space and kernel space, such as using a file in /dev or using system calls, but not how to communicate within the kernel itself.
Regards, Drew
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies Regards, LIU Zhiyou
"drewd77.gm" <drewd77.gm@gmail.com> writes:
Is there any way to call a function defined in a kernel module from within the kernel proper?
One needs a proper hook mechanism such as kprobes or tracepoints.
I'm trying to keep track of when and for how long a process is being executed on the processor, i.e. I need to know when context switches occur.
There is a function called context_switch() in linux/kernel/sched/core.c that is called whenever a context switch happens. I would like to call a function in a kernel module I've written from within context_switch() and pass some data to it.
The sched_switch tracepoint is probably the best spot for this. A systemtap script that listens for these events and simply traces them to stdout looks like: probe scheduler.ctxswitch { println(cpu(), ":", prev_tid, "->", next_tid) } - FChE
participants (4)
-
drewd77.gm -
fche@redhat.com -
Vlad Dogaru -
刘智猷