Date: Tue, 21 May 2013 04:56:20 +0000 From: Orit Moskovich <oritm@mellanox.com> To: "freebsd-arch@freebsd.org" <freebsd-arch@freebsd.org> Subject: compatibility layer - workqueues Message-ID: <981733489AB3BD4DB24B48340F53E0A55B0D0938@MTLDAG01.mtl.com>
next in thread | raw e-mail | index | archive | help
Hi, I'm working on understanding the difference between Linux and FreeBSD inter= rupt 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 g= lobal workqueue 'events'. This workqueue consists of worker threads - one p= er processor * The compatibility layer wraps this function to a macro, that impl= ements the functionality using taskqueue_enqueue() and set it to work on ta= skqueue_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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?981733489AB3BD4DB24B48340F53E0A55B0D0938>