lamp_lighter 发表于 2014-08-11 20:41

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

本帖最后由 lamp_lighter 于 2014-08-11 20:45 编辑

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

下面是该USB设备的断开函数:
static void skel_disconnect(struct usb_interface *interface)
{
      struct usb_skel *dev;
      int minor = interface->minor;

      /* prevent skel_open() from racing skel_disconnect() */
      lock_kernel();

      dev = usb_get_intfdata(interface);
      usb_set_intfdata(interface, NULL);

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

      unlock_kernel();

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

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

其中usb_skel是usb设备
页: [1]
查看完整版本: 求助:LDD3的USB驱动实例程序中,怎么去掉其中的大内核锁?