Thread (11 messages) 11 messages, 2 authors, 2016-04-07

Re: [PATCH 1/2] powerpc/eeh: Check for EEH availability in eeh_add_device_early()

From: Gavin Shan <hidden>
Date: 2016-02-04 05:28:35

On Wed, Feb 03, 2016 at 09:54:51AM -0200, Guilherme G. Piccoli wrote:
On 02/02/2016 08:44 PM, Gavin Shan wrote:
quoted
quoted
/**
+ * eeh_available - Checks for the availability of EEH based on running
+ * architecture.
+ *
+ * This routine should be used in case we need to check if EEH is
+ * available in some situation, regardless if EEH is enabled or not.
+ * For example, if we hotplug-add a PCI device on a machine with no
+ * other PCI device, EEH won't be enabled, yet it's available if the
+ * arch supports it.
+ */
+static inline bool eeh_available(void)
+{
+	if (machine_is(pseries) || machine_is(powernv))
+		return true;
+	return false;
+}
+
As I was told by somebody else before, the comments for static function
needn't to be exported.
Thanks for the advice Gavin, but I didn't get it. What means comments not
being exported? For sure I can change the comment if desired, but I can't see
any issue with it.
The comments in "/** ... */" can be exposed to readable document by makefile.
I think it's necessary to have it for a static function :-)
quoted
quoted
+/**
 * eeh_add_device_early - Enable EEH for the indicated device node
 * @pdn: PCI device node for which to set up EEH
 *
@@ -1072,7 +1089,7 @@ void eeh_add_device_early(struct pci_dn *pdn)
struct pci_controller *phb;
struct eeh_dev *edev = pdn_to_eeh_dev(pdn);

-	if (!edev || !eeh_enabled())
+	if (!edev || !eeh_available())
	return;

if (!eeh_has_flag(EEH_PROBE_MODE_DEVTREE))
The change here seems not correct enough. Before the changes, eeh_add_device_early()
does nothing if EEH is disabled on pSeries. With the changes applied, the EEH device
(edev) will be scanned even EEH is disabled on pSeries.

From the code changes, I didn't figure out the real problem you try to fix. Cell
platform doesn't have flag EEH_PROBE_MODE_DEVTREE. So the function does nothing
on Cell platform except calling into pdn_to_eeh_dev(). I'm not sure if the kernel
crashed in pdn_to_eeh_dev() on Cell platform?
Gavin, thanks for the comments. Seems your commit d91dafc02f4 ("powerpc/eeh:
Delay probing EEH device during hotplug") solved the problem with Cell arch.
Notice that Michael pointed the issue with Cell and fixed it by commit
89a51df5ab1d ("powerpc/eeh: Fix crash in eeh_add_device_early() on Cell").

But you commit is recent than Michael's and since it adds the check for
EEH_PROBE_MODE_DEVTREE, the Cell crash doesn't happen anymore. It's my bad, I
should have checked the dates of commits to figure your commit is recent than
Michael's one.

Anyway, the modification proposed by this patch is useless if we revert
Michael's commit then. Gavin and Michael, are you OK if I revert it?

The reason for the revert is that we can't check for eeh_enabled() here -
imagine the following scenario: we boot a machine with no PCI device, then,
we hotplug-add a PCI device. When we reach eeh_add_device_early(), the
function eeh_enabled() is false because at boot time we had no PCI devices so
EEH is not initialized/enabled.
Yeah, eeh_enabled() returns false and we don't have EEH_PROBE_MODE_DEVTREE on Cell
platform. That means those two checks are duplicated. I think eeh_enabled() check
can be removed if it really helps to avoid the crash.

Thanks,
Gavin
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help