浏览代码

[PATCH] USB: fix usb-serial generic initialization

At module load time, if a generic device is found, the tty information
for the device is not set up properly (as the tty structures aren't initialized
yet.)  This can cause big problems for things like udev.  This patch fixes this.

Thanks to Kay Sievers for the original patch for this problem.

Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Greg Kroah-Hartman 20 年之前
父节点
当前提交
06299db3e7
共有 1 个文件被更改,包括 10 次插入10 次删除
  1. 10 10
      drivers/usb/serial/usb-serial.c

+ 10 - 10
drivers/usb/serial/usb-serial.c

@@ -1297,13 +1297,6 @@ static int __init usb_serial_init(void)
 		goto exit_bus;
 		goto exit_bus;
 	}
 	}
 
 
-	/* register the generic driver, if we should */
-	result = usb_serial_generic_register(debug);
-	if (result < 0) {
-		err("%s - registering generic driver failed", __FUNCTION__);
-		goto exit_generic;
-	}
-
 	usb_serial_tty_driver->owner = THIS_MODULE;
 	usb_serial_tty_driver->owner = THIS_MODULE;
 	usb_serial_tty_driver->driver_name = "usbserial";
 	usb_serial_tty_driver->driver_name = "usbserial";
 	usb_serial_tty_driver->devfs_name = "usb/tts/";
 	usb_serial_tty_driver->devfs_name = "usb/tts/";
@@ -1329,17 +1322,24 @@ static int __init usb_serial_init(void)
 		goto exit_tty;
 		goto exit_tty;
 	}
 	}
 
 
+	/* register the generic driver, if we should */
+	result = usb_serial_generic_register(debug);
+	if (result < 0) {
+		err("%s - registering generic driver failed", __FUNCTION__);
+		goto exit_generic;
+	}
+
 	info(DRIVER_DESC " " DRIVER_VERSION);
 	info(DRIVER_DESC " " DRIVER_VERSION);
 
 
 	return result;
 	return result;
 
 
+exit_generic:
+	usb_deregister(&usb_serial_driver);
+
 exit_tty:
 exit_tty:
 	tty_unregister_driver(usb_serial_tty_driver);
 	tty_unregister_driver(usb_serial_tty_driver);
 
 
 exit_reg_driver:
 exit_reg_driver:
-	usb_serial_generic_deregister();
-
-exit_generic:
 	bus_unregister(&usb_serial_bus_type);
 	bus_unregister(&usb_serial_bus_type);
 
 
 exit_bus:
 exit_bus: