I'm playing around with work_queue in my VMware workstation. but I hit a problem that the work is processed by [kworker/3:1] other than my work queue.
static int __init test_init(void) { pr_info(" (*) test_init start - pid:%d. cpu:%d\n", current->pid, get_cpu()); int ret = 0; test_queue_ptr = create_workqueue("myfoo"); // test_queue_ptr = create_singlethread_workqueue("test_workqueue"); if(!test_queue_ptr){ goto test_queue_ptr_error; } INIT_WORK(&test_work, test_cb); // ret = queue_work(test_queue_ptr, &test_work); ret = queue_work_on(get_cpu(), test_queue_ptr, &test_work); // schedule_work(&test_work); pr_info(" (*) test_init - queue_work_on return:%d. \n", ret); return 0; test_queue_ptr_error: destroy_workqueue(test_queue_ptr); return 0; } static void test_cb(struct work_struct *work) { pr_info(" (*) test_cb - pid:%d. cpu:%d\n", current->pid, get_cpu()); } isnmod the module gives me the output : Nov 19 23:11:18 test kernel: [ 3031.766137] (*) test_init start - pid:8594. cpu:3 Nov 19 23:11:18 test kernel: [ 3031.766371] (*) test_init - queue_work_on return:1. Nov 19 23:11:18 test kernel: [ 3031.766672] (*) test_cb - pid:83. cpu:3 <--- this line indicates "test_cb" function is running on process 83 ([kworker/3:1]). ps aux .... root 82 0.0 0.0 0 0 ? S< 22:20 0:00 [charger_manager] root 83 0.0 0.0 0 0 ? S 22:20 0:00 [kworker/3:1] root 85 0.0 0.0 0 0 ? S 22:20 0:00 [kworker/0:2] root 217 0.0 0.0 0 0 ? S< 22:20 0:00 [mpt_poll_0] Thanks Jay
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies