From: Harsh Prateek Bora <harshpb@linux.ibm.com>
To: Shivaprasad G Bhat <sbhat@linux.ibm.com>,
maddy@linux.ibm.com, linuxppc-dev@lists.ozlabs.org
Cc: mpe@ellerman.id.au, npiggin@gmail.com, chleroy@kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] powerpc/rtas_pci: No hotplug on permanently removed device on pSeries
Date: Tue, 12 May 2026 22:47:46 +0530 [thread overview]
Message-ID: <b7b05e38-675a-4304-a266-91b10ab74e50@linux.ibm.com> (raw)
In-Reply-To: <177725851139.12391.5948009745181492600.stgit@linux.ibm.com>
On 27/04/26 8:25 am, Shivaprasad G Bhat wrote:
> The eeh_driver disables and offlines the PE permanently when it
> exceeds the freeze count beyond eeh_max_freeze within the last hour.
> The PE is only offline, so the device tree entries, eeh device
> references are all intact till the real unplug of the device from
> the guest/host takes place.
>
> On pSeries, with a new hotplug of any PCI device, the drmgr initiates
> a system-wide PCI rescan, which finds devices offlined by the eeh_driver
> and there will be attempts to bring them online. This leads to
> recurring EEHs either at the config read time itself or a bit
> later depending on the type of the problem.
>
> For PowerNV, the commit d2b0f6f77ee5 ("powerpc/eeh: No hotplug on
> permanently removed dev") introduced the EEH_DEV_REMOVED flag to
> prevent such inadvertent rescans on hierarchical toplogies relavent in
> Baremetal setups. For pSeries, such topologies don't really make sense
> as the devices are either part of the same PE OR exposed as independent
> devices on multiple virtual PHBs. However, the inadvertent rescans are
> still a possibility with either hotplug of a new device or otherwise
> with manual system-wide pci bus rescan attempts.
>
> So the patch checks for EEH_DEV_REMOVED before allowing config space
> access just like PowerNV, making the PCI core omit the PE, and thus
> preventing subsequent EEH recurances. The patch is tested on PowerVM
> and KVM machines with single and multi-function devices, and on the
> devices behind a switch. The unplug of the affected devices post EEH
> removal is also working fine as expected.
>
> Signed-off-by: Shivaprasad G Bhat <sbhat@linux.ibm.com>
> References: d2b0f6f77ee5 ("powerpc/eeh: No hotplug on permanently removed dev")
> ---
> arch/powerpc/kernel/rtas_pci.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/arch/powerpc/kernel/rtas_pci.c b/arch/powerpc/kernel/rtas_pci.c
> index fccf96e897f6..ce24b18712ca 100644
> --- a/arch/powerpc/kernel/rtas_pci.c
> +++ b/arch/powerpc/kernel/rtas_pci.c
> @@ -57,6 +57,9 @@ int rtas_pci_dn_read_config(struct pci_dn *pdn, int where, int size, u32 *val)
> if (pdn->edev && pdn->edev->pe &&
> (pdn->edev->pe->state & EEH_PE_CFG_BLOCKED))
> return PCIBIOS_SET_FAILED;
> +
> + if (pdn->edev && pdn->edev->mode & EEH_DEV_REMOVED)
Consider using paranthesis for (pdn->edev->mode & EEH_DEV_REMOVED) and
moving to next line for readability (similar to prev one).
> + return PCIBIOS_SET_FAILED;
Why not return PCIBIOS_DEVICE_NOT_FOUND ? Returning SET_FAILED for a
removed device could be misleading.
Above comments applies to below changes also.
> #endif
>
> addr = rtas_config_addr(pdn->busno, pdn->devfn, where);
> @@ -108,6 +111,9 @@ int rtas_pci_dn_write_config(struct pci_dn *pdn, int where, int size, u32 val)
> if (pdn->edev && pdn->edev->pe &&
> (pdn->edev->pe->state & EEH_PE_CFG_BLOCKED))
> return PCIBIOS_SET_FAILED;
> +
> + if (pdn->edev && pdn->edev->mode & EEH_DEV_REMOVED)
> + return PCIBIOS_SET_FAILED;
> #endif
>
> addr = rtas_config_addr(pdn->busno, pdn->devfn, where);
>
>
>
next parent reply other threads:[~2026-05-12 17:18 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <177725851139.12391.5948009745181492600.stgit@linux.ibm.com>
2026-05-12 17:17 ` Harsh Prateek Bora [this message]
2026-05-12 17:44 ` [PATCH] powerpc/rtas_pci: No hotplug on permanently removed device on pSeries Harsh Prateek Bora
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=b7b05e38-675a-4304-a266-91b10ab74e50@linux.ibm.com \
--to=harshpb@linux.ibm.com \
--cc=chleroy@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=maddy@linux.ibm.com \
--cc=mpe@ellerman.id.au \
--cc=npiggin@gmail.com \
--cc=sbhat@linux.ibm.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox