Programming/Linux_Kernel

singlethread_workqueue 사용

decdream 2011. 7. 13. 18:18

아래와 같이 함수 구정을 하면 됩니다.
간단한 함수들이므로 설명은 생략 합니다.

struct work_struct my_int_work;

struct workqueue_struct *my_wq = NULL;

void test-device_int_irq_handler_sched(void)

{

queue_work(my_wq, &my_int_work);

}

void my_interrupt_event_work(struct work_struct *p)

{

printk(KERN_ERR "my_interrupt_event_work() is called\n");

... // 실제 work

}

 

static int my_device_probe(struct i2c_client *client, const struct i2c_device_id *id)

{

my_wq = create_singlethread_workqueue("my_wq");

INIT_WORK(&my_int_work, my_interrupt_event_work);

ret = request_threaded_irq(MY_INT_IRQ, NULL, test-device_int_irq_handler,

IRQF_SHARED , "test-device_int", (void *) state);  
if (ret) {
printk(KERN_ERR "unable to request irq test-device_int"
" err:: %d\n", ret);
return ret;
}