* [PATCH] USB: serial: use tty_port_register_device_serdev @ 2024-05-02 10:07 Mans Rullgard 2024-05-02 10:18 ` Johan Hovold 2024-05-02 23:04 ` kernel test robot 0 siblings, 2 replies; 8+ messages in thread From: Mans Rullgard @ 2024-05-02 10:07 UTC (permalink / raw) To: Johan Hovold; +Cc: Greg Kroah-Hartman, linux-usb Use tty_port_register_device_serdev() so that usb-serial devices can be used as serdev controllers. Signed-off-by: Mans Rullgard <mans@mansr.com> --- drivers/usb/serial/bus.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/usb/serial/bus.c b/drivers/usb/serial/bus.c index 6c812d01b37d..34a1f355f17f 100644 --- a/drivers/usb/serial/bus.c +++ b/drivers/usb/serial/bus.c @@ -50,8 +50,9 @@ static int usb_serial_device_probe(struct device *dev) } minor = port->minor; - tty_dev = tty_port_register_device(&port->port, usb_serial_tty_driver, - minor, dev); + tty_dev = tty_port_register_device_serdev(&port->port, + usb_serial_tty_driver, + minor, dev); if (IS_ERR(tty_dev)) { retval = PTR_ERR(tty_dev); goto err_port_remove; -- 2.45.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] USB: serial: use tty_port_register_device_serdev 2024-05-02 10:07 [PATCH] USB: serial: use tty_port_register_device_serdev Mans Rullgard @ 2024-05-02 10:18 ` Johan Hovold 2024-05-02 10:45 ` Måns Rullgård 2024-05-02 23:04 ` kernel test robot 1 sibling, 1 reply; 8+ messages in thread From: Johan Hovold @ 2024-05-02 10:18 UTC (permalink / raw) To: Mans Rullgard; +Cc: Greg Kroah-Hartman, linux-usb On Thu, May 02, 2024 at 11:07:28AM +0100, Mans Rullgard wrote: > Use tty_port_register_device_serdev() so that usb-serial devices > can be used as serdev controllers. I'm afraid it's not that easy. The reason serdev is not enabled for usb-serial is that there's currently no support for handling hotplug in serdev. The device can go away from under you at any time and then you'd crash the kernel. Johan ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] USB: serial: use tty_port_register_device_serdev 2024-05-02 10:18 ` Johan Hovold @ 2024-05-02 10:45 ` Måns Rullgård 2024-05-02 10:54 ` Greg Kroah-Hartman 0 siblings, 1 reply; 8+ messages in thread From: Måns Rullgård @ 2024-05-02 10:45 UTC (permalink / raw) To: Johan Hovold; +Cc: Greg Kroah-Hartman, linux-usb Johan Hovold <johan@kernel.org> writes: > On Thu, May 02, 2024 at 11:07:28AM +0100, Mans Rullgard wrote: >> Use tty_port_register_device_serdev() so that usb-serial devices >> can be used as serdev controllers. > > I'm afraid it's not that easy. The reason serdev is not enabled for > usb-serial is that there's currently no support for handling hotplug in > serdev. The device can go away from under you at any time and then you'd > crash the kernel. Oh, that's unfortunate. Regular serial ports can go away too, though, and that seems to be handled fine. What am I missing? -- Måns Rullgård ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] USB: serial: use tty_port_register_device_serdev 2024-05-02 10:45 ` Måns Rullgård @ 2024-05-02 10:54 ` Greg Kroah-Hartman 2024-05-02 13:24 ` Måns Rullgård 0 siblings, 1 reply; 8+ messages in thread From: Greg Kroah-Hartman @ 2024-05-02 10:54 UTC (permalink / raw) To: Måns Rullgård; +Cc: Johan Hovold, linux-usb On Thu, May 02, 2024 at 11:45:44AM +0100, Måns Rullgård wrote: > Johan Hovold <johan@kernel.org> writes: > > > On Thu, May 02, 2024 at 11:07:28AM +0100, Mans Rullgard wrote: > >> Use tty_port_register_device_serdev() so that usb-serial devices > >> can be used as serdev controllers. > > > > I'm afraid it's not that easy. The reason serdev is not enabled for > > usb-serial is that there's currently no support for handling hotplug in > > serdev. The device can go away from under you at any time and then you'd > > crash the kernel. > > Oh, that's unfortunate. Regular serial ports can go away too, though, > and that seems to be handled fine. What am I missing? How is it handled? Normal serial ports can go away but in practice, it's a rare occurance, and usually people use serdev for devices where the ports can not be removed (i.e. internal connections). thanks, greg k-h ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] USB: serial: use tty_port_register_device_serdev 2024-05-02 10:54 ` Greg Kroah-Hartman @ 2024-05-02 13:24 ` Måns Rullgård 2024-05-02 13:57 ` Greg Kroah-Hartman 0 siblings, 1 reply; 8+ messages in thread From: Måns Rullgård @ 2024-05-02 13:24 UTC (permalink / raw) To: Greg Kroah-Hartman; +Cc: Johan Hovold, linux-usb Greg Kroah-Hartman <gregkh@linuxfoundation.org> writes: > On Thu, May 02, 2024 at 11:45:44AM +0100, Måns Rullgård wrote: >> Johan Hovold <johan@kernel.org> writes: >> >> > On Thu, May 02, 2024 at 11:07:28AM +0100, Mans Rullgard wrote: >> >> Use tty_port_register_device_serdev() so that usb-serial devices >> >> can be used as serdev controllers. >> > >> > I'm afraid it's not that easy. The reason serdev is not enabled for >> > usb-serial is that there's currently no support for handling hotplug in >> > serdev. The device can go away from under you at any time and then you'd >> > crash the kernel. >> >> Oh, that's unfortunate. Regular serial ports can go away too, though, >> and that seems to be handled fine. What am I missing? > > How is it handled? Normal serial ports can go away but in practice, > it's a rare occurance, and usually people use serdev for devices where > the ports can not be removed (i.e. internal connections). If I unbind a regular serial port from its driver using sysfs, a serdev device defined in a device tree gets removed as expected. Binding the serial port makes everything come back again. I fail to see any problem here. If there is one, you'll have to be less evasive in explaining what it is. -- Måns Rullgård ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] USB: serial: use tty_port_register_device_serdev 2024-05-02 13:24 ` Måns Rullgård @ 2024-05-02 13:57 ` Greg Kroah-Hartman 2024-05-02 14:32 ` Måns Rullgård 0 siblings, 1 reply; 8+ messages in thread From: Greg Kroah-Hartman @ 2024-05-02 13:57 UTC (permalink / raw) To: Måns Rullgård; +Cc: Johan Hovold, linux-usb On Thu, May 02, 2024 at 02:24:41PM +0100, Måns Rullgård wrote: > Greg Kroah-Hartman <gregkh@linuxfoundation.org> writes: > > > On Thu, May 02, 2024 at 11:45:44AM +0100, Måns Rullgård wrote: > >> Johan Hovold <johan@kernel.org> writes: > >> > >> > On Thu, May 02, 2024 at 11:07:28AM +0100, Mans Rullgard wrote: > >> >> Use tty_port_register_device_serdev() so that usb-serial devices > >> >> can be used as serdev controllers. > >> > > >> > I'm afraid it's not that easy. The reason serdev is not enabled for > >> > usb-serial is that there's currently no support for handling hotplug in > >> > serdev. The device can go away from under you at any time and then you'd > >> > crash the kernel. > >> > >> Oh, that's unfortunate. Regular serial ports can go away too, though, > >> and that seems to be handled fine. What am I missing? > > > > How is it handled? Normal serial ports can go away but in practice, > > it's a rare occurance, and usually people use serdev for devices where > > the ports can not be removed (i.e. internal connections). > > If I unbind a regular serial port from its driver using sysfs, a serdev > device defined in a device tree gets removed as expected. Binding the > serial port makes everything come back again. I fail to see any problem > here. If there is one, you'll have to be less evasive in explaining > what it is. Try yanking a usb-serial device out with this patch applied and see what happens. I'm pretty sure serdev will not handle that well, just like if you yank out a pci serial device while it is being used. Doing bind/unbind is not a "surprise" removal, but a nice orderly one :) If this does now work, nice, but I haven't seen the changes to serdev to make this happen, I wonder what changed... thanks, greg k-h ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] USB: serial: use tty_port_register_device_serdev 2024-05-02 13:57 ` Greg Kroah-Hartman @ 2024-05-02 14:32 ` Måns Rullgård 0 siblings, 0 replies; 8+ messages in thread From: Måns Rullgård @ 2024-05-02 14:32 UTC (permalink / raw) To: Greg Kroah-Hartman; +Cc: Johan Hovold, linux-usb Greg Kroah-Hartman <gregkh@linuxfoundation.org> writes: > On Thu, May 02, 2024 at 02:24:41PM +0100, Måns Rullgård wrote: >> Greg Kroah-Hartman <gregkh@linuxfoundation.org> writes: >> >> > On Thu, May 02, 2024 at 11:45:44AM +0100, Måns Rullgård wrote: >> >> Johan Hovold <johan@kernel.org> writes: >> >> >> >> > On Thu, May 02, 2024 at 11:07:28AM +0100, Mans Rullgard wrote: >> >> >> Use tty_port_register_device_serdev() so that usb-serial devices >> >> >> can be used as serdev controllers. >> >> > >> >> > I'm afraid it's not that easy. The reason serdev is not enabled for >> >> > usb-serial is that there's currently no support for handling hotplug in >> >> > serdev. The device can go away from under you at any time and then you'd >> >> > crash the kernel. >> >> >> >> Oh, that's unfortunate. Regular serial ports can go away too, though, >> >> and that seems to be handled fine. What am I missing? >> > >> > How is it handled? Normal serial ports can go away but in practice, >> > it's a rare occurance, and usually people use serdev for devices where >> > the ports can not be removed (i.e. internal connections). >> >> If I unbind a regular serial port from its driver using sysfs, a serdev >> device defined in a device tree gets removed as expected. Binding the >> serial port makes everything come back again. I fail to see any problem >> here. If there is one, you'll have to be less evasive in explaining >> what it is. > > Try yanking a usb-serial device out with this patch applied and see what > happens. I'm pretty sure serdev will not handle that well, just like if > you yank out a pci serial device while it is being used. Doing > bind/unbind is not a "surprise" removal, but a nice orderly one :) > > If this does now work, nice, but I haven't seen the changes to serdev to > make this happen, I wonder what changed... Turns out I missed one change that is needed for unplugging to be handled: --- a/drivers/usb/serial/bus.c +++ b/drivers/usb/serial/bus.c @@ -91,7 +91,7 @@ static void usb_serial_device_remove(struct device *dev) autopm_err = usb_autopm_get_interface(port->serial->interface); minor = port->minor; - tty_unregister_device(usb_serial_tty_driver, minor); + tty_port_unregister_device(&port->port, usb_serial_tty_driver, minor); driver = port->serial->type; if (driver->port_remove) With this additional change, yanking (shorting the data lines; the thing is soldered) the usb-serial converter works, although a couple of warnings are printed: [ 28.678301] usb 1-1: USB disconnect, device number 2 [ 28.683695] ttyUSB ttyUSB0: tty_hangup: tty->count(1) != (#fd's(0) + #kopen's(0)) [ 28.691516] ftdi_sio ttyUSB0: error from flowcontrol urb [ 28.759056] ttyUSB ttyUSB0: tty_port_close_start: tty->count = 1 port count = 0 [ 28.772531] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0 [ 28.781346] ftdi_sio 1-1:1.0: device disconnected Where should I go looking for the cause of these? -- Måns Rullgård ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] USB: serial: use tty_port_register_device_serdev 2024-05-02 10:07 [PATCH] USB: serial: use tty_port_register_device_serdev Mans Rullgard 2024-05-02 10:18 ` Johan Hovold @ 2024-05-02 23:04 ` kernel test robot 1 sibling, 0 replies; 8+ messages in thread From: kernel test robot @ 2024-05-02 23:04 UTC (permalink / raw) To: Mans Rullgard, Johan Hovold; +Cc: oe-kbuild-all, Greg Kroah-Hartman, linux-usb Hi Mans, kernel test robot noticed the following build errors: [auto build test ERROR on johan-usb-serial/usb-next] [also build test ERROR on johan-usb-serial/usb-linus usb/usb-testing usb/usb-next usb/usb-linus tty/tty-testing tty/tty-next tty/tty-linus linus/master v6.9-rc6 next-20240502] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Mans-Rullgard/USB-serial-use-tty_port_register_device_serdev/20240502-180923 base: https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial.git usb-next patch link: https://lore.kernel.org/r/20240502100728.7914-1-mans%40mansr.com patch subject: [PATCH] USB: serial: use tty_port_register_device_serdev config: s390-randconfig-r081-20240503 (https://download.01.org/0day-ci/archive/20240503/202405030657.vgUKnyOZ-lkp@intel.com/config) compiler: s390-linux-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240503/202405030657.vgUKnyOZ-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202405030657.vgUKnyOZ-lkp@intel.com/ All errors (new ones prefixed by >>): drivers/usb/serial/bus.c: In function 'usb_serial_device_probe': >> drivers/usb/serial/bus.c:53:19: error: too few arguments to function 'tty_port_register_device_serdev' 53 | tty_dev = tty_port_register_device_serdev(&port->port, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from include/linux/tty.h:11, from drivers/usb/serial/bus.c:10: include/linux/tty_port.h:150:16: note: declared here 150 | struct device *tty_port_register_device_serdev(struct tty_port *port, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ vim +/tty_port_register_device_serdev +53 drivers/usb/serial/bus.c 31 32 static int usb_serial_device_probe(struct device *dev) 33 { 34 struct usb_serial_port *port = to_usb_serial_port(dev); 35 struct usb_serial_driver *driver; 36 struct device *tty_dev; 37 int retval = 0; 38 int minor; 39 40 /* make sure suspend/resume doesn't race against port_probe */ 41 retval = usb_autopm_get_interface(port->serial->interface); 42 if (retval) 43 return retval; 44 45 driver = port->serial->type; 46 if (driver->port_probe) { 47 retval = driver->port_probe(port); 48 if (retval) 49 goto err_autopm_put; 50 } 51 52 minor = port->minor; > 53 tty_dev = tty_port_register_device_serdev(&port->port, 54 usb_serial_tty_driver, 55 minor, dev); 56 if (IS_ERR(tty_dev)) { 57 retval = PTR_ERR(tty_dev); 58 goto err_port_remove; 59 } 60 61 usb_autopm_put_interface(port->serial->interface); 62 63 dev_info(&port->serial->dev->dev, 64 "%s converter now attached to ttyUSB%d\n", 65 driver->description, minor); 66 67 return 0; 68 69 err_port_remove: 70 if (driver->port_remove) 71 driver->port_remove(port); 72 err_autopm_put: 73 usb_autopm_put_interface(port->serial->interface); 74 75 return retval; 76 } 77 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2024-05-02 23:05 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-05-02 10:07 [PATCH] USB: serial: use tty_port_register_device_serdev Mans Rullgard 2024-05-02 10:18 ` Johan Hovold 2024-05-02 10:45 ` Måns Rullgård 2024-05-02 10:54 ` Greg Kroah-Hartman 2024-05-02 13:24 ` Måns Rullgård 2024-05-02 13:57 ` Greg Kroah-Hartman 2024-05-02 14:32 ` Måns Rullgård 2024-05-02 23:04 ` kernel test robot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox