- 论坛徽章:
- 0
|
本帖最后由 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设备 |
|