最近有个公司找到唐僧,希望唐僧给他解决一个驱动程序的bug,该公司最近开发了一款无线路由器,客户在使用这款路由器的时候经常用着、用着就无法上网了,而且不管怎么重链,再也链接不上了,但是从串口看系统还是正常运行,而且CPU的负荷也不高。唐僧把这个任务交给了悟空,为了尽快解决这个问题该公司还特意安排了一个经验丰富的嵌入式工程协助悟空,这个工程师叫圆方,每次悟空和他讨论问题的时候,悟空说的最多的一句话就是:圆方,你怎么看……
悟空:该无线驱动的后半部分是采用了中断后班部分的tasklet机制来实现的。而我个人觉得,这里应该采用工作队列就可以了,而不用使用tasklet。圆方,你怎么看呢?
圆方:其实,在中断后半部分,判断使用软中断,还是使用工作队列的方式其实很简单,如果这个后半部分需要休眠,就使用工作队列,如果不需要一般就使用tasklet机制。而这个后半部分似乎不需要休眠,所以这里选用了taslet机制。
悟空:虽然,休眠是一个重要的判断依据,但是,tasklet机制是采用软中断来实现的,而软中断会对系统的影响比较大,而且执行的时候不能被打断。圆方,你怎么看呢?
圆方:我不这么认为,中断处理,当然也包括中断的后半部分,当然是希望尽量快的得到处理,而工作队列作为一个内核线程,无法保证到尽量快的处理的要求。所以中断处理在设计的时候,尽量使用tasklet,而不是工作队列。