求助: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]