All of lore.kernel.org
 help / color / mirror / Atom feed
From: Borislav Petkov <bp@alien8.de>
To: Yazen Ghannam <Yazen.Ghannam@amd.com>
Cc: linux-edac@vger.kernel.org, linux-kernel@vger.kernel.org,
	bp@suse.de, tony.luck@intel.com, x86@kernel.org
Subject: Re: [PATCH 2/3] x86/MCE/AMD, EDAC/mce_amd: Enumerate Reserved SMCA bank type
Date: Thu, 8 Feb 2018 16:15:07 +0100	[thread overview]
Message-ID: <20180208151507.GE7964@pd.tnic> (raw)
In-Reply-To: <20180201184813.82253-2-Yazen.Ghannam@amd.com>

On Thu, Feb 01, 2018 at 12:48:12PM -0600, Yazen Ghannam wrote:
> From: Yazen Ghannam <yazen.ghannam@amd.com>
> 
> Currently, bank 4 is reserved on Fam17h, so we chose not to initialize
> bank 4 in the smca_banks array. This means that when we check if a bank
> is initialized, like during boot or resume, we will see that bank 4 is
> not initialized and try to initialize it. This may cause a call trace,
> when resuming from suspend, due to *on_cpu() calls in the init path.

Please be more specific: the rdmsr_*_on_cpu() calls issue an IPI but we're
running with interrupts disabled, which triggers:

 WARNING: CPU: 0 PID: 11523 at kernel/smp.c:291 smp_call_function_single+0xdc/0xe0

