From: Gavin Shan <shangw@linux.vnet.ibm.com>
To: linuxppc-dev@lists.ozlabs.org
Cc: Gavin Shan <shangw@linux.vnet.ibm.com>
Subject: [PATCH 22/27] powerpc/eeh: Allow to check fenced PHB proactively
Date: Wed, 5 Jun 2013 15:34:23 +0800 [thread overview]
Message-ID: <1370417668-16832-23-git-send-email-shangw@linux.vnet.ibm.com> (raw)
In-Reply-To: <1370417668-16832-1-git-send-email-shangw@linux.vnet.ibm.com>
It's meaningless to handle frozen PE if we already had fenced PHB.
The patch intends to check the PHB state before checking PE. If the
PHB has been put into fenced state, we need take care of that firstly.
Signed-off-by: Gavin Shan <shangw@linux.vnet.ibm.com>
---
arch/powerpc/platforms/pseries/eeh.c | 61 ++++++++++++++++++++++++++++++++++
1 files changed, 61 insertions(+), 0 deletions(-)
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c
index a42b410..1daff1e 100644
--- a/arch/powerpc/platforms/pseries/eeh.c
+++ b/arch/powerpc/platforms/pseries/eeh.c
@@ -269,6 +269,59 @@ static inline unsigned long eeh_token_to_phys(unsigned long token)
return pa | (token & (PAGE_SIZE-1));
}
+/*
+ * On PowerNV platform, we might already have fenced PHB there.
+ * For that case, it's meaningless to recover frozen PE. Intead,
+ * We have to handle fenced PHB firstly.
+ */
+static int eeh_phb_check_failure(struct eeh_pe *pe, int flag)
+{
+ struct eeh_pe *phb_pe;
+ unsigned long flags;
+ int ret;
+
+ if (!eeh_probe_mode_dev())
+ return -EPERM;
+
+ /* Find the PHB PE */
+ raw_spin_lock_irqsave(&confirm_error_lock, flags);
+ phb_pe = eeh_phb_pe_get(pe->phb);
+ if (!phb_pe) {
+ pr_warning("%s Can't find PE for PHB#%d\n",
+ __func__, pe->phb->global_number);
+ ret = -EEXIST;
+ goto out;
+ }
+
+ /* If the PHB has been in problematic state */
+ if (phb_pe->state & EEH_PE_ISOLATED) {
+ ret = 2;
+ goto out;
+ }
+
+ /* Check PHB state */
+ ret = eeh_ops->get_state(phb_pe, NULL);
+ if ((ret < 0) ||
+ (ret == EEH_STATE_NOT_SUPPORT) ||
+ (ret & (EEH_STATE_MMIO_ACTIVE | EEH_STATE_DMA_ACTIVE)) ==
+ (EEH_STATE_MMIO_ACTIVE | EEH_STATE_DMA_ACTIVE)) {
+ ret = 0;
+ goto out;
+ }
+
+ /* Isolate the PHB and send event */
+ eeh_pe_state_mark(phb_pe, EEH_PE_ISOLATED);
+ raw_spin_unlock_irqrestore(&confirm_error_lock, flags);
+ eeh_send_failure_event(phb_pe, flag);
+
+ WARN(1, "EEH: PHB failure detected\n");
+
+ return 1;
+out:
+ raw_spin_unlock_irqrestore(&confirm_error_lock, flags);
+ return ret;
+}
+
/**
* eeh_dev_check_failure - Check if all 1's data is due to EEH slot freeze
* @edev: eeh device
@@ -320,6 +373,14 @@ int eeh_dev_check_failure(struct eeh_dev *edev, int flag)
return 0;
}
+ /*
+ * On PowerNV platform, we might already have fenced PHB
+ * there and we need take care of that firstly.
+ */
+ ret = eeh_phb_check_failure(pe, flag);
+ if (ret > 0)
+ return ret;
+
/* If we already have a pending isolation event for this
* slot, we know it's bad already, we don't need to check.
* Do this checking under a lock; as multiple PCI devices
--
1.7.5.4
next prev parent reply other threads:[~2013-06-05 7:34 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-05 7:34 [PATCH v3 00/27] EEH Support for PowerNV platform Gavin Shan
2013-06-05 7:34 ` [PATCH 01/27] powerpc/eeh: Fix fetching bus for single-dev-PE Gavin Shan
2013-06-05 7:34 ` [PATCH 02/27] powerpc/eeh: Enhance converting EEH dev Gavin Shan
2013-06-05 7:34 ` [PATCH 03/27] powerpc/eeh: Make eeh_phb_pe_get() public Gavin Shan
2013-06-05 7:34 ` [PATCH 04/27] powerpc/eeh: Make eeh_pe_get() public Gavin Shan
2013-06-05 7:34 ` [PATCH 05/27] powerpc/eeh: Trace PCI bus from PE Gavin Shan
2013-06-05 7:34 ` [PATCH 06/27] powerpc/eeh: Make eeh_init() public Gavin Shan
2013-06-05 7:34 ` [PATCH 07/27] powerpc/eeh: EEH post initialization operation Gavin Shan
2013-06-05 7:34 ` [PATCH 08/27] powerpc/eeh: Refactor eeh_reset_pe_once() Gavin Shan
2013-06-05 7:34 ` [PATCH 09/27] powerpc/eeh: Delay EEH probe during hotplug Gavin Shan
2013-06-05 7:34 ` [PATCH 10/27] powerpc/eeh: Differentiate EEH events Gavin Shan
2013-06-05 7:34 ` [PATCH 11/27] powerpc/eeh: Sync OPAL API with firmware Gavin Shan
2013-06-05 7:34 ` [PATCH 12/27] powerpc/eeh: EEH backend for P7IOC Gavin Shan
2013-06-05 7:34 ` [PATCH 13/27] powerpc/eeh: I/O chip post initialization Gavin Shan
2013-06-05 7:34 ` [PATCH 14/27] powerpc/eeh: I/O chip EEH enable option Gavin Shan
2013-06-05 7:34 ` [PATCH 15/27] powerpc/eeh: I/O chip EEH state retrieval Gavin Shan
2013-06-11 7:37 ` Benjamin Herrenschmidt
2013-06-12 3:32 ` Gavin Shan
2013-06-12 4:19 ` Benjamin Herrenschmidt
2013-06-13 4:26 ` Gavin Shan
2013-06-13 4:42 ` Benjamin Herrenschmidt
2013-06-13 5:50 ` Gavin Shan
2013-06-05 7:34 ` [PATCH 16/27] powerpc/eeh: I/O chip PE reset Gavin Shan
2013-06-05 7:34 ` [PATCH 17/27] powerpc/eeh: I/O chip PE log and bridge setup Gavin Shan
2013-06-11 7:37 ` Benjamin Herrenschmidt
2013-06-12 3:33 ` Gavin Shan
2013-06-05 7:34 ` [PATCH 18/27] powerpc/eeh: PowerNV EEH backends Gavin Shan
2013-06-05 7:34 ` [PATCH 19/27] powerpc/eeh: Initialization for PowerNV Gavin Shan
2013-06-05 7:34 ` [PATCH 20/27] powerpc/eeh: Enable EEH check for config access Gavin Shan
2013-06-05 7:34 ` [PATCH 21/27] powerpc/eeh: Process interrupts caused by EEH Gavin Shan
2013-06-11 8:13 ` Benjamin Herrenschmidt
2013-06-13 4:14 ` Gavin Shan
2013-06-05 7:34 ` Gavin Shan [this message]
2013-06-05 7:34 ` [PATCH 23/27] powernv/opal: Notifier for OPAL events Gavin Shan
2013-06-12 0:32 ` Benjamin Herrenschmidt
2013-06-12 3:15 ` Gavin Shan
2013-06-05 7:34 ` [PATCH 24/27] powernv/opal: Disable OPAL notifier upon poweroff Gavin Shan
2013-06-05 7:34 ` [PATCH 25/27] powerpc/eeh: Register OPAL notifier for PCI error Gavin Shan
2013-06-05 7:34 ` [PATCH 26/27] powerpc/powernv: Debugfs directory for PHB Gavin Shan
2013-06-05 7:34 ` [PATCH 27/27] powerpc/eeh: Debugfs for error injection Gavin Shan
2013-06-11 7:46 ` [PATCH v3 00/27] EEH Support for PowerNV platform Benjamin Herrenschmidt
2013-06-12 3:18 ` Gavin Shan
-- strict thread matches above, loose matches on Subject: below --
2013-06-15 9:02 [PATCH v4 " Gavin Shan
2013-06-15 9:03 ` [PATCH 22/27] powerpc/eeh: Allow to check fenced PHB proactively Gavin Shan
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=1370417668-16832-23-git-send-email-shangw@linux.vnet.ibm.com \
--to=shangw@linux.vnet.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 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).