??????Linux?ж???????????????????Linux?ж????????????????tophalf?????°?(bottom half)????????????"????ж?"????????ж???????????????????????д????ж???????°???????豸???°???ж??????????????? ??е???????????????????ж??????????????"????ж?"???????????????ж??????????????????Linux??????????°??????? ???ж??????????????????°??????????????°?????ж??????????????ж????°??????????ж??????????е????飬?????????μ? ?ж?????°???????????????????????????????????????????????а?????????????????ж??????????????С?
????Linux????°???????????tasklet????????С?
????Tasklet????Linux softirq?????????????????????????tasklet??????????????????????
????void my_tasklet_func(unsigned long); //????????????????
????DECLARE_TASKLET(my_tasklet??my_tasklet_func??data); //???????tasklet??my_tasklet????
????my_tasklet_func(data)?????????
????????????????tasklet????????????????API?????????????????е??????У?
????tasklet_schedule(&my_tasklet);
????????Linux???????????Щ?????????tasklet?????????е?API??
????DECLARE_TASKLET_DISABLED(name??function??data); //??DECLARE_TASKLET??????????tasklet?????
????tasklet_enable(struct tasklet_struct *); //???tasklet
????tasklet_disble(struct tasklet_struct *); //????tasklet
????tasklet_init(struct tasklet_struct *??void (*func)(unsigned long)??unsigned long); //????
????DECLARE_TASKLET()
????tasklet_kill(struct tasklet_struct *); // ??????tasklet??????λ??????????????tasklet
?????????????????tasklet?????????????????????κ???????壬????????????????????????globalvar??д????κ????????tasklet???????????"tasklet is executing"??
#include

//???????tasklet????
void test_tasklet_action(unsigned long t);
DECLARE_TASKLET(test_tasklet?? test_tasklet_action?? 0);
void test_tasklet_action(unsigned long t)
{
printk("tasklet is executing ");
}

ssize_t globalvar_write(struct file *filp?? const char *buf?? size_t len?? loff_t *off)
{

if (copy_from_user(&global_var?? buf?? sizeof(int)))
{
return - EFAULT;
}
//????tasklet???
tasklet_schedule(&test_tasklet);
return sizeof(int);
}
?????°????????????????ж?????????????ж????????????е????????Linux2.6??????д???????????????°???????????ж??tasklet????????С?
???????潫????????????????????
???????ж?? 1?????ж??????????侲???????
????2?????????32?????ж??
????3?????ж?????????????????ж????????????ж?????ж???????
????4?????????????????CPU????????????????????????????ж??????????????????????????CPU??????????
???????????????????????????????????
????5???????????????????????ж???????SCSI??
????6?????????У???????ж???????????ksoftirqd???????к??Щ?????鰱??????ж??????С?
????tasklet?? 1??tasklet????????????ж??????HI_SOFTIRQ??TASKLET_SOFTIRQ??
????2????????????????????????????
????3??????tasklet?????????С?
????4?????????????????С?
????5????????????tasklet??
???????????У? 1?????????????У????仰????????????????С?
????2????????????????