compatibility layer - workqueues
Orit Moskovich
oritm at mellanox.com
Tue May 21 04:56:31 UTC 2013
Hi,
I'm working on understanding the difference between Linux and FreeBSD interrupt handling.
I looked at the compatibility layer and noticed this:
* Linux workqueues are implemented using FreeBSD taskqueues (under sys/ofed/include/linux/workqueue.h)
* In linux, the function schedule_work() puts a job in the kernel global workqueue 'events'. This workqueue consists of worker threads - one per processor
* The compatibility layer wraps this function to a macro, that implements the functionality using taskqueue_enqueue() and set it to work on taskqueue_thread, that executes its tasks in the context of a kernel thread
* BUT, taskqueue_thread is initialized in:
o sys/kern/subr_taskqueue.c line 536:
TASKQUEUE_DEFINE_THREAD(thread);
o which is defined in sys/taskqueue.h line 133
and run taskqueue_start_threads() with only 1 thread, and not MAXCPU
I'll appreciate your help understanding this issue,
Thanks,
Orit Moskovich
More information about the freebsd-arch
mailing list