linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Gavin Shan <gwshan@linux.vnet.ibm.com>
To: Mike Qiu <qiudayu@linux.vnet.ibm.com>
Cc: weiyang@linux.vnet.ibm.com, linuxppc-dev@lists.ozlabs.org,
	gwshan@linux.vnet.ibm.com
Subject: Re: [PATCH] powerpc/eeh: sysfs entries lost
Date: Thu, 26 Jun 2014 17:15:24 +1000	[thread overview]
Message-ID: <20140626071524.GA6587@shangw> (raw)
In-Reply-To: <1403765927-8638-1-git-send-email-qiudayu@linux.vnet.ibm.com>

On Thu, Jun 26, 2014 at 02:58:47AM -0400, Mike Qiu wrote:
>The sysfs entries are lost because of commit 2213fb1 ("powerpc/eeh:
>Skip eeh sysfs when eeh is disabled"). That commit added condition
>to create sysfs entries with EEH_ENABLED, which isn't populated
>when trying to create sysfs entries on PowerNV platform during system
>boot time. The patch fixes the issue by:
>
>   * Reoder EEH initialization functions so that they're same on
>     PowerNV/pSeries.
>   * Cache PE's primary bus by PowerNV platform instead of EEH core
>     to avoid kernel crash caused by the function reorder. Another
>     benefit with this is to avoid one eeh_probe_mode_dev() in EEH
>     core.
>
>Signed-off-by: Mike Qiu <qiudayu@linux.vnet.ibm.com>

Acked-by: Gavin Shan <gwshan@linux.vnet.ibm.com>

Thanks,
Gavin

>---
> arch/powerpc/kernel/eeh_pe.c                 | 11 -----------
> arch/powerpc/platforms/powernv/eeh-powernv.c | 17 ++++++++++++++++-
> arch/powerpc/platforms/powernv/pci-ioda.c    |  2 +-
> 3 files changed, 17 insertions(+), 13 deletions(-)
>
>diff --git a/arch/powerpc/kernel/eeh_pe.c b/arch/powerpc/kernel/eeh_pe.c
>index fbd01eb..1dce071a 100644
>--- a/arch/powerpc/kernel/eeh_pe.c
>+++ b/arch/powerpc/kernel/eeh_pe.c
>@@ -351,17 +351,6 @@ int eeh_add_to_parent_pe(struct eeh_dev *edev)
> 	pe->config_addr	= edev->config_addr;
>
> 	/*
>-	 * While doing PE reset, we probably hot-reset the
>-	 * upstream bridge. However, the PCI devices including
>-	 * the associated EEH devices might be removed when EEH
>-	 * core is doing recovery. So that won't safe to retrieve
>-	 * the bridge through downstream EEH device. We have to
>-	 * trace the parent PCI bus, then the upstream bridge.
>-	 */
>-	if (eeh_probe_mode_dev())
>-		pe->bus = eeh_dev_to_pci_dev(edev)->bus;
>-
>-	/*
> 	 * Put the new EEH PE into hierarchy tree. If the parent
> 	 * can't be found, the newly created PE will be attached
> 	 * to PHB directly. Otherwise, we have to associate the
>diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c b/arch/powerpc/platforms/powernv/eeh-powernv.c
>index 56a206f..48eb223 100644
>--- a/arch/powerpc/platforms/powernv/eeh-powernv.c
>+++ b/arch/powerpc/platforms/powernv/eeh-powernv.c
>@@ -107,6 +107,7 @@ static int powernv_eeh_dev_probe(struct pci_dev *dev, void *flag)
> 	struct pnv_phb *phb = hose->private_data;
> 	struct device_node *dn = pci_device_to_OF_node(dev);
> 	struct eeh_dev *edev = of_node_to_eeh_dev(dn);
>+	int ret;
>
> 	/*
> 	 * When probing the root bridge, which doesn't have any
>@@ -143,7 +144,21 @@ static int powernv_eeh_dev_probe(struct pci_dev *dev, void *flag)
> 	edev->pe_config_addr	= phb->bdfn_to_pe(phb, dev->bus, dev->devfn & 0xff);
>
> 	/* Create PE */
>-	eeh_add_to_parent_pe(edev);
>+	ret = eeh_add_to_parent_pe(edev);
>+	if (ret) {
>+		pr_warn("%s: Can't add PCI dev %s to parent PE (%d)\n",
>+			__func__, pci_name(dev), ret);
>+		return ret;
>+	}
>+
>+	/*
>+	 * Cache the PE primary bus, which can't be fetched when
>+	 * full hotplug is in progress. In that case, all child
>+	 * PCI devices of the PE are expected to be removed prior
>+	 * to PE reset.
>+	 */
>+	if (!edev->pe->bus)
>+		edev->pe->bus = dev->bus;
>
> 	/*
> 	 * Enable EEH explicitly so that we will do EEH check
>diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
>index de19ede..81f2d3a 100644
>--- a/arch/powerpc/platforms/powernv/pci-ioda.c
>+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
>@@ -1142,8 +1142,8 @@ static void pnv_pci_ioda_fixup(void)
>
> #ifdef CONFIG_EEH
> 	eeh_probe_mode_set(EEH_PROBE_MODE_DEV);
>-	eeh_addr_cache_build();
> 	eeh_init();
>+	eeh_addr_cache_build();
> #endif
> }
>
>-- 
>1.8.1.4
>

      reply	other threads:[~2014-06-26  7:15 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-26  6:58 [PATCH] powerpc/eeh: sysfs entries lost Mike Qiu
2014-06-26  7:15 ` Gavin Shan [this message]

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=20140626071524.GA6587@shangw \
    --to=gwshan@linux.vnet.ibm.com \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=qiudayu@linux.vnet.ibm.com \
    --cc=weiyang@linux.vnet.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;
as well as URLs for NNTP newsgroup(s).