//------------------------------------------------------------------- // tryworkq.c // // This module demonstrates the use of a kernel workqueue, as a // mechanism for scheduling work to be performed after a delay. // // NOTE: Developed and tested with Linux kernel version 2.6.10. // // programmer: ALLAN CRUSE // written on: 20 MAR 2005 //------------------------------------------------------------------- #include // for init_module() #include // for create_workqueue() char modname[] = "tryworkq"; void dowork( void * ); DECLARE_WORK( mywork, dowork, &modname ); struct workqueue_struct *myqueue; void dowork( void *data ) { printk( "%s: I am doing the work now\n", (char*)data ); } int init_module( void ) { int retval; printk( "<1>\nInstalling \'%s\' module\n", modname ); myqueue = create_singlethread_workqueue( "mywork" ); retval = queue_delayed_work( myqueue, &mywork, HZ*5 ); printk( "retval=%d\n", retval ); return 0; // SUCCESS } void cleanup_module( void ) { printk( "<1>Removing \'%s\' module\n", modname ); destroy_workqueue( myqueue ); } MODULE_LICENSE("GPL");