/*spin_lock_irqsave(lock, flag);*/
spin_lock_bh(lock); //bottom half 关闭软中断,加锁
for(i = 0; i < 3; i++)
{
printk('count = %d, %s', cnt++, s);
mdelay(1000);
}
spin_unlock_bh(lock);
/*spin_unlock_irqrestore(lock, flag);*/
/*spin_unlock_irq(lock);*/
/*local_irq_restore(flag);*/
/*local_irq_enable();*/
/*spin_unlock(lock);*/
return 0;
}
void task_main(unsigned long data)
{
test_t *p = (test_t *)data;
critical('softirq.n', &p->lock);
}
static irqreturn_t irq_handler(int irq, void *arg)
{
test_t *p = arg;
printk('in irqn');
/*critical('irqn', &p->lock);*/
tasklet_schedule(&p->task);
return IRQ_HANDLED;
}
static ssize_t test_write(struct file *file, const char __user *buf, size_t count, loff_t *pos)
{
int ret;
char kbuf[count + 1];
test_t *p = file->private_data;
ret = copy_from_user(kbuf, buf, count);
if(ret)
return -EFAULT;
kbuf[count] = '
