Re: [PATCH 2/3] serial: 8250_mxpcie: fail the probe when a port cannot be registered

Linmao Li <[email protected]>
Newsgroups gmane.linux.serial,gmane.linux.kernel
Message-ID <[email protected]>
在 2026/8/18 21:19, Andy Shevchenko 写道:
> On Tue, Aug 18, 2026 at 05:39:17PM +0800, Linmao Li wrote:
>> When serial8250_register_8250_port() fails the loop only breaks out and
>> the probe still returns success.  The entries it did not reach keep the
>> zero devm_kzalloc() left there, and the entry that failed keeps a
>> negative error code.
>>
>> mxpcie8250_remove() then feeds all of them to
>> serial8250_unregister_port(), which checks neither: line 0 unregisters a
>> port this driver does not own, and the negative line indexes
>> serial8250_ports[] out of bounds.
>>
>> Fail the probe instead, unregistering the ports registered so far.
> This is behavioural difference. Before it was "register as much ports as we
> can", now "don't register even a single one". If one of those UARTs worked in
> the previous case for whatever reason, this patch will break that.
You are right, and 8250_pci.c - which this driver was split out of - is
explicit about it: pciserial_init_ports() breaks out of the loop on the
first failure, but returns the ports it did register and records how many
in priv->nr, which is all pciserial_detach_ports() then walks.

So what the split lost is that counter, not the "keep what works"
behaviour. mxpcie8250_remove() walks all num_ports entries, so it hands
serial8250_unregister_port() a line 0 for every entry the loop never
reached - a port this driver does not own - and a negative line for the
one that failed.

v2 keeps the partial registration and restores the counter only.


Thanks,
Linmao

>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.