All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/3] x86/platform/uv: UV Kernel support for UV5
@ 2022-04-06 19:51 Steve Wahl
  2022-04-06 19:51 ` [PATCH v4 1/3] x86/platform/uv: Update NMI Handler " Steve Wahl
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Steve Wahl @ 2022-04-06 19:51 UTC (permalink / raw)
  To: Borislav Petkov, Ingo Molnar, Thomas Gleixner, x86
  Cc: Mike Travis, Steve Wahl, Andy Shevchenko, Darren Hart,
	Dimitri Sivanich, H . Peter Anvin, Russ Anderson, linux-kernel,
	platform-driver-x86

v2: Delete patch to remove SCRATCH 5 NMI support check for
    UV2 and UV3k systems with old NMI support function.

v3: Fix check BIOS NMI support mistake in Patch 1.

v4: Clarify commit messages and comments in all 3 patches.
    We hope this addresses the issues raised by Thomas Gleixner in
	https://lore.kernel.org/r/87zgl02w6v.ffs@tglx

    Update NMI Handler for UV5
	Update NMI handler for UV5 hardware. A platform register
	changed, and UV5 only uses one of the two NMI methods used on
	previous hardware.

    Update TSC sync state for UV5

	The UV5 platform synchronizes the TSCs among all chassis, and
	will not proceed to OS boot without achieving synchronization.
	Previous UV platforms provided a register indicating
	successful synchronization.  This is no longer available on
	UV5.  On this platform TSC_ADJUST should not be reset by the
	kernel.

    Log gap hole end size
	Show value of gap end in the kernel log which equates to
	number of physical address bits used by system.

Mike Travis (3):
  x86/platform/uv: Update NMI Handler for UV5
  x86/platform/uv: Update TSC sync state for UV5
  x86/platform/uv: Log gap hole end size

 arch/x86/kernel/apic/x2apic_uv_x.c | 16 +++++++++++++---
 arch/x86/platform/uv/uv_nmi.c      | 20 ++++++++++----------
 2 files changed, 23 insertions(+), 13 deletions(-)

-- 
2.26.2


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v4 1/3] x86/platform/uv: Update NMI Handler for UV5
  2022-04-06 19:51 [PATCH v4 0/3] x86/platform/uv: UV Kernel support for UV5 Steve Wahl
@ 2022-04-06 19:51 ` Steve Wahl
  2022-04-07 15:48   ` [tip: x86/platform] " tip-bot2 for Mike Travis
  2022-04-06 19:51 ` [PATCH v4 2/3] x86/platform/uv: Update TSC sync state " Steve Wahl
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Steve Wahl @ 2022-04-06 19:51 UTC (permalink / raw)
  To: Borislav Petkov, Ingo Molnar, Thomas Gleixner, x86
  Cc: Mike Travis, Steve Wahl, Andy Shevchenko, Darren Hart,
	Dimitri Sivanich, H . Peter Anvin, Russ Anderson, linux-kernel,
	platform-driver-x86

From: Mike Travis <mike.travis@hpe.com>

Update NMI handler for UV5 hardware. A platform register changed, and
UV5 only uses one of the two NMI methods used on previous hardware.

Signed-off-by: Mike Travis <mike.travis@hpe.com>
Signed-off-by: Steve Wahl <steve.wahl@hpe.com>
Reviewed-by: Dimitri Sivanich <dimitri.sivanich@hpe.com>
---
v4: Clarify comments, change variable name to better convey what's happening
v3: Fix mistake in UVH_EXTIO_INT0_BROADCAST check.
    Use true/false in setting bool flag.
v2: Use bool flag to assume NMI support for UV5 and above.
---
 arch/x86/platform/uv/uv_nmi.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/arch/x86/platform/uv/uv_nmi.c b/arch/x86/platform/uv/uv_nmi.c
index 1e9ff28bc2e0..50fdd1a77f02 100644
--- a/arch/x86/platform/uv/uv_nmi.c
+++ b/arch/x86/platform/uv/uv_nmi.c
@@ -244,8 +244,10 @@ static inline bool uv_nmi_action_is(const char *action)
 /* Setup which NMI support is present in system */
 static void uv_nmi_setup_mmrs(void)
 {
+	bool new_nmi_method_only = false;
+
 	/* First determine arch specific MMRs to handshake with BIOS */
-	if (UVH_EVENT_OCCURRED0_EXTIO_INT0_MASK) {
+	if (UVH_EVENT_OCCURRED0_EXTIO_INT0_MASK) {	/* UV2,3,4 setup */
 		uvh_nmi_mmrx = UVH_EVENT_OCCURRED0;
 		uvh_nmi_mmrx_clear = UVH_EVENT_OCCURRED0_ALIAS;
 		uvh_nmi_mmrx_shift = UVH_EVENT_OCCURRED0_EXTIO_INT0_SHFT;
@@ -255,26 +257,25 @@ static void uv_nmi_setup_mmrs(void)
 		uvh_nmi_mmrx_req = UVH_BIOS_KERNEL_MMR_ALIAS_2;
 		uvh_nmi_mmrx_req_shift = 62;
 
-	} else if (UVH_EVENT_OCCURRED1_EXTIO_INT0_MASK) {
+	} else if (UVH_EVENT_OCCURRED1_EXTIO_INT0_MASK) { /* UV5+ setup */
 		uvh_nmi_mmrx = UVH_EVENT_OCCURRED1;
 		uvh_nmi_mmrx_clear = UVH_EVENT_OCCURRED1_ALIAS;
 		uvh_nmi_mmrx_shift = UVH_EVENT_OCCURRED1_EXTIO_INT0_SHFT;
 		uvh_nmi_mmrx_type = "OCRD1-EXTIO_INT0";
 
-		uvh_nmi_mmrx_supported = UVH_EXTIO_INT0_BROADCAST;
-		uvh_nmi_mmrx_req = UVH_BIOS_KERNEL_MMR_ALIAS_2;
-		uvh_nmi_mmrx_req_shift = 62;
+		new_nmi_method_only = true;		/* Newer nmi always valid on UV5+ */
+		uvh_nmi_mmrx_req = 0;			/* no request bit to clear */
 
 	} else {
-		pr_err("UV:%s:cannot find EVENT_OCCURRED*_EXTIO_INT0\n",
-			__func__);
+		pr_err("UV:%s:NMI support not available on this system\n", __func__);
 		return;
 	}
 
 	/* Then find out if new NMI is supported */
-	if (likely(uv_read_local_mmr(uvh_nmi_mmrx_supported))) {
-		uv_write_local_mmr(uvh_nmi_mmrx_req,
-					1UL << uvh_nmi_mmrx_req_shift);
+	if (new_nmi_method_only || uv_read_local_mmr(uvh_nmi_mmrx_supported)) {
+		if (uvh_nmi_mmrx_req)
+			uv_write_local_mmr(uvh_nmi_mmrx_req,
+						1UL << uvh_nmi_mmrx_req_shift);
 		nmi_mmr = uvh_nmi_mmrx;
 		nmi_mmr_clear = uvh_nmi_mmrx_clear;
 		nmi_mmr_pending = 1UL << uvh_nmi_mmrx_shift;
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v4 2/3] x86/platform/uv: Update TSC sync state for UV5
  2022-04-06 19:51 [PATCH v4 0/3] x86/platform/uv: UV Kernel support for UV5 Steve Wahl
  2022-04-06 19:51 ` [PATCH v4 1/3] x86/platform/uv: Update NMI Handler " Steve Wahl
@ 2022-04-06 19:51 ` Steve Wahl
  2022-04-07 15:48   ` [tip: x86/platform] " tip-bot2 for Mike Travis
  2022-04-06 19:51 ` [PATCH v4 3/3] x86/platform/uv: Log gap hole end size Steve Wahl
  2022-04-06 22:53 ` [PATCH v4 0/3] x86/platform/uv: UV Kernel support for UV5 Thomas Gleixner
  3 siblings, 1 reply; 9+ messages in thread
From: Steve Wahl @ 2022-04-06 19:51 UTC (permalink / raw)
  To: Borislav Petkov, Ingo Molnar, Thomas Gleixner, x86
  Cc: Mike Travis, Steve Wahl, Andy Shevchenko, Darren Hart,
	Dimitri Sivanich, H . Peter Anvin, Russ Anderson, linux-kernel,
	platform-driver-x86

From: Mike Travis <mike.travis@hpe.com>

The UV5 platform synchronizes the TSCs among all chassis, and will not
proceed to OS boot without achieving synchronization.  Previous UV
platforms provided a register indicating successful synchronization.
This is no longer available on UV5.  On this platform TSC_ADJUST
should not be reset by the kernel.

Signed-off-by: Mike Travis <mike.travis@hpe.com>
Signed-off-by: Steve Wahl <steve.wahl@hpe.com>
Reviewed-by: Dimitri Sivanich <dimitri.sivanich@hpe.com>
---
v2: Update patch description to be more explanatory.

v4: Update patch description to provide better context
    Removed a pr_debug() and an unrelated whitespace change
---
 arch/x86/kernel/apic/x2apic_uv_x.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c
index f5a48e66e4f5..a6e9c2794ef5 100644
--- a/arch/x86/kernel/apic/x2apic_uv_x.c
+++ b/arch/x86/kernel/apic/x2apic_uv_x.c
@@ -199,7 +199,13 @@ static void __init uv_tsc_check_sync(void)
 	int mmr_shift;
 	char *state;
 
-	/* Different returns from different UV BIOS versions */
+	/* UV5 guarantees synced TSCs; do not zero TSC_ADJUST */
+	if (!is_uv(UV2|UV3|UV4)) {
+		mark_tsc_async_resets("UV5+");
+		return;
+	}
+
+	/* UV2,3,4, UV BIOS TSC sync state available */
 	mmr = uv_early_read_mmr(UVH_TSC_SYNC_MMR);
 	mmr_shift =
 		is_uv2_hub() ? UVH_TSC_SYNC_SHIFT_UV2K : UVH_TSC_SYNC_SHIFT;
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v4 3/3] x86/platform/uv: Log gap hole end size
  2022-04-06 19:51 [PATCH v4 0/3] x86/platform/uv: UV Kernel support for UV5 Steve Wahl
  2022-04-06 19:51 ` [PATCH v4 1/3] x86/platform/uv: Update NMI Handler " Steve Wahl
  2022-04-06 19:51 ` [PATCH v4 2/3] x86/platform/uv: Update TSC sync state " Steve Wahl
@ 2022-04-06 19:51 ` Steve Wahl
  2022-04-07 15:48   ` [tip: x86/platform] " tip-bot2 for Mike Travis
  2022-04-06 22:53 ` [PATCH v4 0/3] x86/platform/uv: UV Kernel support for UV5 Thomas Gleixner
  3 siblings, 1 reply; 9+ messages in thread
From: Steve Wahl @ 2022-04-06 19:51 UTC (permalink / raw)
  To: Borislav Petkov, Ingo Molnar, Thomas Gleixner, x86
  Cc: Mike Travis, Steve Wahl, Andy Shevchenko, Darren Hart,
	Dimitri Sivanich, H . Peter Anvin, Russ Anderson, linux-kernel,
	platform-driver-x86

From: Mike Travis <mike.travis@hpe.com>

Show value of gap end in the kernel log which equates to number of physical
address bits used by system.

Signed-off-by: Mike Travis <mike.travis@hpe.com>
Signed-off-by: Steve Wahl <steve.wahl@hpe.com>
---
v2: Update patch description to be more explanatory.
v4: Clarify commit message
---
 arch/x86/kernel/apic/x2apic_uv_x.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c
index a6e9c2794ef5..482855227964 100644
--- a/arch/x86/kernel/apic/x2apic_uv_x.c
+++ b/arch/x86/kernel/apic/x2apic_uv_x.c
@@ -1346,7 +1346,7 @@ static void __init decode_gam_params(unsigned long ptr)
 static void __init decode_gam_rng_tbl(unsigned long ptr)
 {
 	struct uv_gam_range_entry *gre = (struct uv_gam_range_entry *)ptr;
-	unsigned long lgre = 0;
+	unsigned long lgre = 0, gend = 0;
 	int index = 0;
 	int sock_min = 999999, pnode_min = 99999;
 	int sock_max = -1, pnode_max = -1;
@@ -1380,6 +1380,9 @@ static void __init decode_gam_rng_tbl(unsigned long ptr)
 			flag, size, suffix[order],
 			gre->type, gre->nasid, gre->sockid, gre->pnode);
 
+		if (gre->type == UV_GAM_RANGE_TYPE_HOLE)
+			gend = (unsigned long)gre->limit << UV_GAM_RANGE_SHFT;
+
 		/* update to next range start */
 		lgre = gre->limit;
 		if (sock_min > gre->sockid)
@@ -1397,7 +1400,8 @@ static void __init decode_gam_rng_tbl(unsigned long ptr)
 	_max_pnode	= pnode_max;
 	_gr_table_len	= index;
 
-	pr_info("UV: GRT: %d entries, sockets(min:%x,max:%x) pnodes(min:%x,max:%x)\n", index, _min_socket, _max_socket, _min_pnode, _max_pnode);
+	pr_info("UV: GRT: %d entries, sockets(min:%x,max:%x), pnodes(min:%x,max:%x), gap_end(%d)\n",
+	  index, _min_socket, _max_socket, _min_pnode, _max_pnode, fls64(gend));
 }
 
 /* Walk through UVsystab decoding the fields */
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v4 0/3] x86/platform/uv: UV Kernel support for UV5
  2022-04-06 19:51 [PATCH v4 0/3] x86/platform/uv: UV Kernel support for UV5 Steve Wahl
                   ` (2 preceding siblings ...)
  2022-04-06 19:51 ` [PATCH v4 3/3] x86/platform/uv: Log gap hole end size Steve Wahl
@ 2022-04-06 22:53 ` Thomas Gleixner
  3 siblings, 0 replies; 9+ messages in thread
From: Thomas Gleixner @ 2022-04-06 22:53 UTC (permalink / raw)
  To: Steve Wahl, Borislav Petkov, Ingo Molnar, x86
  Cc: Mike Travis, Steve Wahl, Andy Shevchenko, Darren Hart,
	Dimitri Sivanich, H . Peter Anvin, Russ Anderson, linux-kernel,
	platform-driver-x86

On Wed, Apr 06 2022 at 14:51, Steve Wahl wrote:
> v2: Delete patch to remove SCRATCH 5 NMI support check for
>     UV2 and UV3k systems with old NMI support function.
>
> v3: Fix check BIOS NMI support mistake in Patch 1.
>
> v4: Clarify commit messages and comments in all 3 patches.
>     We hope this addresses the issues raised by Thomas Gleixner in
> 	https://lore.kernel.org/r/87zgl02w6v.ffs@tglx
>
>     Update NMI Handler for UV5
> 	Update NMI handler for UV5 hardware. A platform register
> 	changed, and UV5 only uses one of the two NMI methods used on
> 	previous hardware.
>
>     Update TSC sync state for UV5
>
> 	The UV5 platform synchronizes the TSCs among all chassis, and
> 	will not proceed to OS boot without achieving synchronization.
> 	Previous UV platforms provided a register indicating
> 	successful synchronization.  This is no longer available on
> 	UV5.  On this platform TSC_ADJUST should not be reset by the
> 	kernel.
>
>     Log gap hole end size
> 	Show value of gap end in the kernel log which equates to
> 	number of physical address bits used by system.
>
> Mike Travis (3):
>   x86/platform/uv: Update NMI Handler for UV5
>   x86/platform/uv: Update TSC sync state for UV5
>   x86/platform/uv: Log gap hole end size

Acked-by: Thomas Gleixner <tglx@linutronix.de>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [tip: x86/platform] x86/platform/uv: Log gap hole end size
  2022-04-06 19:51 ` [PATCH v4 3/3] x86/platform/uv: Log gap hole end size Steve Wahl
@ 2022-04-07 15:48   ` tip-bot2 for Mike Travis
  0 siblings, 0 replies; 9+ messages in thread
From: tip-bot2 for Mike Travis @ 2022-04-07 15:48 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Mike Travis, Steve Wahl, Borislav Petkov, Thomas Gleixner, x86,
	linux-kernel

The following commit has been merged into the x86/platform branch of tip:

Commit-ID:     327c348988c6f0bacd7abd29c151f37bdf1e2a02
Gitweb:        https://git.kernel.org/tip/327c348988c6f0bacd7abd29c151f37bdf1e2a02
Author:        Mike Travis <mike.travis@hpe.com>
AuthorDate:    Wed, 06 Apr 2022 14:51:49 -05:00
Committer:     Borislav Petkov <bp@suse.de>
CommitterDate: Thu, 07 Apr 2022 17:25:15 +02:00

x86/platform/uv: Log gap hole end size

Show value of gap end in the kernel log which equates to number of physical
address bits used by system.

Signed-off-by: Mike Travis <mike.travis@hpe.com>
Signed-off-by: Steve Wahl <steve.wahl@hpe.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20220406195149.228164-4-steve.wahl@hpe.com
---
 arch/x86/kernel/apic/x2apic_uv_x.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c
index a6e9c27..4828552 100644
--- a/arch/x86/kernel/apic/x2apic_uv_x.c
+++ b/arch/x86/kernel/apic/x2apic_uv_x.c
@@ -1346,7 +1346,7 @@ static void __init decode_gam_params(unsigned long ptr)
 static void __init decode_gam_rng_tbl(unsigned long ptr)
 {
 	struct uv_gam_range_entry *gre = (struct uv_gam_range_entry *)ptr;
-	unsigned long lgre = 0;
+	unsigned long lgre = 0, gend = 0;
 	int index = 0;
 	int sock_min = 999999, pnode_min = 99999;
 	int sock_max = -1, pnode_max = -1;
@@ -1380,6 +1380,9 @@ static void __init decode_gam_rng_tbl(unsigned long ptr)
 			flag, size, suffix[order],
 			gre->type, gre->nasid, gre->sockid, gre->pnode);
 
+		if (gre->type == UV_GAM_RANGE_TYPE_HOLE)
+			gend = (unsigned long)gre->limit << UV_GAM_RANGE_SHFT;
+
 		/* update to next range start */
 		lgre = gre->limit;
 		if (sock_min > gre->sockid)
@@ -1397,7 +1400,8 @@ static void __init decode_gam_rng_tbl(unsigned long ptr)
 	_max_pnode	= pnode_max;
 	_gr_table_len	= index;
 
-	pr_info("UV: GRT: %d entries, sockets(min:%x,max:%x) pnodes(min:%x,max:%x)\n", index, _min_socket, _max_socket, _min_pnode, _max_pnode);
+	pr_info("UV: GRT: %d entries, sockets(min:%x,max:%x), pnodes(min:%x,max:%x), gap_end(%d)\n",
+	  index, _min_socket, _max_socket, _min_pnode, _max_pnode, fls64(gend));
 }
 
 /* Walk through UVsystab decoding the fields */

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [tip: x86/platform] x86/platform/uv: Update TSC sync state for UV5
  2022-04-06 19:51 ` [PATCH v4 2/3] x86/platform/uv: Update TSC sync state " Steve Wahl
@ 2022-04-07 15:48   ` tip-bot2 for Mike Travis
  0 siblings, 0 replies; 9+ messages in thread
From: tip-bot2 for Mike Travis @ 2022-04-07 15:48 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Mike Travis, Steve Wahl, Borislav Petkov, Dimitri Sivanich,
	Thomas Gleixner, x86, linux-kernel

The following commit has been merged into the x86/platform branch of tip:

Commit-ID:     bb3ab81bdbd53f88f26ffabc9fb15bd8466486ec
Gitweb:        https://git.kernel.org/tip/bb3ab81bdbd53f88f26ffabc9fb15bd8466486ec
Author:        Mike Travis <mike.travis@hpe.com>
AuthorDate:    Wed, 06 Apr 2022 14:51:48 -05:00
Committer:     Borislav Petkov <bp@suse.de>
CommitterDate: Thu, 07 Apr 2022 17:24:39 +02:00

x86/platform/uv: Update TSC sync state for UV5

The UV5 platform synchronizes the TSCs among all chassis, and will not
proceed to OS boot without achieving synchronization.  Previous UV
platforms provided a register indicating successful synchronization.
This is no longer available on UV5.  On this platform TSC_ADJUST
should not be reset by the kernel.

Signed-off-by: Mike Travis <mike.travis@hpe.com>
Signed-off-by: Steve Wahl <steve.wahl@hpe.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Reviewed-by: Dimitri Sivanich <dimitri.sivanich@hpe.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20220406195149.228164-3-steve.wahl@hpe.com
---
 arch/x86/kernel/apic/x2apic_uv_x.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c
index f5a48e6..a6e9c27 100644
--- a/arch/x86/kernel/apic/x2apic_uv_x.c
+++ b/arch/x86/kernel/apic/x2apic_uv_x.c
@@ -199,7 +199,13 @@ static void __init uv_tsc_check_sync(void)
 	int mmr_shift;
 	char *state;
 
-	/* Different returns from different UV BIOS versions */
+	/* UV5 guarantees synced TSCs; do not zero TSC_ADJUST */
+	if (!is_uv(UV2|UV3|UV4)) {
+		mark_tsc_async_resets("UV5+");
+		return;
+	}
+
+	/* UV2,3,4, UV BIOS TSC sync state available */
 	mmr = uv_early_read_mmr(UVH_TSC_SYNC_MMR);
 	mmr_shift =
 		is_uv2_hub() ? UVH_TSC_SYNC_SHIFT_UV2K : UVH_TSC_SYNC_SHIFT;

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [tip: x86/platform] x86/platform/uv: Update NMI Handler for UV5
  2022-04-06 19:51 ` [PATCH v4 1/3] x86/platform/uv: Update NMI Handler " Steve Wahl
@ 2022-04-07 15:48   ` tip-bot2 for Mike Travis
  0 siblings, 0 replies; 9+ messages in thread
From: tip-bot2 for Mike Travis @ 2022-04-07 15:48 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Mike Travis, Steve Wahl, Borislav Petkov, Dimitri Sivanich,
	Thomas Gleixner, x86, linux-kernel

The following commit has been merged into the x86/platform branch of tip:

Commit-ID:     d812f7c475c6a4dcfff02a85fbfd7a9c87e6a094
Gitweb:        https://git.kernel.org/tip/d812f7c475c6a4dcfff02a85fbfd7a9c87e6a094
Author:        Mike Travis <mike.travis@hpe.com>
AuthorDate:    Wed, 06 Apr 2022 14:51:47 -05:00
Committer:     Borislav Petkov <bp@suse.de>
CommitterDate: Thu, 07 Apr 2022 17:23:20 +02:00

x86/platform/uv: Update NMI Handler for UV5

Update NMI handler for UV5 hardware. A platform register changed, and
UV5 only uses one of the two NMI methods used on previous hardware.

Signed-off-by: Mike Travis <mike.travis@hpe.com>
Signed-off-by: Steve Wahl <steve.wahl@hpe.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Reviewed-by: Dimitri Sivanich <dimitri.sivanich@hpe.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20220406195149.228164-2-steve.wahl@hpe.com
---
 arch/x86/platform/uv/uv_nmi.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/arch/x86/platform/uv/uv_nmi.c b/arch/x86/platform/uv/uv_nmi.c
index 1e9ff28..61ec3be 100644
--- a/arch/x86/platform/uv/uv_nmi.c
+++ b/arch/x86/platform/uv/uv_nmi.c
@@ -244,8 +244,10 @@ static inline bool uv_nmi_action_is(const char *action)
 /* Setup which NMI support is present in system */
 static void uv_nmi_setup_mmrs(void)
 {
+	bool new_nmi_method_only = false;
+
 	/* First determine arch specific MMRs to handshake with BIOS */
-	if (UVH_EVENT_OCCURRED0_EXTIO_INT0_MASK) {
+	if (UVH_EVENT_OCCURRED0_EXTIO_INT0_MASK) {	/* UV2,3,4 setup */
 		uvh_nmi_mmrx = UVH_EVENT_OCCURRED0;
 		uvh_nmi_mmrx_clear = UVH_EVENT_OCCURRED0_ALIAS;
 		uvh_nmi_mmrx_shift = UVH_EVENT_OCCURRED0_EXTIO_INT0_SHFT;
@@ -255,26 +257,25 @@ static void uv_nmi_setup_mmrs(void)
 		uvh_nmi_mmrx_req = UVH_BIOS_KERNEL_MMR_ALIAS_2;
 		uvh_nmi_mmrx_req_shift = 62;
 
-	} else if (UVH_EVENT_OCCURRED1_EXTIO_INT0_MASK) {
+	} else if (UVH_EVENT_OCCURRED1_EXTIO_INT0_MASK) { /* UV5+ setup */
 		uvh_nmi_mmrx = UVH_EVENT_OCCURRED1;
 		uvh_nmi_mmrx_clear = UVH_EVENT_OCCURRED1_ALIAS;
 		uvh_nmi_mmrx_shift = UVH_EVENT_OCCURRED1_EXTIO_INT0_SHFT;
 		uvh_nmi_mmrx_type = "OCRD1-EXTIO_INT0";
 
-		uvh_nmi_mmrx_supported = UVH_EXTIO_INT0_BROADCAST;
-		uvh_nmi_mmrx_req = UVH_BIOS_KERNEL_MMR_ALIAS_2;
-		uvh_nmi_mmrx_req_shift = 62;
+		new_nmi_method_only = true;		/* Newer nmi always valid on UV5+ */
+		uvh_nmi_mmrx_req = 0;			/* no request bit to clear */
 
 	} else {
-		pr_err("UV:%s:cannot find EVENT_OCCURRED*_EXTIO_INT0\n",
-			__func__);
+		pr_err("UV:%s:NMI support not available on this system\n", __func__);
 		return;
 	}
 
 	/* Then find out if new NMI is supported */
-	if (likely(uv_read_local_mmr(uvh_nmi_mmrx_supported))) {
-		uv_write_local_mmr(uvh_nmi_mmrx_req,
-					1UL << uvh_nmi_mmrx_req_shift);
+	if (new_nmi_method_only || uv_read_local_mmr(uvh_nmi_mmrx_supported)) {
+		if (uvh_nmi_mmrx_req)
+			uv_write_local_mmr(uvh_nmi_mmrx_req,
+						1UL << uvh_nmi_mmrx_req_shift);
 		nmi_mmr = uvh_nmi_mmrx;
 		nmi_mmr_clear = uvh_nmi_mmrx_clear;
 		nmi_mmr_pending = 1UL << uvh_nmi_mmrx_shift;

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [tip: x86/platform] x86/platform/uv: Update TSC sync state for UV5
  2022-03-18 22:43 [PATCH v3 2/3] x86/platform/uv: Update TSC sync state " Mike Travis
@ 2022-04-04 20:19 ` tip-bot2 for Mike Travis
  0 siblings, 0 replies; 9+ messages in thread
From: tip-bot2 for Mike Travis @ 2022-04-04 20:19 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Mike Travis, Borislav Petkov, Dimitri Sivanich, Steve Wahl, x86,
	linux-kernel

The following commit has been merged into the x86/platform branch of tip:

Commit-ID:     4395de040d24b40fb3cd7fb4f0b013748abe0a72
Gitweb:        https://git.kernel.org/tip/4395de040d24b40fb3cd7fb4f0b013748abe0a72
Author:        Mike Travis <mike.travis@hpe.com>
AuthorDate:    Fri, 18 Mar 2022 17:43:03 -05:00
Committer:     Borislav Petkov <bp@suse.de>
CommitterDate: Mon, 04 Apr 2022 20:21:44 +02:00

x86/platform/uv: Update TSC sync state for UV5

Update TSC to not check TSC sync state for uv5+ as it is not available.
It is assumed that TSC will always be in sync for multiple chassis and
will pass the tests for the kernel to accept it as the clocksource.
To disable this check use the kernel start options tsc=reliable
clocksource=tsc.

Signed-off-by: Mike Travis <mike.travis@hpe.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Reviewed-by: Dimitri Sivanich <dimitri.sivanich@hpe.com>
Reviewed-by: Steve Wahl <steve.wahl@hpe.com>
Link: https://lore.kernel.org/r/20220318224304.174967-3-mike.travis@hpe.com
---
 arch/x86/kernel/apic/x2apic_uv_x.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c
index f5a48e6..387d653 100644
--- a/arch/x86/kernel/apic/x2apic_uv_x.c
+++ b/arch/x86/kernel/apic/x2apic_uv_x.c
@@ -199,10 +199,16 @@ static void __init uv_tsc_check_sync(void)
 	int mmr_shift;
 	char *state;
 
-	/* Different returns from different UV BIOS versions */
+	/* UV5+, sync state from bios not available, assumed valid */
+	if (!is_uv(UV2|UV3|UV4)) {
+		pr_debug("UV: TSC sync state for UV5+ assumed valid\n");
+		mark_tsc_async_resets("UV5+");
+		return;
+	}
+
+	/* UV2,3,4, UV BIOS TSC sync state available */
 	mmr = uv_early_read_mmr(UVH_TSC_SYNC_MMR);
-	mmr_shift =
-		is_uv2_hub() ? UVH_TSC_SYNC_SHIFT_UV2K : UVH_TSC_SYNC_SHIFT;
+	mmr_shift = is_uv2_hub() ? UVH_TSC_SYNC_SHIFT_UV2K : UVH_TSC_SYNC_SHIFT;
 	sync_state = (mmr >> mmr_shift) & UVH_TSC_SYNC_MASK;
 
 	/* Check if TSC is valid for all sockets */

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-04-07 15:48 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-06 19:51 [PATCH v4 0/3] x86/platform/uv: UV Kernel support for UV5 Steve Wahl
2022-04-06 19:51 ` [PATCH v4 1/3] x86/platform/uv: Update NMI Handler " Steve Wahl
2022-04-07 15:48   ` [tip: x86/platform] " tip-bot2 for Mike Travis
2022-04-06 19:51 ` [PATCH v4 2/3] x86/platform/uv: Update TSC sync state " Steve Wahl
2022-04-07 15:48   ` [tip: x86/platform] " tip-bot2 for Mike Travis
2022-04-06 19:51 ` [PATCH v4 3/3] x86/platform/uv: Log gap hole end size Steve Wahl
2022-04-07 15:48   ` [tip: x86/platform] " tip-bot2 for Mike Travis
2022-04-06 22:53 ` [PATCH v4 0/3] x86/platform/uv: UV Kernel support for UV5 Thomas Gleixner
  -- strict thread matches above, loose matches on Subject: below --
2022-03-18 22:43 [PATCH v3 2/3] x86/platform/uv: Update TSC sync state " Mike Travis
2022-04-04 20:19 ` [tip: x86/platform] " tip-bot2 for Mike Travis

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.