On Thu, 8 Dec 2022, Tony Lindgren wrote: > * Ilpo Järvinen <ilpo.jarvinen@xxxxxxxxxxxxxxx> [221208 09:12]: > > On Wed, 7 Dec 2022, Tony Lindgren wrote: > > > + ret = serial_core_add_one_port(drv, port); > > > + if (ret) > > > + return ret; > > > + > > > + mutex_lock(&port_mutex); > > > + > > > + /* Inititalize a serial core controller device if needed */ > > > + ctrl_dev = serial_core_ctrl_find(drv, port->dev, port->ctrl_id); > > > + if (!ctrl_dev) { > > > + ctrl_dev = serial_core_ctrl_device_add(port); > > > + if (!ctrl_dev) > > > + goto err_remove_port; > > > + allocated = true; > > > + } > > > + > > > + /* Initialize a serial core port device */ > > > + ret = serial_core_port_device_add(ctrl_dev, port); > > > > How is ->port_dev supposed to work here? > > > > ->port_dev is not set until in serial_core_port_device_add() but you made > > serial_core_add_one_port() call before that. > > Hmm do you mean you want to call serial_core_add_one_port() later after > serial_core_port_device_add()? > > Or are you seeing some uninitialized use of port->port_dev (and not > port->dev)? With the other patch on top of this, yes, I did see uninitialized port->port_dev already in serial_core_add_one_port()->uart_configure_port(). While that could be solved by removing the pm_runtime_*() calls from there, I think it's a generic problem because after serial_core_add_one_port() the port can have anything happening on it, no? -- i.