6

How can the CPU affinity of a process be set in kernel module? In user mode there is a syscall sched_setaffinity, but I am looking for the kernel mode equivalent.

In the Linux kernel code, there is also a function called sched_setaffinity. It's called from the sys_sched_setaffinity function which is called by system_call. From what it seems, this is the function that I want to use. The fact that it has the same name as the system call makes me a bit uneasy, though.

But as we all know, the best thing to do is to just try it. So I did, and my module compiled. However, when I try to load the module, it complains that the name sched_setaffinity is undefined.

Ciro Santilli OurBigBook.com
  • 347,512
  • 102
  • 1,199
  • 985
Mike Mu
  • 977
  • 6
  • 10

1 Answers1

3

sched_setaffinity is not exported to modules.

If you modify /usr/src/linux/kernel/sched.c, you can cause sched_setaffinity to be exported to modules.

 long sched_setaffinity(pid_t pid, const struct cpumask *in_mask)
 {
...
 }
+EXPORT_SYMBOL_GPL(sched_setaffinity);
ephemient
  • 198,619
  • 38
  • 280
  • 391
  • That seems to be it. Due to the nature of what I'm working on, it's not feasible to modify the kernel. Still, thanks a lot. – Mike Mu Jul 20 '09 at 18:52