]>
Commit | Line | Data |
---|---|---|
7773b1b7 GKH |
1 | From 2900ea609616c2651dec65312beeb2a6e536bc50 Mon Sep 17 00:00:00 2001 |
2 | From: Seth Jennings <sjenning@redhat.com> | |
3 | Date: Wed, 5 Aug 2015 13:16:01 -0500 | |
4 | Subject: EDAC, sb_edac: Fix TAD presence check for sbridge_mci_bind_devs() | |
5 | ||
6 | From: Seth Jennings <sjenning@redhat.com> | |
7 | ||
8 | commit 2900ea609616c2651dec65312beeb2a6e536bc50 upstream. | |
9 | ||
10 | In commit | |
11 | ||
12 | 7d375bffa524 ("sb_edac: Fix support for systems with two home agents per socket") | |
13 | ||
14 | NUM_CHANNELS was changed to 8 and the channel space was renumerated to | |
15 | handle EN, EP, and EX configurations. | |
16 | ||
17 | The *_mci_bind_devs() functions - except for sbridge_mci_bind_devs() - | |
18 | got a new device presence check in the form of saw_chan_mask. However, | |
19 | sbridge_mci_bind_devs() still uses the NUM_CHANNELS for loop. | |
20 | ||
21 | With the increase in NUM_CHANNELS, this loop fails at index 4 since | |
22 | SB 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 | ||
28 | This patch adapts the saw_chan_mask logic for sbridge_mci_bind_devs() as | |
29 | well. | |
30 | ||
31 | After 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 | ||
36 | Signed-off-by: Seth Jennings <sjenning@redhat.com> | |
37 | Acked-by: Aristeu Rozanski <aris@redhat.com> | |
38 | Acked-by: Tony Luck <tony.luck@intel.com> | |
39 | Tested-by: Borislav Petkov <bp@suse.de> | |
40 | Cc: Mauro Carvalho Chehab <mchehab@osg.samsung.com> | |
41 | Cc: linux-edac <linux-edac@vger.kernel.org> | |
42 | Link: http://lkml.kernel.org/r/1438798561-10180-1-git-send-email-sjenning@redhat.com | |
43 | Signed-off-by: Borislav Petkov <bp@suse.de> | |
44 | Signed-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: |