From: Linas Vepstas <linas@linas.org>
To: paulus@samba.org, linuxppc64-dev@ozlabs.org
Cc: johnrose@austin.ibm.com, linux-pci@atrey.karlin.mff.cuni.cz,
bluesmoke-devel@lists.sourceforge.net,
linux-kernel@vger.kernel.org
Subject: [PATCH 17/42]: ppc64: mark failed devices
Date: Thu, 3 Nov 2005 18:50:48 -0600 [thread overview]
Message-ID: <20051104005048.GA26970@mail.gnucash.org> (raw)
In-Reply-To: <20051103235918.GA25616@mail.gnucash.org>
17-eeh-slot-marking-bug.patch
A device that experiences a PCI outage may be just one deivce out
of many that was affected. In order to avoid repeated reports of
a failure, the entire tree of affected devices should be marked
as failed. This patch marks up the entire tree.
Signed-off-by: Linas Vepstas <linas@linas.org>
Index: linux-2.6.14-git3/arch/powerpc/platforms/pseries/eeh.c
===================================================================
--- linux-2.6.14-git3.orig/arch/powerpc/platforms/pseries/eeh.c 2005-11-02 14:34:19.926132452 -0600
+++ linux-2.6.14-git3/arch/powerpc/platforms/pseries/eeh.c 2005-11-02 14:35:39.290005477 -0600
@@ -479,32 +479,47 @@
* an interrupt context, which is bad.
*/
-static inline void __eeh_mark_slot (struct device_node *dn)
+static inline void __eeh_mark_slot (struct device_node *dn, int mode_flag)
{
while (dn) {
- PCI_DN(dn)->eeh_mode |= EEH_MODE_ISOLATED;
+ if (PCI_DN(dn)) {
+ PCI_DN(dn)->eeh_mode |= mode_flag;
- if (dn->child)
- __eeh_mark_slot (dn->child);
+ if (dn->child)
+ __eeh_mark_slot (dn->child, mode_flag);
+ }
dn = dn->sibling;
}
}
-static inline void __eeh_clear_slot (struct device_node *dn)
+void eeh_mark_slot (struct device_node *dn, int mode_flag)
+{
+ dn = find_device_pe (dn);
+ PCI_DN(dn)->eeh_mode |= mode_flag;
+ __eeh_mark_slot (dn->child, mode_flag);
+}
+
+static inline void __eeh_clear_slot (struct device_node *dn, int mode_flag)
{
while (dn) {
- PCI_DN(dn)->eeh_mode &= ~EEH_MODE_ISOLATED;
- if (dn->child)
- __eeh_clear_slot (dn->child);
+ if (PCI_DN(dn)) {
+ PCI_DN(dn)->eeh_mode &= ~mode_flag;
+ PCI_DN(dn)->eeh_check_count = 0;
+ if (dn->child)
+ __eeh_clear_slot (dn->child, mode_flag);
+ }
dn = dn->sibling;
}
}
-static inline void eeh_clear_slot (struct device_node *dn)
+void eeh_clear_slot (struct device_node *dn, int mode_flag)
{
unsigned long flags;
spin_lock_irqsave(&confirm_error_lock, flags);
- __eeh_clear_slot (dn);
+ dn = find_device_pe (dn);
+ PCI_DN(dn)->eeh_mode &= ~mode_flag;
+ PCI_DN(dn)->eeh_check_count = 0;
+ __eeh_clear_slot (dn->child, mode_flag);
spin_unlock_irqrestore(&confirm_error_lock, flags);
}
@@ -529,7 +544,6 @@
int rets[3];
unsigned long flags;
struct pci_dn *pdn;
- struct device_node *pe_dn;
int rc = 0;
__get_cpu_var(total_mmio_ffs)++;
@@ -631,8 +645,7 @@
/* Avoid repeated reports of this failure, including problems
* with other functions on this device, and functions under
* bridges. */
- pe_dn = find_device_pe (dn);
- __eeh_mark_slot (pe_dn);
+ eeh_mark_slot (dn, EEH_MODE_ISOLATED);
spin_unlock_irqrestore(&confirm_error_lock, flags);
eeh_send_failure_event (dn, dev, rets[0], rets[2]);
@@ -744,9 +757,6 @@
rc, state, pdn->node->full_name);
return;
}
-
- if (state == 0)
- eeh_clear_slot (pdn->node->parent->child);
}
/** rtas_set_slot_reset -- assert the pci #RST line for 1/4 second
@@ -765,6 +775,12 @@
#define PCI_BUS_RST_HOLD_TIME_MSEC 250
msleep (PCI_BUS_RST_HOLD_TIME_MSEC);
+
+ /* We might get hit with another EEH freeze as soon as the
+ * pci slot reset line is dropped. Make sure we don't miss
+ * these, and clear the flag now. */
+ eeh_clear_slot (pdn->node, EEH_MODE_ISOLATED);
+
rtas_pci_slot_reset (pdn, 0);
/* After a PCI slot has been reset, the PCI Express spec requires
Index: linux-2.6.14-git3/include/asm-powerpc/ppc-pci.h
===================================================================
--- linux-2.6.14-git3.orig/include/asm-powerpc/ppc-pci.h 2005-11-02 14:34:19.931131751 -0600
+++ linux-2.6.14-git3/include/asm-powerpc/ppc-pci.h 2005-11-02 14:35:39.295004776 -0600
@@ -86,6 +86,13 @@
int rtas_write_config(struct pci_dn *, int where, int size, u32 val);
+/**
+ * mark and clear slots: find "partition endpoint" PE and set or
+ * clear the flags for each subnode of the PE.
+ */
+void eeh_mark_slot (struct device_node *dn, int mode_flag);
+void eeh_clear_slot (struct device_node *dn, int mode_flag);
+
#endif
#endif /* _ASM_POWERPC_PPC_PCI_H */
next prev parent reply other threads:[~2005-11-04 0:51 UTC|newest]
Thread overview: 131+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-11-03 23:59 [PATCH 0/42] PCI Error Recovery for PPC64 and misc device drivers Linas Vepstas
2005-11-04 0:42 ` [PATCH 1/42] ppc64: uniform usage of bus unit id interfaces linas
2005-11-04 0:47 ` [PATCH 2/42]: ppc64: misc minor cleanup Linas Vepstas
2005-11-04 0:48 ` [PATCH 3/42]: ppc64: PCI address cache minor fixes Linas Vepstas
2005-11-04 0:48 ` [PATCH 4/42]: ppc64: PCI error rate statistics Linas Vepstas
2005-11-04 0:49 ` [PATCH 5/42]: ppc64: RTAS error reporting restructuring Linas Vepstas
2005-11-04 0:49 ` [PATCH 6/42]: ppc64: avoid PCI error reporting for empty slots Linas Vepstas
2005-11-04 0:49 ` [PATCH 7/42]: ppc64: serialize reports of PCI errors Linas Vepstas
2005-11-04 0:49 ` [PATCH 8/42]: ppc64: escape hatch for spinning interrupt deadlocks Linas Vepstas
2005-11-04 0:49 ` [PATCH 9/42]: ppc64: bugfix: crash on PCI hotplug Linas Vepstas
2005-11-04 0:49 ` [PATCH 10/42]: ppc64: bugfix: don't silently gnore PCI errors Linas Vepstas
2005-11-04 0:49 ` [PATCH 11/42]: ppc64: move code to powerpc directory from ppc64 Linas Vepstas
2005-11-04 0:50 ` [PATCH 12/42]: ppc64: PCI error event dispatcher Linas Vepstas
2005-11-04 0:50 ` [PATCH 13/42]: ppc64: PCI reset support routines Linas Vepstas
2005-11-04 0:50 ` [PATCH 14/42]: ppc64: Save & restore of PCI device BARS Linas Vepstas
2005-11-04 0:50 ` [PATCH 15/42]: Documentation: PCI Error Recovery Linas Vepstas
2005-11-04 0:50 ` [PATCH 16/42]: PCI: PCI Error reporting callbacks Linas Vepstas
2005-11-05 6:11 ` Greg KH
2005-11-06 23:25 ` Paul Mackerras
2005-11-07 17:55 ` linas
2005-11-07 18:27 ` Greg KH
2005-11-07 18:56 ` typedefs and structs [was Re: [PATCH 16/42]: PCI: PCI Error reporting callbacks] linas
2005-11-07 19:02 ` Greg KH
2005-11-07 19:36 ` linas
2005-11-07 20:02 ` Greg KH
2005-11-07 20:41 ` linas
2005-11-07 20:46 ` Greg KH
2005-11-08 1:11 ` Steven Rostedt
2005-11-08 1:18 ` Neil Brown
2005-11-08 23:36 ` typedefs and structs linas
2005-12-16 13:09 ` typedefs and structs [was Re: [PATCH 16/42]: PCI: PCI Error reporting callbacks] Denis Vlasenko
2005-12-16 13:22 ` Matthew Wilcox
2005-11-08 23:23 ` typedefs and structs linas
2005-11-08 23:33 ` Steven Rostedt
2005-11-09 9:22 ` Bernd Petrovitsch
2005-11-08 23:57 ` Kyle Moffett
2005-11-09 0:30 ` linas
2005-11-09 0:37 ` Douglas McNaught
2005-11-09 0:48 ` linas
2005-11-09 0:59 ` Douglas McNaught
2005-11-09 2:14 ` Dmitry Torokhov
2005-11-09 1:51 ` Kyle Moffett
2005-11-09 10:16 ` J.A. Magallon
2005-11-09 16:22 ` Vadim Lobanov
2005-11-09 19:20 ` linas
2005-11-09 19:36 ` thockin
2005-11-09 19:38 ` linas
2005-11-09 20:39 ` thockin
2005-11-09 21:53 ` Andreas Schwab
2005-11-09 22:00 ` Bernd Petrovitsch
2005-11-09 20:55 ` Matthew Wilcox
2005-11-09 20:26 ` linux-os (Dick Johnson)
2005-11-09 22:12 ` Vadim Lobanov
2005-11-09 22:37 ` linux-os (Dick Johnson)
2005-11-09 22:47 ` Vadim Lobanov
2005-11-09 22:54 ` typedefs and structs - trim request doug thompson
2005-11-09 23:29 ` typedefs and structs Andreas Schwab
2005-11-09 23:40 ` Vadim Lobanov
2005-11-10 3:39 ` Steven Rostedt
2005-11-10 3:49 ` Vadim Lobanov
2005-11-10 8:15 ` J.A. Magallon
2005-11-10 13:27 ` Nikita Danilov
2005-11-10 14:18 ` linux-os (Dick Johnson)
2005-11-10 19:21 ` Kyle Moffett
2005-11-10 19:28 ` Vadim Lobanov
2005-11-10 20:53 ` J.A. Magallon
2005-11-09 23:29 ` linas
2005-11-09 21:43 ` Vadim Lobanov
2005-11-10 0:27 ` linas
2005-11-08 23:57 ` David Gibson
2005-11-09 0:13 ` Zan Lynx
2005-11-09 0:42 ` linas
2005-11-09 9:25 ` Bernd Petrovitsch
2005-11-07 19:04 ` typedefs and structs [was Re: [PATCH 16/42]: PCI: PCI Error reporting callbacks] Randy.Dunlap
2005-11-07 19:57 ` [PATCH 1/7]: PCI revised [PATCH 16/42]: PCI: PCI Error reporting callbacks linas
2005-11-07 19:59 ` Christoph Hellwig
2005-11-07 20:03 ` Greg KH
2005-11-07 21:21 ` [PATCH 1/7]: PCI revised (2) " linas
2005-11-07 21:37 ` Greg KH
2005-11-07 21:54 ` Linus Torvalds
2005-11-07 22:54 ` Greg KH
2005-11-07 22:43 ` [PATCH 1/7]: PCI revised (3) " linas
2005-11-07 22:53 ` Greg KH
2005-11-07 23:19 ` linas
2005-11-08 2:43 ` Greg KH
2005-11-07 21:30 ` [PATCH 2/7]: Revised [PATCH 27/42]: SCSI: add PCI error recovery to IPR dev driver linas
2005-11-07 21:40 ` Brian King
2005-11-07 22:03 ` linas
2005-11-07 21:31 ` [PATCH 3/7]: Revised [PATCH 28/42]: SCSI: add PCI error recovery to Symbios " linas
2005-11-07 21:34 ` [PATCH 4/7]: Revised [PATCH 29/42]: ethernet: add PCI error recovery to e100 " linas
2005-11-07 21:36 ` [PATCH: 5/7]: Revised: [PATCH 30/42]: ethernet: add PCI error recovery to e1000 " linas
2005-11-07 21:37 ` [PATCH 6/7]: Revised [PATCH 31/42]: ethernet: add PCI error recovery to ixgb " linas
2005-11-07 21:39 ` [PATCH 7/7]: Revised [PATCH 32/42]: RFC: Add compile-time config options linas
2005-11-04 0:50 ` Linas Vepstas [this message]
2005-11-04 0:51 ` [PATCH 18/42]: ppc64: bugfix: crash on dlpar slot add, remove Linas Vepstas
2005-11-04 0:51 ` [PATCH 19/42]: ppc64: bugfix: crash on PHB add Linas Vepstas
2005-11-04 16:20 ` John Rose
2005-11-04 16:35 ` linas
2005-11-04 0:51 ` [PATCH 20/42]: ppc64: PCI hotplug common code elimination Linas Vepstas
2005-11-04 0:51 ` [PATCH 21/42]: PCI: cleanup/simplify ppc64 PCI hotplug code Linas Vepstas
2005-11-04 0:52 ` [PATCH 22/42]: PCI: remove duplicted pci " Linas Vepstas
2005-11-04 21:54 ` John Rose
2005-11-04 0:52 ` [PATCH 23/42]: ppc64: migrate common PCI " Linas Vepstas
2005-11-04 0:52 ` [PATCH 24/42]: ppc64: PCI Error Recovery: PPC64 core recovery routines Linas Vepstas
2005-11-04 0:53 ` [PATCH 25/42]: ppc64: Split out PCI address cache to its own file Linas Vepstas
2005-11-04 0:53 ` [PATCH 26/42]: ppc64: Add "partion endpoint" support Linas Vepstas
2005-11-04 0:53 ` [PATCH 27/42]: SCSI: add PCI error recovery to IPR dev driver Linas Vepstas
2005-11-04 0:53 ` [PATCH 28/42]: SCSI: add PCI error recovery to Symbios " Linas Vepstas
2005-11-04 0:53 ` [PATCH 29/42]: ethernet: add PCI error recovery to e100 " Linas Vepstas
2005-11-04 1:34 ` Jesse Brandeburg
2005-11-04 1:51 ` Jesse Brandeburg
2005-11-04 0:54 ` [PATCH 30/42]: ethernet: add PCI error recovery to e1000 " Linas Vepstas
2005-11-04 0:54 ` [PATCH 31/42]: ethernet: add PCI error recovery to ixgb " Linas Vepstas
2005-11-04 0:54 ` [PATCH 32/42]: RFC: Add compile-time config options Linas Vepstas
2005-11-04 0:54 ` [PATCH 33/42]: ppc64: remove bogus printk Linas Vepstas
2005-11-04 0:54 ` [PATCH 34/42]: ppc64: Remove duplicate code Linas Vepstas
2005-11-04 0:54 ` [PATCH 35/42]: ppc64: bugfix: fill in un-initialzed field Linas Vepstas
2005-11-04 0:54 ` [PATCH 36/42]: ppc64: Use PE configuration address consistently Linas Vepstas
2005-11-04 0:54 ` [PATCH 37/42]: ppc64: set up the RTAS token just like the rest of them Linas Vepstas
2005-11-04 0:54 ` [PATCH 38/42]: ppc64: Don't continue with PCI Error recovery if slot reset failed Linas Vepstas
2005-11-04 0:55 ` [PATCH 39/42]: ppc64: handle multifunction PCI devices properly Linas Vepstas
2005-11-04 0:55 ` [PATCH 40/42]: ppc64: IOMMU: don't ioremap null pointers Linas Vepstas
2005-11-04 0:55 ` [PATCH 41/42]: ppc64: Save device BARS much earlier in the boot sequence Linas Vepstas
2005-11-04 22:14 ` linas
2005-11-04 0:55 ` [PATCH 42/42]: ppc64: get rid of per_cpu counters Linas Vepstas
2005-11-04 0:57 ` [PATCH 11/42]: ppc64: move code to powerpc directory from ppc64 Linas Vepstas
2005-11-04 22:14 ` [PATCH 0/42] PCI Error Recovery for PPC64 and misc device drivers Greg KH
2005-11-05 0:08 ` Paul Mackerras
2005-11-05 0:28 ` Greg KH
2005-11-05 0:46 ` Paul Mackerras
2005-11-05 1:28 ` Greg KH
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=20051104005048.GA26970@mail.gnucash.org \
--to=linas@linas.org \
--cc=bluesmoke-devel@lists.sourceforge.net \
--cc=johnrose@austin.ibm.com \
--cc=linas@austin.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@atrey.karlin.mff.cuni.cz \
--cc=linuxppc64-dev@ozlabs.org \
--cc=paulus@samba.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
Powered by JetHome