免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1296 | 回复: 0
打印 上一主题 下一主题

求助:LDD3的USB驱动实例程序中,怎么去掉其中的大内核锁? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-11 20:41 |只看该作者 |倒序浏览
本帖最后由 lamp_lighter 于 2014-08-11 20:45 编辑

RT
原代码之所以使用大内核锁,是为了防止设备的打开调用(skel_open)和断开调用(skel_disconnect)产生竞态。然而现在3.15.3的内核已经取消大内核锁,那么在保证不产生同样竞态的前提下,该怎么修改原代码?

下面是该USB设备的断开函数:

  1. static void skel_disconnect(struct usb_interface *interface)
  2. {
  3.         struct usb_skel *dev;
  4.         int minor = interface->minor;

  5.         /* prevent skel_open() from racing skel_disconnect() */
  6.         lock_kernel();

  7.         dev = usb_get_intfdata(interface);
  8.         usb_set_intfdata(interface, NULL);

  9.         /* give back our minor */
  10.         usb_deregister_dev(interface, &skel_class);

  11.         unlock_kernel();

  12.         /* decrement our usage count */
  13.         kref_put(&dev->kref, skel_delete);

  14.         info("USB Skeleton #%d now disconnected", minor);
  15. }

复制代码
其中usb_skel是usb设备
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP