- 論壇徽章:
- 0
|
本帖最后由 lamp_lighter 于 2014-08-11 20:45 編輯
RT
原代碼之所以使用大內(nèi)核鎖,是為了防止設(shè)備的打開調(diào)用(skel_open)和斷開調(diào)用(skel_disconnect)產(chǎn)生競態(tài)。然而現(xiàn)在3.15.3的內(nèi)核已經(jīng)取消大內(nèi)核鎖,那么在保證不產(chǎn)生同樣競態(tài)的前提下,該怎么修改原代碼?
下面是該USB設(shè)備的斷開函數(shù):
- 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);
- }
復(fù)制代碼 其中usb_skel是usb設(shè)備 |
|