ACK/Cmnt: [SRU][F][PATCH 1/1] s390/pci: fix enabling a reserved PCI function

Stefan Bader stefan.bader at canonical.com
Tue Aug 25 07:39:32 UTC 2020


On 25.08.20 09:00, frank.heimes at canonical.com wrote:
> From: Niklas Schnelle <schnelle at linux.ibm.com>
> 
> BugLink: https://bugs.launchpad.net/bugs/1891437
> 
> In usual IPL or hot plug scenarios a zPCI function transitions directly
> from reserved (invisible to Linux) to configured state or is configured
> by Linux itself using an SCLP, however it can also first go from
> reserved to standby and then from standby to configured without
> Linux initiative.
> In this scenario we first get a PEC event 0x302 and then 0x301.  This may
> happen for example when the device is deconfigured at another LPAR and
> made available for this LPAR. It may also happen under z/VM when
> a device is attached while in some inconsistent state.
> 
> However when we get the 0x301 the device is already known to zPCI
> so calling zpci_create() will add it twice resulting in the below
> BUG. Instead we should only enable the existing device and finally
> scan it through the PCI subsystem.
> 
> list_add double add: new=00000000ed5a9008, prev=00000000ed5a9008, next=0000000083502300.
> kernel BUG at lib/list_debug.c:31!
> Krnl PSW : 0704c00180000000 0000000082dc2db8 (__list_add_valid+0x70/0xa8)
> Call Trace:
>  [<0000000082dc2db8>] __list_add_valid+0x70/0xa8
> ([<0000000082dc2db4>] __list_add_valid+0x6c/0xa8)
>  [<00000000828ea920>] zpci_create_device+0x60/0x1b0
>  [<00000000828ef04a>] zpci_event_availability+0x282/0x2f0
>  [<000000008315f848>] chsc_process_crw+0x2b8/0xa18
>  [<000000008316735c>] crw_collect_info+0x254/0x348
>  [<00000000829226ea>] kthread+0x14a/0x168
>  [<000000008319d5c0>] ret_from_fork+0x24/0x2c
> 
> Fixes: f606b3ef47c9 ("s390/pci: adapt events for zbus")
> Reported-by: Alexander Egorenkov <egorenar at linux.ibm.com>
> Tested-by: Alexander Egorenkov <egorenar at linux.ibm.com>
> Signed-off-by: Niklas Schnelle <schnelle at linux.ibm.com>
> Signed-off-by: Heiko Carstens <heiko.carstens at de.ibm.com>
> (cherry picked from commit 3047766bc6ec9c6bc9ece85b45a41ff401e8d988)
> Signed-off-by: Frank Heimes <frank.heimes at canonical.com>
Acked-by: Stefan Bader <stefan.bader at canonical.com>
> ---

Not sure you saw me commenting on the "regression potential" section of other
submissions. Recently there has been a discussion by the SRU team about this and
that most submitters use it not the way they expect. They would like to see more
of a guess about what kinds of symptoms people might observe. So kind of a
literal "what could go wrong?". Maybe you could adjust yours accordingly.

-Stefan

>  arch/s390/pci/pci_event.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/s390/pci/pci_event.c b/arch/s390/pci/pci_event.c
> index 08e1d619398e..fdebd286f402 100644
> --- a/arch/s390/pci/pci_event.c
> +++ b/arch/s390/pci/pci_event.c
> @@ -94,7 +94,18 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)
>  		}
>  		zdev->fh = ccdf->fh;
>  		zdev->state = ZPCI_FN_STATE_CONFIGURED;
> -		zpci_create_device(zdev);
> +		ret = zpci_enable_device(zdev);
> +		if (ret)
> +			break;
> +
> +		pdev = pci_scan_single_device(zdev->zbus->bus, zdev->devfn);
> +		if (!pdev)
> +			break;
> +
> +		pci_bus_add_device(pdev);
> +		pci_lock_rescan_remove();
> +		pci_bus_add_devices(zdev->zbus->bus);
> +		pci_unlock_rescan_remove();
>  		break;
>  	case 0x0302: /* Reserved -> Standby */
>  		if (!zdev) {
> 


-------------- 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/20200825/b3defc12/attachment.sig>


More information about the kernel-team mailing list