1. 02 8月, 2017 1 次提交
    • Q
      EDAC, sb_edac: Classify memory mirroring modes · 039d7af6
      Qiuxu Zhuo 提交于
      Basically, there are full memory mirroring and address range partial
      memory mirroring (supported by Haswell EX and Broadwell EX) modes.
      
      a) In full memory mirroring, the memory behind each memory controller
         is mirrored, i.e. the memory is split into two identical mirrors
         (primary and secondary), half of the memory is reserved for redundancy.
      
      b) In address range partial memory mirroring, the memory size (range)
         of primary and secondary behind each memory controller can be user
         defined by the TAD0 register. The rest of memory ranges defined by
         TAD1/TAD2/... in that memory controller are non-mirrored.
      
      For more detail on memory mirroring, see the following link written by Tony Luck:
      
        https://01.org/lkp/blogs/tonyluck/2016/address-range-partial-memory-mirroring-linux
      
      Currently the sb_edac driver only supports address decoding in full
      memory mirroring and non-mirroring modes. In address range partial
      memory mirroring mode, it may fail to decode an address that falls in a
      non-mirroring area (the following was one of this kind of failed logs).
      
        mce: Uncorrected hardware memory error in user-access at 566d53a400
        Memory failure: 0x566d53a8: Killing einj_mem_uc:4647 due to hardware memory corruption
        Memory failure: 0x566d53a8: recovery action for dirty LRU page: Recovered
        mce: [Hardware Error]: Machine check events logged
        EDAC sbridge MC1: HANDLING MCE MEMORY ERROR
        EDAC sbridge MC1: CPU 48: Machine Check Event: 0 Bank 7: ec00000000010090
        EDAC sbridge MC1: TSC 4b914aa5a99dab
        EDAC sbridge MC1: ADDR 566d53a400
        EDAC sbridge MC1: MISC 1443a0c86
        EDAC sbridge MC1: PROCESSOR 0:406f1 TIME 1499712764 SOCKET 2 APIC 80
        EDAC MC1: 0 UE Can't discover the memory rank for ch addr 0x7fb54e900 on any memory ( page:0x0 offset:0x0 grain:32)
        mce: [Hardware Error]: Machine check events logged
      
      Therefore, classify memory mirroring modes and make the address decoding
      in address range partial memory mode correct.
      Signed-off-by: NQiuxu Zhuo <qiuxu.zhuo@intel.com>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: linux-edac <linux-edac@vger.kernel.org>
      Link: http://lkml.kernel.org/r/20170730180651.30060-1-qiuxu.zhuo@intel.comSigned-off-by: NBorislav Petkov <bp@suse.de>
      039d7af6
  2. 17 7月, 2017 1 次提交
  3. 14 6月, 2017 1 次提交
    • Q
      EDAC, sb_edac: Avoid creating SOCK memory controller · 133e4455
      Qiuxu Zhuo 提交于
      Xiaolong Ye reported the following failure on Broadwell D server:
      
        EDAC sbridge: Some needed devices are missing
        EDAC MC: Removed device 0 for sbridge_edac.c Broadwell SrcID#0_Ha#0: DEV 0000:ff:12.0
        EDAC sbridge: Couldn't find mci handler
        EDAC sbridge: Failed to register device with error -19.
      
      Broadwell D (only IMC0 per socket) and Broadwell X (IMC0 and IMC1 per
      socket) use the same PCI device IDs for IMC0 per socket, then they
      share pci_dev_descr_broadwell_table (n_imcs_per_sock=2). In this case,
      Broadwell D wrongly creates the nonexistent SOCK EDAC memory controller
      and reports above error messages, since it has no IMC1 per socket.
      
      Avoid creating the nonexistent SOCK memory controller.
      Reported-and-tested-by: NXiaolong Ye <xiaolong.ye@intel.com>
      Signed-off-by: NQiuxu Zhuo <qiuxu.zhuo@intel.com>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: linux-edac <linux-edac@vger.kernel.org>
      Link: http://lkml.kernel.org/r/20170608113351.25323-1-qiuxu.zhuo@intel.com
      [ Massage. ]
      Signed-off-by: NBorislav Petkov <bp@suse.de>
      133e4455
  4. 25 5月, 2017 8 次提交
  5. 10 4月, 2017 1 次提交
  6. 24 1月, 2017 1 次提交
  7. 23 1月, 2017 1 次提交
  8. 15 12月, 2016 1 次提交
  9. 19 10月, 2016 2 次提交
  10. 13 9月, 2016 1 次提交
  11. 08 8月, 2016 1 次提交
    • L
      EDAC, sb_edac: Fix channel reporting on Knights Landing · c5b48fa7
      Lukasz Odzioba 提交于
      On Intel Xeon Phi Knights Landing processor family the channels of the
      memory controller have untypical arrangement - MC0 is mapped to CH3,4,5
      and MC1 is mapped to CH0,1,2. This causes the EDAC driver to report the
      channel name incorrectly.
      
      We missed this change earlier, so the code already contains similar
      comment, but the translation function is incorrect.
      
      Without this patch:
        errors in DIMM_A and DIMM_D were reported in DIMM_D
        errors in DIMM_B and DIMM_E were reported in DIMM_E
        errors in DIMM_C and DIMM_F were reported in DIMM_F
      
      Correct this.
      
      Hubert Chrzaniuk:
       - rebased to 4.8
       - comments and code cleanup
      
      Fixes: d0cdf900 ("sb_edac: Add Knights Landing (Xeon Phi gen 2) support")
      Reviewed-by: NTony Luck <tony.luck@intel.com>
      Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
      Cc: Hubert Chrzaniuk <hubert.chrzaniuk@intel.com>
      Cc: linux-edac <linux-edac@vger.kernel.org>
      Cc: lukasz.anaczkowski@intel.com
      Cc: lukasz.odzioba@intel.com
      Cc: mchehab@kernel.org
      Cc: <stable@vger.kernel.org> # v4.5..
      Link: http://lkml.kernel.org/r/1469231089-22837-1-git-send-email-lukasz.odzioba@intel.comSigned-off-by: NLukasz Odzioba <lukasz.odzioba@intel.com>
      [ Boris: Simplify a bit by removing char mc. ]
      Signed-off-by: NBorislav Petkov <bp@suse.de>
      c5b48fa7
  12. 16 7月, 2016 1 次提交
  13. 03 6月, 2016 2 次提交
  14. 03 5月, 2016 1 次提交
    • T
      EDAC, sb_edac: Use cpu family/model in driver detection · 2c1ea4c7
      Tony Luck 提交于
      Instead of picking a random PCI ID from the dozen or so we need to
      access, just use x86_match_cpu() to pick based on CPU model number. The
      choosing of PCI devices has been problematic in the past, see
      
        11249e73 ("sb_edac: Fix detection on SNB machines")
      
      which fixed problems introduced by
      
        d0585cd8 ("sb_edac: Claim a different PCI device").
      
      This is especially ugly if future hardware might not even have
      EDAC-relevant registers in PCI config space and we would still be
      required to choose some "random" PCI devices to scan for just so our
      driver loads.
      
      Is this cleaner/clearer? It deletes much more code than it adds. Only
      tested on Broadwell. The driver loads/unloads and loads again. Still
      decodes errors too.
      Signed-off-by: NTony Luck <tony.luck@intel.com>
      Suggested-by: NBorislav Petkov <bp@alien8.de>
      Signed-off-by: NBorislav Petkov <bp@suse.de>
      2c1ea4c7
  15. 29 4月, 2016 1 次提交
  16. 23 4月, 2016 1 次提交
  17. 22 4月, 2016 2 次提交
  18. 11 3月, 2016 1 次提交
    • L
      EDAC/sb_edac: Fix computation of channel address · eb1af3b7
      Luck, Tony 提交于
      Large memory Haswell-EX systems with multiple DIMMs per channel were
      sometimes reporting the wrong DIMM.
      
      Found three problems:
      
       1) Debug printouts for socket and channel interleave were not interpreting
          the register fields correctly. The socket interleave field is a 2^X
          value (0=1, 1=2, 2=4, 3=8). The channel interleave is X+1 (0=1, 1=2,
          2=3. 3=4).
      
       2) Actual use of the socket interleave value didn't interpret as 2^X
      
       3) Conversion of address to channel address was complicated, and wrong.
      Signed-off-by: NTony Luck <tony.luck@intel.com>
      Acked-by: NAristeu Rozanski <arozansk@redhat.com>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: linux-edac@vger.kernel.org
      Cc: stable@vger.kernel.org
      Signed-off-by: NIngo Molnar <mingo@kernel.org>
      eb1af3b7
  19. 08 3月, 2016 1 次提交
  20. 11 12月, 2015 1 次提交
  21. 06 12月, 2015 3 次提交
  22. 25 9月, 2015 1 次提交
    • S
      EDAC, sb_edac: Fix TAD presence check for sbridge_mci_bind_devs() · 2900ea60
      Seth Jennings 提交于
      In commit
      
        7d375bff ("sb_edac: Fix support for systems with two home agents per socket")
      
      NUM_CHANNELS was changed to 8 and the channel space was renumerated to
      handle EN, EP, and EX configurations.
      
      The *_mci_bind_devs() functions - except for sbridge_mci_bind_devs() -
      got a new device presence check in the form of saw_chan_mask. However,
      sbridge_mci_bind_devs() still uses the NUM_CHANNELS for loop.
      
      With the increase in NUM_CHANNELS, this loop fails at index 4 since
      SB only has 4 TADs.  This results in the following error on SB machines:
      
        EDAC sbridge: Some needed devices are missing
        EDAC sbridge: Couldn't find mci handler
        EDAC sbridge: Couldn't find mci handle
      
      This patch adapts the saw_chan_mask logic for sbridge_mci_bind_devs() as
      well.
      
      After this patch:
      
        EDAC MC0: Giving out device to module sbridge_edac.c controller Sandy Bridge Socket#0: DEV 0000:3f:0e.0 (POLLED)
        EDAC MC1: Giving out device to module sbridge_edac.c controller Sandy Bridge Socket#1: DEV 0000:7f:0e.0 (POLLED)
      Signed-off-by: NSeth Jennings <sjenning@redhat.com>
      Acked-by: NAristeu Rozanski <aris@redhat.com>
      Acked-by: NTony Luck <tony.luck@intel.com>
      Tested-by: NBorislav Petkov <bp@suse.de>
      Cc: <stable@vger.kernel.org> # v4.2
      Cc: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
      Cc: linux-edac <linux-edac@vger.kernel.org>
      Link: http://lkml.kernel.org/r/1438798561-10180-1-git-send-email-sjenning@redhat.comSigned-off-by: NBorislav Petkov <bp@suse.de>
      2900ea60
  23. 09 9月, 2015 2 次提交
  24. 13 8月, 2015 2 次提交
  25. 03 6月, 2015 2 次提交
    • T
      sb_edac: support for Broadwell -EP and -EX · fa2ce64f
      Tony Luck 提交于
      Basic support for the single socket Broadwell-DE processor
      was added back in commit 1f39581a
         sb_edac: Add support for Broadwell-DE processor
      This patch extends Broadwell support to cover the two
      socket "-EP" and four socket "-EX" versions of Broadwell.
      Only tested on the 2 socket - but this code is largely
      cloned from the Haswell path.
      Signed-off-by: NTony Luck <tony.luck@intel.com>
      Signed-off-by: NMauro Carvalho Chehab <mchehab@osg.samsung.com>
      fa2ce64f
    • T
      sb_edac: Fix support for systems with two home agents per socket · 7d375bff
      Tony Luck 提交于
      First noticed a problem on a 4 socket machine where EDAC only reported
      half the DIMMS.  Tracked this down to the code that assumes that systems
      with two home agents only have two memory channels on each agent. This
      is true on 2 sockect ("-EP") machines. But four socket ("-EX") machines
      have four memory channels on each home agent.
      
      The old code would have had problems on two socket systems as it did
      a shuffling trick to make the internals of the code think that the
      channels from the first agent were '0' and '1', with the second agent
      providing '2' and '3'. But the code didn't uniformly convert from
      {ha,channel} tuples to this internal representation.
      
      New code always considers up to eight channels.
      On a machine with a single home agent these map easily to edac channels
      0, 1, 2, 3. On machines with two home agents we map using:
        edac_channel = 4*ha# + channel
      So on a -EP machine where each home agent supports only two channels
      we'll fill in channels 0, 1, 4, 5, and on a -EX machine we use all of 0,
      1, 2, 3, 4, 5, 6, 7.
      
      [mchehab@osg.samsung.com: fold a fixup patch as per Tony's request and fixed
       a few CodingStyle issues]
      Signed-off-by: NTony Luck <tony.luck@intel.com>
      Acked-by: NAristeu Rozanski <aris@redhat.com>
      Signed-off-by: NMauro Carvalho Chehab <mchehab@osg.samsung.com>
      7d375bff