tasklet和work_queue的一点使用总结

tasklet和work_queue的使用
最近和同事一起做驱动,同事负责USB接口,我负责SDIO接口,因为我前面还有其他工作,他负责所有框架性东西,最近发现一个很典型的问题。他 的数据通路都已经完全通了,我发现我的SDIO接口在读写数据的时候老是提示在中断中发生调度,且调度超时的BUG。后面仔细阅读代码才发现,他的数据发送和接收部分都是用tasklet来实现的,因为USB里面没有中断,发送urb没有等待队列,所以不会发生调度。但是sdio中CMD53/53都有使用到wait_queue_head_t这个机制,涉及到睡眠和调度。仔细查看tasklet发现tasklet是软中断的一种,在tasklet里面不能睡眠不能调度,找到问题所在。解决版本如下。把SDIO和USB接口分开,原USB框架不变,SDIO部分采用work_queue来实现读写,work_queue支持睡眠和调度,问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值