Am Freitag, den 10.07.2020, 11:35 +0200 schrieb Joakim Tjernlund:
Hi,
--- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c @@ -1999,19 +1999,19 @@ static int __init acm_init(void) acm_tty_driver->subtype = SERIAL_TYPE_NORMAL, acm_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV; acm_tty_driver->init_termios = tty_std_termios;
- acm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD |
- acm_tty_driver->init_termios.c_cflag = B0 | CS8 | CREAD | HUPCL | CLOCAL; tty_set_operations(acm_tty_driver, &acm_ops);
- retval = tty_register_driver(acm_tty_driver);
- retval = usb_register(&acm_driver);
No,
you cannot do that. This means that probe() is now live. Probe() in turn does this:
tty_dev = tty_port_register_device(&acm->port, acm_tty_driver, minor, &control_interface->dev); if (IS_ERR(tty_dev)) { rv = PTR_ERR(tty_dev); goto alloc_fail6; }
That is just not a good idea when the tty is not already registered. You are opening up a race.
Regards Oliver