• Tony Luck's avatar
    sb_edac: Fix support for systems with two home agents per socket · 7d375bff
    Tony Luck authored
    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: default avatarTony Luck <tony.luck@intel.com>
    Acked-by: default avatarAristeu Rozanski <aris@redhat.com>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
    7d375bff
sb_edac.c 66.2 KB