ACK: [SRU][F][PATCH 1/1] s390/pci: fix hot-plug of PCI function missing bus

Stefan Bader stefan.bader at canonical.com
Fri Nov 13 07:59:27 UTC 2020


On 12.11.20 10:44, frank.heimes at canonical.com wrote:
> From: Niklas Schnelle <schnelle at linux.ibm.com>
> 
> BugLink: https://bugs.launchpad.net/bugs/1903682
> 
> Under some circumstances in particular with "Reconfigure I/O Path"
> a zPCI function may first appear in Standby through a PCI event with
> PEC 0x0302 which initially makes it visible to the zPCI subsystem,
> Only after that is it configured with a zPCI event  with PEC 0x0301.
> If the zbus is still missing a PCI function zero (devfn == 0) when the
> PCI event 0x0301 is handled zdev->zbus->bus is still NULL and gets
> dereferenced in common code.
> Check for this case and enable but don't scan the zPCI function.
> This matches what would happen if we immediately got the 0x0301
> configuration request or the function was included in CLP List PCI.
> In all cases the PCI functions with devfn != 0 will be scanned once
> function 0 appears.
> 
> Fixes: 3047766bc6ec ("s390/pci: fix enabling a reserved PCI function")
> Cc: <stable at vger.kernel.org> # 5.8
> Signed-off-by: Niklas Schnelle <schnelle at linux.ibm.com>
> Acked-by: Pierre Morel <pmorel at linux.ibm.com>
> Signed-off-by: Heiko Carstens <hca at linux.ibm.com>
> (cherry picked from commit 0b2ca2c7d0c9e2731d01b6c862375d44a7e13923)
> Signed-off-by: Frank Heimes <frank.heimes at canonical.com>
Acked-by: Stefan Bader <stefan.bader at canonical.com>
> ---
>  arch/s390/pci/pci_event.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/arch/s390/pci/pci_event.c b/arch/s390/pci/pci_event.c
> index d9ae7456dd4c..40a569b548cc 100644
> --- a/arch/s390/pci/pci_event.c
> +++ b/arch/s390/pci/pci_event.c
> @@ -101,6 +101,10 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)
>  		if (ret)
>  			break;
>  
> +		/* the PCI function will be scanned once function 0 appears */
> +		if (!zdev->zbus->bus)
> +			break;
> +
>  		pdev = pci_scan_single_device(zdev->zbus->bus, zdev->devfn);
>  		if (!pdev)
>  			break;
> 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20201113/b3e78484/attachment.sig>


More information about the kernel-team mailing list