> Reserved banks will be read-as-zero, so their MCA_IPID register will be
> zero. So, like the smca_banks array, the threshold_banks array will not
> have an entry for a reserved bank since all its MCA_MISC* registers will
> be zero.
> 
> Enumerate a "Reserved" bank type that matches on a HWID_MCATYPE of 0,0.
> 
> Use the "Reserved" type when checking if a bank is reserved. It's
> possible that other bank numbers may be reserved on future systems.
> 
> Don't try to find the block address on reserved banks.
> 
> Cc: <stable@vger.kernel.org> # 4.14.x
> Signed-off-by: Yazen Ghannam <yazen.ghannam@amd.com>
> ---
>  arch/x86/include/asm/mce.h           |  1 +
>  arch/x86/kernel/cpu/mcheck/mce_amd.c |  7 +++++++
>  drivers/edac/mce_amd.c               | 11 +++++++----
>  3 files changed, 15 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/x86/include/asm/mce.h b/arch/x86/include/asm/mce.h
> index 96ea4b5ba658..340070415c2c 100644
> --- a/arch/x86/include/asm/mce.h
> +++ b/arch/x86/include/asm/mce.h
> @@ -346,6 +346,7 @@ enum smca_bank_types {
>  	SMCA_IF,	/* Instruction Fetch */
>  	SMCA_L2_CACHE,	/* L2 Cache */
>  	SMCA_DE,	/* Decoder Unit */
> +	SMCA_RESERVED,	/* Reserved */
>  	SMCA_EX,	/* Execution Unit */
>  	SMCA_FP,	/* Floating Point */
>  	SMCA_L3_CACHE,	/* L3 Cache */
> diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c
> index 4e16afc0794d..bf53b4549a17 100644
> --- a/arch/x86/kernel/cpu/mcheck/mce_amd.c
> +++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c
> @@ -82,6 +82,7 @@ static struct smca_bank_name smca_names[] = {
>  	[SMCA_IF]	= { "insn_fetch",	"Instruction Fetch Unit" },
>  	[SMCA_L2_CACHE]	= { "l2_cache",		"L2 Cache" },
>  	[SMCA_DE]	= { "decode_unit",	"Decode Unit" },
> +	[SMCA_RESERVED]	= { "reserved",		"Reserved" },
>  	[SMCA_EX]	= { "execution_unit",	"Execution Unit" },
>  	[SMCA_FP]	= { "floating_point",	"Floating Point Unit" },
>  	[SMCA_L3_CACHE]	= { "l3_cache",		"L3 Cache" },
> @@ -127,6 +128,9 @@ static enum smca_bank_types smca_get_bank_type(unsigned int bank)
>  static struct smca_hwid smca_hwid_mcatypes[] = {
>  	/* { bank_type, hwid_mcatype, xec_bitmap } */
>  
> +	/* Reserved type */
> +	{ SMCA_RESERVED, HWID_MCATYPE(0x00, 0x0), 0x0 },
> +
>  	/* ZN Core (HWID=0xB0) MCA types */
>  	{ SMCA_LS,	 HWID_MCATYPE(0xB0, 0x0), 0x1FFFEF },
>  	{ SMCA_IF,	 HWID_MCATYPE(0xB0, 0x1), 0x3FFF },
> @@ -433,6 +437,9 @@ static u32 get_block_address(unsigned int cpu, u32 current_addr, u32 low, u32 hi
>  	u32 addr = 0, offset = 0;
>  
>  	if (mce_flags.smca) {

As a last patch in the series: please carve the code in this
if-statement into a smca_get_block_address() helper. And it doesn't need
the stable tag as it is only a cleanup.

Thx.

-- 
Regards/Gruss,
    Boris.

Good mailing practices for 400: avoid top-posting and trim the reply.

WARNING: multiple messages have this Message-ID (diff)
From: Borislav Petkov <bp@alien8.de>
To: Yazen Ghannam <Yazen.Ghannam@amd.com>
Cc: linux-edac@vger.kernel.org, linux-kernel@vger.kernel.org,
	bp@suse.de, tony.luck@intel.com, x86@kernel.org
Subject: [2/3] x86/MCE/AMD, EDAC/mce_amd: Enumerate Reserved SMCA bank type
Date: Thu, 8 Feb 2018 16:15:07 +0100	[thread overview]
Message-ID: <20180208151507.GE7964@pd.tnic> (raw)

On Thu, Feb 01, 2018 at 12:48:12PM -0600, Yazen Ghannam wrote:
> From: Yazen Ghannam <yazen.ghannam@amd.com>
> 
> Currently, bank 4 is reserved on Fam17h, so we chose not to initialize
> bank 4 in the smca_banks array. This means that when we check if a bank
> is initialized, like during boot or resume, we will see that bank 4 is
> not initialized and try to initialize it. This may cause a call trace,
> when resuming from suspend, due to *on_cpu() calls in the init path.

Please be more specific: the rdmsr_*_on_cpu() calls issue an IPI but we're
running with interrupts disabled, which triggers:

 WARNING: CPU: 0 PID: 11523 at kernel/smp.c:291 smp_call_function_single+0xdc/0xe0

> Reserved banks will be read-as-zero, so their MCA_IPID register will be
> zero. So, like the smca_banks array, the threshold_banks array will not
> have an entry for a reserved bank since all its MCA_MISC* registers will
> be zero.
> 
> Enumerate a "Reserved" bank type that matches on a HWID_MCATYPE of 0,0.
> 
> Use the "Reserved" type when checking if a bank is reserved. It's
> possible that other bank numbers may be reserved on future systems.
> 
> Don't try to find the block address on reserved banks.
> 
> Cc: <stable@vger.kernel.org> # 4.14.x
> Signed-off-by: Yazen Ghannam <yazen.ghannam@amd.com>
> ---
>  arch/x86/include/asm/mce.h           |  1 +
>  arch/x86/kernel/cpu/mcheck/mce_amd.c |  7 +++++++
>  drivers/edac/mce_amd.c               | 11 +++++++----
>  3 files changed, 15 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/x86/include/asm/mce.h b/arch/x86/include/asm/mce.h
> index 96ea4b5ba658..340070415c2c 100644
> --- a/arch/x86/include/asm/mce.h
> +++ b/arch/x86/include/asm/mce.h
> @@ -346,6 +346,7 @@ enum smca_bank_types {
>  	SMCA_IF,	/* Instruction Fetch */
>  	SMCA_L2_CACHE,	/* L2 Cache */
>  	SMCA_DE,	/* Decoder Unit */
> +	SMCA_RESERVED,	/* Reserved */
>  	SMCA_EX,	/* Execution Unit */
>  	SMCA_FP,	/* Floating Point */
>  	SMCA_L3_CACHE,	/* L3 Cache */
> diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c
> index 4e16afc0794d..bf53b4549a17 100644
> --- a/arch/x86/kernel/cpu/mcheck/mce_amd.c
> +++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c
> @@ -82,6 +82,7 @@ static struct smca_bank_name smca_names[] = {
>  	[SMCA_IF]	= { "insn_fetch",	"Instruction Fetch Unit" },
>  	[SMCA_L2_CACHE]	= { "l2_cache",		"L2 Cache" },
>  	[SMCA_DE]	= { "decode_unit",	"Decode Unit" },
> +	[SMCA_RESERVED]	= { "reserved",		"Reserved" },
>  	[SMCA_EX]	= { "execution_unit",	"Execution Unit" },
>  	[SMCA_FP]	= { "floating_point",	"Floating Point Unit" },
>  	[SMCA_L3_CACHE]	= { "l3_cache",		"L3 Cache" },
> @@ -127,6 +128,9 @@ static enum smca_bank_types smca_get_bank_type(unsigned int bank)
>  static struct smca_hwid smca_hwid_mcatypes[] = {
>  	/* { bank_type, hwid_mcatype, xec_bitmap } */
>  
> +	/* Reserved type */
> +	{ SMCA_RESERVED, HWID_MCATYPE(0x00, 0x0), 0x0 },
> +
>  	/* ZN Core (HWID=0xB0) MCA types */
>  	{ SMCA_LS,	 HWID_MCATYPE(0xB0, 0x0), 0x1FFFEF },
>  	{ SMCA_IF,	 HWID_MCATYPE(0xB0, 0x1), 0x3FFF },
> @@ -433,6 +437,9 @@ static u32 get_block_address(unsigned int cpu, u32 current_addr, u32 low, u32 hi
>  	u32 addr = 0, offset = 0;
>  
>  	if (mce_flags.smca) {

As a last patch in the series: please carve the code in this
if-statement into a smca_get_block_address() helper. And it doesn't need
the stable tag as it is only a cleanup.

Thx.

  reply	other threads:[~2018-02-08 15:15 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-01 18:48 [PATCH 1/3] x86/MCE/AMD: Redo function to get SMCA bank type Yazen Ghannam
2018-02-01 18:48 ` [1/3] " Yazen Ghannam
2018-02-01 18:48 ` [PATCH 2/3] x86/MCE/AMD, EDAC/mce_amd: Enumerate Reserved " Yazen Ghannam
2018-02-01 18:48   ` [2/3] " Yazen Ghannam
2018-02-08 15:15   ` Borislav Petkov [this message]
2018-02-08 15:15     ` Borislav Petkov
2018-02-14 16:28     ` [PATCH 2/3] " Ghannam, Yazen
2018-02-14 16:28       ` [2/3] " Yazen Ghannam
2018-02-01 18:48 ` [PATCH 3/3] x86/MCE/AMD: Get address from already initialized block Yazen Ghannam
2018-02-01 18:48   ` [3/3] " Yazen Ghannam
2018-02-08 15:26   ` [PATCH 3/3] " Borislav Petkov
2018-02-08 15:26     ` [3/3] " Borislav Petkov
2018-04-14  0:42   ` [PATCH 3/3] " Johannes Hirte
2018-04-14  0:42     ` [3/3] " Johannes Hirte
2018-04-16 11:56     ` [PATCH 3/3] " Johannes Hirte
2018-04-16 11:56       ` [3/3] " Johannes Hirte
2018-04-17 13:31       ` [PATCH 3/3] " Ghannam, Yazen
2018-04-17 13:31         ` [3/3] " Yazen Ghannam
2018-05-15  9:39         ` [PATCH 3/3] " Johannes Hirte
2018-05-15  9:39           ` [3/3] " Johannes Hirte
2018-05-16 22:46           ` [PATCH 3/3] " Borislav Petkov
2018-05-16 22:46             ` [3/3] " Boris Petkov
2018-05-17  6:49             ` [PATCH 3/3] " Johannes Hirte
2018-05-17  6:49               ` [3/3] " Johannes Hirte
2018-05-17 10:41               ` [PATCH 3/3] " Borislav Petkov
2018-05-17 10:41                 ` [3/3] " Boris Petkov
2018-05-17 13:04                 ` [PATCH 3/3] " Ghannam, Yazen
2018-05-17 13:04                   ` [3/3] " Yazen Ghannam
2018-05-17 13:44                   ` [PATCH 3/3] " Borislav Petkov
2018-05-17 13:44                     ` [3/3] " Boris Petkov
2018-05-17 14:05                     ` [PATCH 3/3] " Ghannam, Yazen
2018-05-17 14:05                       ` [3/3] " Yazen Ghannam
2018-05-17 18:30                       ` [PATCH 1/2] x86/MCE/AMD: Cache SMCA MISC block addresses Borislav Petkov
2018-05-17 18:30                         ` [1/2] " Boris Petkov
2018-05-17 18:31                       ` [PATCH 2/2] x86/MCE/AMD: Read MCx_MISC block addresses on any CPU Borislav Petkov
2018-05-17 18:31                         ` [2/2] " Boris Petkov
2018-05-17 19:29                 ` [PATCH 3/3] x86/MCE/AMD: Get address from already initialized block Johannes Hirte
2018-05-17 19:29                   ` [3/3] " Johannes Hirte
2018-05-17 19:33                   ` [PATCH 3/3] " Borislav Petkov
2018-05-17 19:33                     ` [3/3] " Boris Petkov
2018-05-19 13:21     ` [tip:ras/urgent] x86/MCE/AMD: Cache SMCA MISC block addresses tip-bot for Borislav Petkov
2018-02-08 15:04 ` [PATCH 1/3] x86/MCE/AMD: Redo function to get SMCA bank type Borislav Petkov
2018-02-08 15:04   ` [1/3] " Borislav Petkov
2018-02-14 16:38   ` [PATCH 1/3] " Ghannam, Yazen
2018-02-14 16:38     ` [1/3] " Yazen Ghannam
2018-02-14 19:35     ` [PATCH 1/3] " Borislav Petkov
2018-02-14 19:35       ` [1/3] " Boris Petkov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180208151507.GE7964@pd.tnic \
    --to=bp@alien8.de \
    --cc=Yazen.Ghannam@amd.com \
    --cc=bp@suse.de \
    --cc=linux-edac@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tony.luck@intel.com \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.