]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/4.1.13/edac-sb_edac-fix-tad-presence-check-for-sbridge_mci_bind_devs.patch
4.9-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 4.1.13 / edac-sb_edac-fix-tad-presence-check-for-sbridge_mci_bind_devs.patch
CommitLineData
7773b1b7
GKH
1From 2900ea609616c2651dec65312beeb2a6e536bc50 Mon Sep 17 00:00:00 2001
2From: Seth Jennings <sjenning@redhat.com>
3Date: Wed, 5 Aug 2015 13:16:01 -0500
4Subject: EDAC, sb_edac: Fix TAD presence check for sbridge_mci_bind_devs()
5
6From: Seth Jennings <sjenning@redhat.com>
7
8commit 2900ea609616c2651dec65312beeb2a6e536bc50 upstream.
9
10In commit
11
12 7d375bffa524 ("sb_edac: Fix support for systems with two home agents per socket")
13
14NUM_CHANNELS was changed to 8 and the channel space was renumerated to
15handle EN, EP, and EX configurations.
16
17The *_mci_bind_devs() functions - except for sbridge_mci_bind_devs() -
18got a new device presence check in the form of saw_chan_mask. However,
19sbridge_mci_bind_devs() still uses the NUM_CHANNELS for loop.
20
21With the increase in NUM_CHANNELS, this loop fails at index 4 since
22SB only has 4 TADs. This results in the following error on SB machines:
23
24 EDAC sbridge: Some needed devices are missing
25 EDAC sbridge: Couldn't find mci handler
26 EDAC sbridge: Couldn't find mci handle
27
28This patch adapts the saw_chan_mask logic for sbridge_mci_bind_devs() as
29well.
30
31After this patch:
32
33 EDAC MC0: Giving out device to module sbridge_edac.c controller Sandy Bridge Socket#0: DEV 0000:3f:0e.0 (POLLED)
34 EDAC MC1: Giving out device to module sbridge_edac.c controller Sandy Bridge Socket#1: DEV 0000:7f:0e.0 (POLLED)
35
36Signed-off-by: Seth Jennings <sjenning@redhat.com>
37Acked-by: Aristeu Rozanski <aris@redhat.com>
38Acked-by: Tony Luck <tony.luck@intel.com>
39Tested-by: Borislav Petkov <bp@suse.de>
40Cc: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
41Cc: linux-edac <linux-edac@vger.kernel.org>
42Link: http://lkml.kernel.org/r/1438798561-10180-1-git-send-email-sjenning@redhat.com
43Signed-off-by: Borislav Petkov <bp@suse.de>
44Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
45
46---
47 drivers/edac/sb_edac.c | 8 ++++----
48 1 file changed, 4 insertions(+), 4 deletions(-)
49
50--- a/drivers/edac/sb_edac.c
51+++ b/drivers/edac/sb_edac.c
52@@ -1608,6 +1608,7 @@ static int sbridge_mci_bind_devs(struct
53 {
54 struct sbridge_pvt *pvt = mci->pvt_info;
55 struct pci_dev *pdev;
56+ u8 saw_chan_mask = 0;
57 int i;
58
59 for (i = 0; i < sbridge_dev->n_devs; i++) {
60@@ -1641,6 +1642,7 @@ static int sbridge_mci_bind_devs(struct
61 {
62 int id = pdev->device - PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_TAD0;
63 pvt->pci_tad[id] = pdev;
64+ saw_chan_mask |= 1 << id;
65 }
66 break;
67 case PCI_DEVICE_ID_INTEL_SBRIDGE_IMC_DDRIO:
68@@ -1661,10 +1663,8 @@ static int sbridge_mci_bind_devs(struct
69 !pvt-> pci_tad || !pvt->pci_ras || !pvt->pci_ta)
70 goto enodev;
71
72- for (i = 0; i < NUM_CHANNELS; i++) {
73- if (!pvt->pci_tad[i])
74- goto enodev;
75- }
76+ if (saw_chan_mask != 0x0f)
77+ goto enodev;
78 return 0;
79
80 enodev: