From: Sam Bobroff <sbobroff@linux.ibm.com>
To: Frederic Barrat <fbarrat@linux.ibm.com>
Cc: clombard@linux.ibm.com, linuxppc-dev@lists.ozlabs.org,
andrew.donnellan@au1.ibm.com
Subject: Re: [PATCH] powernv/eeh: Fix oops when probing cxl devices
Date: Thu, 17 Oct 2019 13:58:42 +1100 [thread overview]
Message-ID: <20191017025841.GA18824@osmium> (raw)
In-Reply-To: <20191016162833.22509-1-fbarrat@linux.ibm.com>
[-- Attachment #1: Type: text/plain, Size: 3534 bytes --]
On Wed, Oct 16, 2019 at 06:28:33PM +0200, Frederic Barrat wrote:
> Recent cleanup in the way EEH support is added to a device causes a
> kernel oops when the cxl driver probes a device and creates virtual
> devices discovered on the FPGA:
>
> BUG: Kernel NULL pointer dereference at 0x000000a0
> Faulting instruction address: 0xc000000000048070
> Oops: Kernel access of bad area, sig: 7 [#1]
> ...
> NIP [c000000000048070] eeh_add_device_late.part.9+0x50/0x1e0
> LR [c00000000004805c] eeh_add_device_late.part.9+0x3c/0x1e0
> Call Trace:
> [c000200e43983900] [c00000000079e250] _dev_info+0x5c/0x6c (unreliable)
> [c000200e43983980] [c0000000000d1ad0] pnv_pcibios_bus_add_device+0x60/0xb0
> [c000200e439839f0] [c0000000000606d0] pcibios_bus_add_device+0x40/0x60
> [c000200e43983a10] [c0000000006aa3a0] pci_bus_add_device+0x30/0x100
> [c000200e43983a80] [c0000000006aa4d4] pci_bus_add_devices+0x64/0xd0
> [c000200e43983ac0] [c00800001c429118] cxl_pci_vphb_add+0xe0/0x130 [cxl]
> [c000200e43983b00] [c00800001c4242ac] cxl_probe+0x504/0x5b0 [cxl]
> [c000200e43983bb0] [c0000000006bba1c] local_pci_probe+0x6c/0x110
> [c000200e43983c30] [c000000000159278] work_for_cpu_fn+0x38/0x60
>
> The root cause is that those cxl virtual devices don't have a
> representation in the device tree and therefore no associated pci_dn
> structure. In eeh_add_device_late(), pdn is NULL, so edev is NULL and
> we oops.
>
> We never had explicit support for EEH for those virtual
> devices. Instead, EEH events are reported to the (real) pci device and
> handled by the cxl driver. Which can then forward to the virtual
> devices and handle dependencies. The fact that we try adding EEH
> support for the virtual devices is new and a side-effect of the recent
> cleanup.
>
> This patch fixes it by skipping adding EEH support on powernv for
> devices which don't have a pci_dn structure.
>
> The cxl driver doesn't create virtual devices on pseries so this patch
> doesn't fix it there intentionally.
>
> Fixes: b905f8cdca77 ("powerpc/eeh: EEH for pSeries hot plug")
> Signed-off-by: Frederic Barrat <fbarrat@linux.ibm.com>
> ---
>
> Sam: I'm resubmitting indentically as the RFC after all. I couldn't
> find a clean way to separate the non-capi virtual device case to print
> a warning and I'm a bit reluctant to make heavy changes for that.
>
> Support for cxl on pseries has been bit-rotting for a while and
> because of that, we don't create virtual devices there. So I didn't
> touch the pseries path. At least on pseries, if there's another
> unexpected case where the pdn is NULL, we should catch it more easily
> with the oops message.
OK. I agree that it's not worth doing more.
Reviewed-by: Sam Bobroff <sbobroff@linux.ibm.com>
> arch/powerpc/platforms/powernv/eeh-powernv.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c b/arch/powerpc/platforms/powernv/eeh-powernv.c
> index 6bc24a47e9ef..6f300ab7f0e9 100644
> --- a/arch/powerpc/platforms/powernv/eeh-powernv.c
> +++ b/arch/powerpc/platforms/powernv/eeh-powernv.c
> @@ -42,7 +42,7 @@ void pnv_pcibios_bus_add_device(struct pci_dev *pdev)
> {
> struct pci_dn *pdn = pci_get_pdn(pdev);
>
> - if (eeh_has_flag(EEH_FORCE_DISABLED))
> + if (!pdn || eeh_has_flag(EEH_FORCE_DISABLED))
> return;
>
> dev_dbg(&pdev->dev, "EEH: Setting up device\n");
> --
> 2.21.0
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next prev parent reply other threads:[~2019-10-17 3:00 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-16 16:28 [PATCH] powernv/eeh: Fix oops when probing cxl devices Frederic Barrat
2019-10-17 2:58 ` Sam Bobroff [this message]
2019-10-30 12:16 ` Michael Ellerman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191017025841.GA18824@osmium \
--to=sbobroff@linux.ibm.com \
--cc=andrew.donnellan@au1.ibm.com \
--cc=clombard@linux.ibm.com \
--cc=fbarrat@linux.ibm.com \
--cc=linuxppc-dev@lists.ozlabs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.