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