mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 22:14:03 +02:00
cxl/port: Restart port enumeration when a sibling adds the dport first
Endpoint probes can race while enumerating a shared switch. If a
sibling probe adds the dport first, the losing probe finds the dport
already present, gets -EBUSY, and fails to enumerate the endpoint.
Treat this race the same as the existing port-created case by
restarting the port walk, allowing it to find the existing dport
and continue enumeration.
This race was discovered while testing a cxl_test mixed-granularity
topology, where twelve endpoints behind shared switches are probed in
parallel during module load.
Fixes: 4f06d81e7c ("cxl: Defer dport allocation for switch ports")
Signed-off-by: Alison Schofield <alison.schofield@intel.com>
Tested-by: Li Ming <ming.li@zohomail.com>
Reviewed-by: Li Ming <ming.li@zohomail.com>
Link: https://patch.msgid.link/20260714020438.1822669-1-alison.schofield@intel.com
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
This commit is contained in:
parent
77b814c183
commit
a623128bc2
|
|
@ -1749,8 +1749,8 @@ static int add_port_attach_ep(struct cxl_memdev *cxlmd,
|
|||
parent_dport, uport_dev,
|
||||
dport_dev);
|
||||
if (IS_ERR(dport)) {
|
||||
/* Port already exists, restart iteration */
|
||||
if (PTR_ERR(dport) == -EAGAIN)
|
||||
/* Port or dport already exists, restart iteration */
|
||||
if (PTR_ERR(dport) == -EAGAIN || PTR_ERR(dport) == -EBUSY)
|
||||
return 0;
|
||||
return PTR_ERR(dport);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user