社区
Linux_Kernel
帖子详情
USB拔插导致内核deadlock
mutourenzhang
2011-10-20 10:11:16
最近在产品上增加对USB无线网卡支持(ar9170芯片),在做健壮性测试时发现反复拔插USB不到10次(随机)会导致内核(2.6.31)死锁,而且出现死锁的地方也是不固定的。但是在接上USB采用手动insmod和rmmod驱动时,并不会出现死锁现象,驱动采用的是标准内核自带驱动,不知道哪位同仁能指点指点,谢谢!
...全文
151
8
打赏
收藏
USB拔插导致内核deadlock
最近在产品上增加对USB无线网卡支持(ar9170芯片),在做健壮性测试时发现反复拔插USB不到10次(随机)会导致内核(2.6.31)死锁,而且出现死锁的地方也是不固定的。但是在接上USB采用手动insmod和rmmod驱动时,并不会出现死锁现象,驱动采用的是标准内核自带驱动,不知道哪位同仁能指点指点,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Andiry
2011-10-21
打赏
举报
回复
rmmod会保证正常的卸载顺序,等待传输完成,释放资源,等等。直接拔插可能会在执行中数据错误,如果没有正确的recover机制的话可能会出问题。死锁出现在什么函数里?
mutourenzhang
2011-10-21
打赏
举报
回复
在2.6.37上试过,也有这种问题(反复拔插几次内核就没反应了 估计是死锁),关键是如果驱动有问题,rmmod也是调用的和拔掉网卡相同的disconnect函数,为什么就没问题呢?实在想不明白,望指点!
Andiry
2011-10-21
打赏
举报
回复
31太旧了,最新的内核有这问题吗?
Andiry
2011-10-21
打赏
举报
回复
看起来没啥问题,我也不知道。。
mutourenzhang
2011-10-21
打赏
举报
回复
自带驱动disconnect函数中最先掉用的就是ieee80211_unregister_hw这个函数,没有很特殊的卸载操作
static void ar9170_usb_disconnect(struct usb_interface *intf)
{
struct ar9170_usb *aru = usb_get_intfdata(intf);
if (!aru)
return;
aru->common.state = AR9170_IDLE;
ar9170_unregister(&aru->common);
ar9170_usb_cancel_urbs(aru);
release_firmware(aru->init_values);
release_firmware(aru->firmware);
usb_put_dev(aru->udev);
usb_set_intfdata(intf, NULL);
ieee80211_free_hw(aru->common.hw);
}
Andiry
2011-10-21
打赏
举报
回复
别的无线网卡没问题说明可能是具体的驱动问题,跟协议层无关,你的无线网卡卸载函数中有什么特殊操作吗?对硬件的操作,资源释放等等
mutourenzhang
2011-10-21
打赏
举报
回复
rmmod和热拔插都是调用驱动相同的disconnect卸载函数,按道理说资源释放流程也是一样的。
mutourenzhang
2011-10-21
打赏
举报
回复
死在内核80211协议栈卸载函数ieee80211_unregister_hw中,但是死锁具体位置是不固定的!开始我也怀疑是由于内核协议栈有问题,不过我手上还有一款其他芯片(RT73)的无线网卡,随便怎么拔插,都不会出现这个问题。很是不解。。
【linux驱动】
USB
子系统分析
一、
USB
基础知识 二、Linux
USB
驱动分析 Linux
内核
USB
驱动,以总线(Bus)、设备(device)、驱动(device_driver)模型来完成设备驱动和设备的绑定,实现
USB
业务逻辑。 2.1
USB
子系统框架 整个
USB
驱动模型可以总结为如上图,
USB
分为主机测和设备侧。本文重点分析主机测一端的
USB
驱动。 从主机HOST测来看,其包含:
USB
设备驱动...
USB
基础知识总结
USB
基础知识总结
【操作系统-Day 25】死锁 (
Deadlock
):揭秘多线程编程的“终极杀手”
在并发编程的世界里,线程与进程的协作带来了前所未有的效率,但同时也引入了一系列复杂的挑战。其中,**死锁 (
Deadlock
)** 无疑是其中最棘手、也最致命的问题之一。它像一个无形的幽灵,能让一个看似健壮的系统瞬间陷入停滞,所有相关的进程都无限期地等待着永远不会到来的资源。本文将作为您深入理解死锁的向导,首先通过生动的现实生活比喻和经典的“哲学家就餐问题”来直观地揭示什么是死锁。随后,我们将系统性地剖析
导致
死锁产生的四个缺一不可的必要条件——互斥、持有并等待、非抢占和循环等待。理解这些根源,是后续学习如何
linux
usb
枚举过程分析
插
入一个
USB
设备的处理机制总体计: 1. 中断定时查询: 2. 总体架构设计: 3. 解析各个部分: 中断定时查询: Hub层处理
usb
枚举 当守护程序第一次运行或
usb
port上状态发生变化,守护进程被唤醒都会运行hub_events函数,这个函数在
usb
系统中处理核心位置,
usb
的枚举过程就是由它完成。
usb
具体的枚举流程: hub_events函数 ...
君正X系列开发13---
USB
使用4G模块报错
设备使用了4G模块,接口是
USB
的;在调试过程中出现-71错误,经过搜索;和硬件工程师沟通,他确实没有走差分线,
导致
值阻抗不匹配,重新画板OK!在
内核
找到了所有错误代号:kernel/arch/mips/include/uapi/asm/errno.h/* * This file is subject to the terms and conditions of the GNU General P...
Linux_Kernel
4,469
社区成员
17,459
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章