s390/pci: ignore stale configuration request event
A configuration request event may be stale, that is the event may reference a zdev which was already configured. This can happen when a hotplug happens during boot such that the device is discovered and configured in the initial clp_list_pci(), then after initialization we enable events and process the original configuration request which additionally still contains the old disabled function handle leading to a failure during device enablement and subsequent I/O lockout. Fix this by restoring the check that the device to be configured is in standby which was removed in commitf606b3ef47
("s390/pci: adapt events for zbus"). This check does not need serialization as we only enable the events after zPCI has fully initialized, which includes the initial clp_list_pci(), rescan only does updates and events are serialized with respect to each other. Fixes:f606b3ef47
("s390/pci: adapt events for zbus") Cc: <stable@vger.kernel.org> # 5.8 Reported-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com> Tested-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com> Acked-by: Pierre Morel <pmorel@linux.ibm.com> Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
This commit is contained in:
parent
0b8eb2ee9d
commit
b76fee1bc5
@ -92,6 +92,9 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)
|
||||
ret = clp_add_pci_device(ccdf->fid, ccdf->fh, 1);
|
||||
break;
|
||||
}
|
||||
/* the configuration request may be stale */
|
||||
if (zdev->state != ZPCI_FN_STATE_STANDBY)
|
||||
break;
|
||||
zdev->fh = ccdf->fh;
|
||||
zdev->state = ZPCI_FN_STATE_CONFIGURED;
|
||||
ret = zpci_enable_device(zdev);
|
||||
|
Loading…
Reference in New Issue
Block a user