+ -
当前位置:首页 → 问答吧 → lock_kernel unlock_kernel编译不通过

lock_kernel unlock_kernel编译不通过

时间:2011-11-21

来源:互联网

lock_kernel unlock_kernel这两个函数在比较高的版本高编译出错,说没有这个定义,高版本的linux不用这个函数了吗?那要用什么函数来代替?

作者: X20A_StrikeFreedom   发布时间: 2011-11-21

这个是大内核锁啊,新的版本去掉了。这个锁定内核的办法很影响性能,人家为了把这个去掉都搞了好久了吧


这个可以完全去掉,或者转换成某个子系统的锁吧。

作者: lvyinghong   发布时间: 2011-11-22

那在驱动中去掉这个锁应该不会出错吧?

作者: X20A_StrikeFreedom   发布时间: 2011-11-22

引用 2 楼 x20a_strikefreedom 的回复:
那在驱动中去掉这个锁应该不会出错吧?

根据你的需求换成别的锁呗 神马自旋锁 互斥体之类的

大内核锁应该保护的是SMP的情况,如果你是单核cpu,那就更好改了

作者: deep_pro   发布时间: 2011-11-22

这个是在USB驱动框架里的 我应该换成什么锁 或是可以直接不用锁也没关系?
C/C++ code

static void usb_disconnect(struct usb_intertace *interface)
{
    struct usb_device *devp;
    //lock_kernel();
    devp=usb_get_intfdata(interface);
    usb_set_intfdata(interface, NULL);
    usb_deregister_dev(interface, &usb_driver_class);
    //unlock_kernel();
    
    kref_put(&devp->kref, usb_device_delete);
    
}

作者: X20A_StrikeFreedom   发布时间: 2011-11-22

你应该参考你要移植到的linux源码里的写法 例如2.6.12里搜 usb_disconnect

void usb_disconnect(struct usb_device **pdev)
{
struct usb_device *udev = *pdev;

...
usb_lock_device(udev);
...
usb_unlock_device(udev);
...
}



作者: deep_pro   发布时间: 2011-11-22