日期:2014-05-16  浏览次数:20675 次

LINUX中USB的INIT有个浅显的错误,不知大家发现没有?
usb_init中有如下代码:
static int_usb_init(void)
{
......
retval=bus_register(&usb_bus_type);
if(retval)
  goto bus_register_failed;
......
  bus_unregister(&usb_bus_type);
bus_register_failed:
  ksuspend_usb_cleanup
......
}
如果调用bus_register(&usb_bus_type)失败,应该调用bus_unregister(&usb_bus_type),大家看看上面的程序调用了什么?竟然调用了ksuspend_usb_cleanup,这是个错误,还是我理解有误?

------解决方案--------------------
个人认为这个 ksuspend_usb_cleanup 应该代表一系列的反操作,清除在bus_register()之前申请的一些资源。