ACK: [SRU][Artful][PATCH 1/1] EDAC, sb_edac: Fix missing DIMM sysfs entries with KNL SNC2/SNC4 mode
Stefan Bader
stefan.bader at canonical.com
Fri Mar 2 12:58:38 UTC 2018
On 01.03.2018 19:52, Joseph Salisbury wrote:
> From: Luis Felipe Sandoval Castro <luis.felipe.sandoval.castro at intel.com>
>
> BugLink: http://bugs.launchpad.net/bugs/1743856
>
> When figuring out the size of the DIMMs and the cluster mode is SNC2 or SNC4 the
> current algorithm ignores the contribution of some of the channels resulting in
> EDAC never knowing of the existence of some DIMMs attached to such channels (thus
> sysfs is not populated).
>
> Instead of selectively iterating from 0 to interlv_ways when looking for all the
> participants in the interleave, do an exhaustive search and iterate from 0 to
> KNL_MAX_CHANNELS. The algorithm is already smart enough to consider participants
> only one time.
>
> This works fine in all KNL cluster modes and even when there are missing DIMMs
> as the contribution of those channels is 0.
>
> Signed-off-by: Luis Felipe Sandoval Castro <luis.felipe.sandoval.castro at intel.com>
> Acked-by: Tony Luck <tony.luck at intel.com>
> Cc: Mauro Carvalho Chehab <mchehab at kernel.org>
> Cc: arozansk at redhat.com
> Cc: linux-edac <linux-edac at vger.kernel.org>
> Cc: qiuxu.zhuo at intel.com
> Link: http://lkml.kernel.org/r/1506606882-90521-1-git-send-email-luis.felipe.sandoval.castro@intel.com
> Signed-off-by: Borislav Petkov <bp at suse.de>
> (cherry picked from commit 24281a2f4ca569d44e44e4cbc500cf08e7bb4c36)
> Signed-off-by: Joseph Salisbury <joseph.salisbury at canonical.com>
Acked-by: Stefan Bader <stefan.bader at canonical.com>
> ---
> drivers/edac/sb_edac.c | 19 +++----------------
> 1 file changed, 3 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c
> index 80d860c..b870c39 100644
> --- a/drivers/edac/sb_edac.c
> +++ b/drivers/edac/sb_edac.c
> @@ -1311,9 +1311,7 @@ static int knl_get_dimm_capacity(struct sbridge_pvt *pvt, u64 *mc_sizes)
> int cur_reg_start;
> int mc;
> int channel;
> - int way;
> int participants[KNL_MAX_CHANNELS];
> - int participant_count = 0;
>
> for (i = 0; i < KNL_MAX_CHANNELS; i++)
> mc_sizes[i] = 0;
> @@ -1488,21 +1486,14 @@ static int knl_get_dimm_capacity(struct sbridge_pvt *pvt, u64 *mc_sizes)
> * this channel mapped to the given target?
> */
> for (channel = 0; channel < KNL_MAX_CHANNELS; channel++) {
> - for (way = 0; way < intrlv_ways; way++) {
> - int target;
> - int cha;
> -
> - if (KNL_MOD3(dram_rule))
> - target = way;
> - else
> - target = 0x7 & sad_pkg(
> - pvt->info.interleave_pkg, interleave_reg, way);
> + int target;
> + int cha;
>
> + for (target = 0; target < KNL_MAX_CHANNELS; target++) {
> for (cha = 0; cha < KNL_MAX_CHAS; cha++) {
> if (knl_get_mc_route(target,
> mc_route_reg[cha]) == channel
> && !participants[channel]) {
> - participant_count++;
> participants[channel] = 1;
> break;
> }
> @@ -1510,10 +1501,6 @@ static int knl_get_dimm_capacity(struct sbridge_pvt *pvt, u64 *mc_sizes)
> }
> }
>
> - if (participant_count != intrlv_ways)
> - edac_dbg(0, "participant_count (%d) != interleave_ways (%d): DIMM size may be incorrect\n",
> - participant_count, intrlv_ways);
> -
> for (channel = 0; channel < KNL_MAX_CHANNELS; channel++) {
> mc = knl_channel_mc(channel);
> if (participants[channel]) {
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20180302/e58b2d55/attachment.sig>
More information about the kernel-team
mailing list