mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: alexander.levin@verizon.com
To: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"stable@vger.kernel.org" <stable@vger.kernel.org>
Cc: Gabriele Paoloni <gabriele.paoloni@huawei.com>,
	Dongdong Liu <liudongdong3@huawei.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	alexander.levin@verizon.com
Subject: [PATCH AUTOSEL for 3.18 34/40] PCI/AER: Report non-fatal errors only to the affected endpoint
Date: Wed, 13 Dec 2017 01:59:19 +0000	[thread overview]
Message-ID: <20171213015905.7059-34-alexander.levin@verizon.com> (raw)
In-Reply-To: <20171213015905.7059-1-alexander.levin@verizon.com>

From: Gabriele Paoloni <gabriele.paoloni@huawei.com>

[ Upstream commit 86acc790717fb60fb51ea3095084e331d8711c74 ]

Previously, if an non-fatal error was reported by an endpoint, we
called report_error_detected() for the endpoint, every sibling on the
bus, and their descendents.  If any of them did not implement the
.error_detected() method, do_recovery() failed, leaving all these
devices unrecovered.

For example, the system described in the bugzilla below has two devices:

  0000:74:02.0 [19e5:a230] SAS controller, driver has .error_detected()
  0000:74:03.0 [19e5:a235] SATA controller, driver lacks .error_detected()

When a device such as 74:02.0 reported a non-fatal error, do_recovery()
failed because 74:03.0 lacked an .error_detected() method.  But per PCIe
r3.1, sec 6.2.2.2.2, such an error does not compromise the Link and
does not affect 74:03.0:

  Non-fatal errors are uncorrectable errors which cause a particular
  transaction to be unreliable but the Link is otherwise fully functional.
  Isolating Non-fatal from Fatal errors provides Requester/Receiver logic
  in a device or system management software the opportunity to recover from
  the error without resetting the components on the Link and disturbing
  other transactions in progress.  Devices not associated with the
  transaction in error are not impacted by the error.

Report non-fatal errors only to the endpoint that reported them.  We really
want to check for AER_NONFATAL here, but the current code structure doesn't
allow that.  Looking for pci_channel_io_normal is the best we can do now.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=197055
Fixes: 6c2b374d7485 ("PCI-Express AER implemetation: AER core and aerdriver")
Signed-off-by: Gabriele Paoloni <gabriele.paoloni@huawei.com>
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
[bhelgaas: changelog]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>

Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/pci/pcie/aer/aerdrv_core.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/pci/pcie/aer/aerdrv_core.c b/drivers/pci/pcie/aer/aerdrv_core.c
index b60a325234c5..cca4b4789ac4 100644
--- a/drivers/pci/pcie/aer/aerdrv_core.c
+++ b/drivers/pci/pcie/aer/aerdrv_core.c
@@ -360,7 +360,14 @@ static pci_ers_result_t broadcast_error_message(struct pci_dev *dev,
 		 * If the error is reported by an end point, we think this
 		 * error is related to the upstream link of the end point.
 		 */
-		pci_walk_bus(dev->bus, cb, &result_data);
+		if (state == pci_channel_io_normal)
+			/*
+			 * the error is non fatal so the bus is ok, just invoke
+			 * the callback for the function that logged the error.
+			 */
+			cb(dev, &result_data);
+		else
+			pci_walk_bus(dev->bus, cb, &result_data);
 	}
 
 	return result_data.result;
-- 
2.11.0

  parent reply	other threads:[~2017-12-13  2:06 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-13  1:59 [PATCH AUTOSEL for 3.18 01/40] ALSA: hda - add support for docking station for HP 820 G2 alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 02/40] cpuidle: Validate cpu_dev in cpuidle_add_sysfs() alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 03/40] r8152: fix the list rx_done may be used without initialization alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 05/40] net: qmi_wwan: Add USB IDs for MDM6600 modem on Motorola Droid 4 alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 07/40] usb: gadget: udc: remove pointer dereference after free alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 04/40] crypto: deadlock between crypto_alg_sem/rtnl_mutex/genl_mutex alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 06/40] usb: gadget: f_uvc: Sanity check wMaxPacketSize for SuperSpeed alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 11/40] KVM: x86: correct async page present tracepoint alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 08/40] netfilter: nfnl_cthelper: fix runtime expectation policy updates alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 10/40] scsi: lpfc: Fix PT2PT PRLI reject alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 09/40] netfilter: nfnl_cthelper: Fix memory leak alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 12/40] ARM: dts: ti: fix PCI bus dtc warnings alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 13/40] hwmon: (asus_atk0110) fix uninitialized data access alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 14/40] i2c: mux: pca954x: Add missing pca9546 definition to chip_desc alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 15/40] HID: xinmo: fix for out of range for THT 2P arcade controller alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 19/40] irda: vlsi_ir: fix check for DMA mapping errors alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 16/40] s390/qeth: no ETH header for outbound AF_IUCV alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 17/40] net: Do not allow negative values for busy_read and busy_poll sysctl interfaces alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 18/40] i40e: Do not enable NAPI on q_vectors that have no rings alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 21/40] netfilter: nf_nat_snmp: Fix panic when snmp_trap_helper fails to register alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 23/40] isdn: kcapi: avoid uninitialized data alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 20/40] netfilter: nfnl_cthelper: fix a race when walk the nf_ct_helper_hash table alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 22/40] ARM: dts: am335x-evmsk: adjust mmc2 param to allow suspend alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 25/40] ARM: dma-mapping: disallow dma_get_sgtable() for non-kernel managed memory alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 26/40] cpuidle: powernv: Pass correct drv->cpumask for registration alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 27/40] backlight: pwm_bl: Fix overflow condition alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 24/40] xhci: plat: Register shutdown for xhci_plat alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 29/40] net: phy: at803x: Change error to EINVAL for invalid MAC alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 30/40] PCI: Avoid bus reset if bridge itself is broken alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 31/40] scsi: cxgb4i: fix Tx skb leak alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 28/40] crypto: crypto4xx - increase context and scatter ring buffer elements alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 32/40] PCI: Create SR-IOV virtfn/physfn links before attaching driver alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 35/40] percpu: don't forget to free the temporary struct pcpu_alloc_info alexander.levin
2017-12-13  1:59 ` alexander.levin [this message]
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 33/40] igb: check memory allocation failure alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 36/40] powerpc/xmon: Avoid tripping SMP hardlockup watchdog alexander.levin
2017-12-13 13:10   ` Michael Ellerman
2017-12-13 13:44     ` alexander.levin
2018-01-30  4:35       ` Michael Ellerman
2018-02-03  5:58         ` Nicholas Piggin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 39/40] fm10k: ensure we process SM mbx when processing VF mbx alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 38/40] scsi: lpfc: PLOGI failures during NPIV testing alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 37/40] scsi: lpfc: Fix secure firmware updates alexander.levin
2017-12-13  1:59 ` [PATCH AUTOSEL for 3.18 40/40] tcp: fix under-evaluated ssthresh in TCP Vegas alexander.levin
2017-12-21  9:54   ` 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=20171213015905.7059-34-alexander.levin@verizon.com \
    --to=alexander.levin@verizon.com \
    --cc=bhelgaas@google.com \
    --cc=gabriele.paoloni@huawei.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=liudongdong3@huawei.com \
    --cc=stable@vger.kernel.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

all inboxes | Powered by JetHome®