Объясните, плиз, причину подвисания на функции wait_event_interruptible().
Имею след код
module_param( flag, int, 0444 );
MODULE_PARM_DESC( flag, "flag");
#define IS 1
#define NO 0
struct task_struct * usbsnd_thread;
wait_queue_head_t tx_wq;
int data = 0x0;
unsigned int flag = NO;
int usbsnd_task( void * data )
{
while( 1 )
{
wait_event_interruptible( tx_wq , ( kthread_should_stop() || flag ) );
if( kthread_should_stop() ) break;
mdelay( 1000 ); // 1 sec
//printk( KERN_INFO "thread active ");
}
return 0;
}
static int __init simple_init(void)
{
init_waitqueue_head( & tx_wq );
usbsnd_thread = kthread_run( & usbsnd_task , ( void * ) data , "usbsnd" );
if( IS_ERR( usbsnd_thread ))
{
printk( KERN_ERR " Can't create and run thread !!!");
}
return 0;
}
Когда поток просыпается система зависает - не работает клавиатура и т.п.. Созданный поток работает...