linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] Fix TSC ADJUST breakage causing TSC failure
@ 2018-10-02 18:01 Mike Travis
  2018-10-02 18:01 ` [PATCH 1/2] x86/platform/uv: Add is_early_uv_system check Mike Travis
  2018-10-02 18:01 ` [PATCH 2/2] x86/tsc: Fix UV TSC initialization Mike Travis
  0 siblings, 2 replies; 9+ messages in thread
From: Mike Travis @ 2018-10-02 18:01 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin
  Cc: Hedi Berriche, Russ Anderson, Dimitri Sivanich, Borislav Petkov,
	Kate Stewart, Greg Kroah-Hartman, Philippe Ombredanne,
	Pavel Tatashin, Peter Zijlstra, Len Brown, Dou Liyang,
	Xiaoming Gao, Rajvi Jingar, linux-kernel, x86


Fix a breakage caused by enabling early tsc initialization which bypasses
a check that disables the forcing of TSC ADJUST to 0 for chassis 0.
This is common on systems where all the chassis start up asynchronously
so which chassis should have a TSC ADJUST value of 0 is not predictable.

The solution is to add a check earlier than this early tsc init to
disable the potential of it incorrectly adjusting TSC ADJUST values that
are already correctly initialized.

*  Patch 1 adds an early callable function (after efi_init) that will
   check if this system might be a UV system.

*  Patch 2 adds code to tsc_early_init() which disables adjusting the
   TSC ADJUST value if it's a UV system.  This allows the later tsc_init
   function to test the tsc_async_resets flag that indicates the system
   chassis start up asynchronously, so which chassis should have a TSC
   ADJUST value of 0 is not predictable.  Further references are in
   the patch.

-- 

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

* [PATCH 1/2] x86/platform/uv: Add is_early_uv_system check
  2018-10-02 18:01 [PATCH 0/2] Fix TSC ADJUST breakage causing TSC failure Mike Travis
@ 2018-10-02 18:01 ` Mike Travis
  2018-10-02 19:33   ` [tip:x86/urgent] x86/platform/uv: Provide is_early_uv_system() tip-bot for Mike Travis
  2018-10-02 18:01 ` [PATCH 2/2] x86/tsc: Fix UV TSC initialization Mike Travis
  1 sibling, 1 reply; 9+ messages in thread
From: Mike Travis @ 2018-10-02 18:01 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin
  Cc: Hedi Berriche, Russ Anderson, Dimitri Sivanich, Borislav Petkov,
	Kate Stewart, Greg Kroah-Hartman, Philippe Ombredanne,
	Pavel Tatashin, Peter Zijlstra, Len Brown, Dou Liyang,
	Xiaoming Gao, Rajvi Jingar, linux-kernel, x86

[-- Attachment #1: add_is_early_uv_system --]
[-- Type: text/plain, Size: 1391 bytes --]

Introduce is_early_uv_system() which uses efi.uv_systab to decide early
in the boot process whether we're on a UV system.

This is needed to skip other early setup/init code that might break
the UV platform if done too early such as before necessary ACPI tables
parsing takes place.

Signed-off-by: Mike Travis <mike.travis@hpe.com>
Suggested-by: Hedi Berriche <hedi.berriche@hpe.com>
Reviewed-by: Russ Anderson <rja@hpe.com>
Reviewed-by: Dimitri Sivanich <sivanich@hpe.com>
---
 arch/x86/include/asm/uv/uv.h |    6 ++++++
 1 file changed, 6 insertions(+)

--- linux.orig/arch/x86/include/asm/uv/uv.h
+++ linux/arch/x86/include/asm/uv/uv.h
@@ -10,8 +10,13 @@ struct cpumask;
 struct mm_struct;
 
 #ifdef CONFIG_X86_UV
+#include <linux/efi.h>
 
 extern enum uv_system_type get_uv_system_type(void);
+static inline bool is_early_uv_system(void)
+{
+	return !((efi.uv_systab == EFI_INVALID_TABLE_ADDR) || !efi.uv_systab);
+}
 extern int is_uv_system(void);
 extern int is_uv_hubless(void);
 extern void uv_cpu_init(void);
@@ -23,6 +28,7 @@ extern const struct cpumask *uv_flush_tl
 #else	/* X86_UV */
 
 static inline enum uv_system_type get_uv_system_type(void) { return UV_NONE; }
+static inline bool is_early_uv_system(void)	{ return 0; }
 static inline int is_uv_system(void)	{ return 0; }
 static inline int is_uv_hubless(void)	{ return 0; }
 static inline void uv_cpu_init(void)	{ }

-- 

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

* [PATCH 2/2] x86/tsc: Fix UV TSC initialization
  2018-10-02 18:01 [PATCH 0/2] Fix TSC ADJUST breakage causing TSC failure Mike Travis
  2018-10-02 18:01 ` [PATCH 1/2] x86/platform/uv: Add is_early_uv_system check Mike Travis
@ 2018-10-02 18:01 ` Mike Travis
  2018-10-02 19:34   ` [tip:x86/urgent] " tip-bot for Mike Travis
  1 sibling, 1 reply; 9+ messages in thread
From: Mike Travis @ 2018-10-02 18:01 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin
  Cc: Hedi Berriche, Russ Anderson, Dimitri Sivanich, Borislav Petkov,
	Kate Stewart, Greg Kroah-Hartman, Philippe Ombredanne,
	Pavel Tatashin, Peter Zijlstra, Len Brown, Dou Liyang,
	Xiaoming Gao, Rajvi Jingar, linux-kernel, x86

[-- Attachment #1: fix_tsc_early_init --]
[-- Type: text/plain, Size: 1511 bytes --]

Fix regression introduced by

commit cf7a63ef4e02 ("x86/tsc: Calibrate tsc only once")

as it added a call to tsc_early_init() which initializes the TSC ADJUST
values before acpi_boot_table_init().  In the case of UV systems,
that is a necessary step thats calls uv_system_init().  This informs
tsc_sanitize_first_cpu() that we're on a platform with async TSC resets
as documented in

commit 341102c3ef29 ("x86/tsc: Add option that TSC on Socket 0 being non-zero is valid")

Fix by skipping the early tsc initialization on UV systems and let TSC
init tests take place later in tsc_init().

Fixes: cf7a63ef4e02 ("x86/tsc: Calibrate tsc only once") 
Signed-off-by: Mike Travis <mike.travis@hpe.com>
Suggested-by: Hedi Berriche <hedi.berriche@hpe.com>
Reviewed-by: Russ Anderson <rja@hpe.com>
Reviewed-by: Dimitri Sivanich <sivanich@hpe.com>
---
 arch/x86/kernel/tsc.c |    4 ++++
 1 file changed, 4 insertions(+)

--- linux.orig/arch/x86/kernel/tsc.c
+++ linux/arch/x86/kernel/tsc.c
@@ -26,6 +26,7 @@
 #include <asm/apic.h>
 #include <asm/intel-family.h>
 #include <asm/i8259.h>
+#include <asm/uv/uv.h>
 
 unsigned int __read_mostly cpu_khz;	/* TSC clocks / usec, not used here */
 EXPORT_SYMBOL(cpu_khz);
@@ -1433,6 +1434,9 @@ void __init tsc_early_init(void)
 {
 	if (!boot_cpu_has(X86_FEATURE_TSC))
 		return;
+	/* Don't change UV TSC multi-chassis synchronization */
+	if (is_early_uv_system())
+		return;
 	if (!determine_cpu_tsc_frequencies(true))
 		return;
 	loops_per_jiffy = get_loops_per_jiffy();

-- 

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

* [tip:x86/urgent] x86/platform/uv: Provide is_early_uv_system()
  2018-10-02 18:01 ` [PATCH 1/2] x86/platform/uv: Add is_early_uv_system check Mike Travis
@ 2018-10-02 19:33   ` tip-bot for Mike Travis
  0 siblings, 0 replies; 9+ messages in thread
From: tip-bot for Mike Travis @ 2018-10-02 19:33 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: rajvi.jingar, peterz, mingo, kstewart, gregkh, pombredanne, rja,
	hedi.berriche, bp, sivanich, russ.anderson, pasha.tatashin,
	gxm.linux.kernel, hpa, mike.travis, douly.fnst, tglx, len.brown,
	linux-kernel, dimitri.sivanich

Commit-ID:  20a8378aa9dd108a01cb0e695599f5257a885c4b
Gitweb:     https://git.kernel.org/tip/20a8378aa9dd108a01cb0e695599f5257a885c4b
Author:     Mike Travis <mike.travis@hpe.com>
AuthorDate: Tue, 2 Oct 2018 13:01:45 -0500
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Tue, 2 Oct 2018 21:29:16 +0200

x86/platform/uv: Provide is_early_uv_system()

Introduce is_early_uv_system() which uses efi.uv_systab to decide early
in the boot process whether the kernel runs on a UV system.

This is needed to skip other early setup/init code that might break
the UV platform if done too early such as before necessary ACPI tables
parsing takes place.

Suggested-by: Hedi Berriche <hedi.berriche@hpe.com>
Signed-off-by: Mike Travis <mike.travis@hpe.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Russ Anderson <rja@hpe.com>
Reviewed-by: Dimitri Sivanich <sivanich@hpe.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Russ Anderson <russ.anderson@hpe.com>
Cc: Dimitri Sivanich <dimitri.sivanich@hpe.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Kate Stewart <kstewart@linuxfoundation.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Philippe Ombredanne <pombredanne@nexb.com>
Cc: Pavel Tatashin <pasha.tatashin@oracle.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Len Brown <len.brown@intel.com>
Cc: Dou Liyang <douly.fnst@cn.fujitsu.com>
Cc: Xiaoming Gao <gxm.linux.kernel@gmail.com>
Cc: Rajvi Jingar <rajvi.jingar@intel.com>
Link: https://lkml.kernel.org/r/20181002180144.801700401@stormcage.americas.sgi.com

---
 arch/x86/include/asm/uv/uv.h | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/x86/include/asm/uv/uv.h b/arch/x86/include/asm/uv/uv.h
index a80c0673798f..e60c45fd3679 100644
--- a/arch/x86/include/asm/uv/uv.h
+++ b/arch/x86/include/asm/uv/uv.h
@@ -10,8 +10,13 @@ struct cpumask;
 struct mm_struct;
 
 #ifdef CONFIG_X86_UV
+#include <linux/efi.h>
 
 extern enum uv_system_type get_uv_system_type(void);
+static inline bool is_early_uv_system(void)
+{
+	return !((efi.uv_systab == EFI_INVALID_TABLE_ADDR) || !efi.uv_systab);
+}
 extern int is_uv_system(void);
 extern int is_uv_hubless(void);
 extern void uv_cpu_init(void);
@@ -23,6 +28,7 @@ extern const struct cpumask *uv_flush_tlb_others(const struct cpumask *cpumask,
 #else	/* X86_UV */
 
 static inline enum uv_system_type get_uv_system_type(void) { return UV_NONE; }
+static inline bool is_early_uv_system(void)	{ return 0; }
 static inline int is_uv_system(void)	{ return 0; }
 static inline int is_uv_hubless(void)	{ return 0; }
 static inline void uv_cpu_init(void)	{ }

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

* [tip:x86/urgent] x86/tsc: Fix UV TSC initialization
  2018-10-02 18:01 ` [PATCH 2/2] x86/tsc: Fix UV TSC initialization Mike Travis
@ 2018-10-02 19:34   ` tip-bot for Mike Travis
  0 siblings, 0 replies; 9+ messages in thread
From: tip-bot for Mike Travis @ 2018-10-02 19:34 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: mingo, peterz, rajvi.jingar, douly.fnst, mike.travis, len.brown,
	gxm.linux.kernel, pasha.tatashin, linux-kernel, kstewart,
	sivanich, russ.anderson, dimitri.sivanich, tglx, hpa,
	pombredanne, bp, hedi.berriche, gregkh, rja

Commit-ID:  2647c43c7f3ba4b752bfce261d53b16e2f5bc9e3
Gitweb:     https://git.kernel.org/tip/2647c43c7f3ba4b752bfce261d53b16e2f5bc9e3
Author:     Mike Travis <mike.travis@hpe.com>
AuthorDate: Tue, 2 Oct 2018 13:01:46 -0500
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Tue, 2 Oct 2018 21:29:16 +0200

x86/tsc: Fix UV TSC initialization

The recent rework of the TSC calibration code introduced a regression on UV
systems as it added a call to tsc_early_init() which initializes the TSC
ADJUST values before acpi_boot_table_init().  In the case of UV systems,
that is a necessary step that calls uv_system_init().  This informs
tsc_sanitize_first_cpu() that the kernel runs on a platform with async TSC
resets as documented in commit 341102c3ef29 ("x86/tsc: Add option that TSC
on Socket 0 being non-zero is valid")

Fix it by skipping the early tsc initialization on UV systems and let TSC
init tests take place later in tsc_init().

Fixes: cf7a63ef4e02 ("x86/tsc: Calibrate tsc only once")
Suggested-by: Hedi Berriche <hedi.berriche@hpe.com>
Signed-off-by: Mike Travis <mike.travis@hpe.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Russ Anderson <rja@hpe.com>
Reviewed-by: Dimitri Sivanich <sivanich@hpe.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Russ Anderson <russ.anderson@hpe.com>
Cc: Dimitri Sivanich <dimitri.sivanich@hpe.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Kate Stewart <kstewart@linuxfoundation.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Philippe Ombredanne <pombredanne@nexb.com>
Cc: Pavel Tatashin <pasha.tatashin@oracle.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Len Brown <len.brown@intel.com>
Cc: Dou Liyang <douly.fnst@cn.fujitsu.com>
Cc: Xiaoming Gao <gxm.linux.kernel@gmail.com>
Cc: Rajvi Jingar <rajvi.jingar@intel.com>
Link: https://lkml.kernel.org/r/20181002180144.923579706@stormcage.americas.sgi.com

---
 arch/x86/kernel/tsc.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
index 6490f618e096..b52bd2b6cdb4 100644
--- a/arch/x86/kernel/tsc.c
+++ b/arch/x86/kernel/tsc.c
@@ -26,6 +26,7 @@
 #include <asm/apic.h>
 #include <asm/intel-family.h>
 #include <asm/i8259.h>
+#include <asm/uv/uv.h>
 
 unsigned int __read_mostly cpu_khz;	/* TSC clocks / usec, not used here */
 EXPORT_SYMBOL(cpu_khz);
@@ -1433,6 +1434,9 @@ void __init tsc_early_init(void)
 {
 	if (!boot_cpu_has(X86_FEATURE_TSC))
 		return;
+	/* Don't change UV TSC multi-chassis synchronization */
+	if (is_early_uv_system())
+		return;
 	if (!determine_cpu_tsc_frequencies(true))
 		return;
 	loops_per_jiffy = get_loops_per_jiffy();

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

* Re: [PATCH 1/2] x86/platform/uv: Add is_early_uv_system check
  2018-10-02 14:20     ` Mike Travis
@ 2018-10-02 14:23       ` Thomas Gleixner
  0 siblings, 0 replies; 9+ messages in thread
From: Thomas Gleixner @ 2018-10-02 14:23 UTC (permalink / raw)
  To: Mike Travis
  Cc: Ingo Molnar, H. Peter Anvin, Hedi Berriche, Russ Anderson,
	Dimitri Sivanich, Borislav Petkov, Kate Stewart,
	Greg Kroah-Hartman, Philippe Ombredanne, Pavel Tatashin,
	Dave Hansen, Tom Lendacky, Ram Pai, Juergen Gross,
	Kirill A. Shutemov, Andi Kleen, Petr Tesarik, Sinan Kaya, x86,
	linux-kernel, Hedi Berriche

On Tue, 2 Oct 2018, Mike Travis wrote:
> On 10/1/2018 11:20 PM, Thomas Gleixner wrote:
> > On Mon, 1 Oct 2018, Mike Travis wrote:
> > 
> > > Introduce is_early_uv_system() which uses efi.uv_systab to decide early
> > > in the boot process whether we're on a UV system.
> > > 
> > > This is needed to skip other early setup/init code that might break UV
> > > platform if done too early such as before necessary ACPI tables parsing
> > > takes place.
> > > 
> > > Signed-off-by: Mike Travis <mike.travis@hpe.com>
> > > Signed-off-by: Hedi Berriche <hedi.berriche@hpe.com>
> > 
> > This SOB chain is wrong. I don't see how Hedi is involved in this. If this
> > wants to express that the patch was developed together please see
> > Documentation for the Co-developed-by tag.
> 
> Hedi suggested a "Suggested-by:" tag, would that suffice?

Sure, instead of the SOB. 

Thanks,

	tglx

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

* Re: [PATCH 1/2] x86/platform/uv: Add is_early_uv_system check
  2018-10-02  6:20   ` Thomas Gleixner
@ 2018-10-02 14:20     ` Mike Travis
  2018-10-02 14:23       ` Thomas Gleixner
  0 siblings, 1 reply; 9+ messages in thread
From: Mike Travis @ 2018-10-02 14:20 UTC (permalink / raw)
  To: Thomas Gleixner
  Cc: Ingo Molnar, H. Peter Anvin, Hedi Berriche, Russ Anderson,
	Dimitri Sivanich, Borislav Petkov, Kate Stewart,
	Greg Kroah-Hartman, Philippe Ombredanne, Pavel Tatashin,
	Dave Hansen, Tom Lendacky, Ram Pai, Juergen Gross,
	Kirill A. Shutemov, Andi Kleen, Petr Tesarik, Sinan Kaya, x86,
	linux-kernel, Hedi Berriche



On 10/1/2018 11:20 PM, Thomas Gleixner wrote:
> On Mon, 1 Oct 2018, Mike Travis wrote:
> 
>> Introduce is_early_uv_system() which uses efi.uv_systab to decide early
>> in the boot process whether we're on a UV system.
>>
>> This is needed to skip other early setup/init code that might break UV
>> platform if done too early such as before necessary ACPI tables parsing
>> takes place.
>>
>> Signed-off-by: Mike Travis <mike.travis@hpe.com>
>> Signed-off-by: Hedi Berriche <hedi.berriche@hpe.com>
> 
> This SOB chain is wrong. I don't see how Hedi is involved in this. If this
> wants to express that the patch was developed together please see
> Documentation for the Co-developed-by tag.

Hedi suggested a "Suggested-by:" tag, would that suffice?
> 
>> Reviewed-by: Russ Anderson <rja@hpe.com>
>> Reviewed-by: Dimitri Sivanich <sivanich@hpe.com>
>> ---
>>   arch/x86/include/asm/uv/uv.h |    6 ++++++
>>   1 file changed, 6 insertions(+)
>>
>> --- linux.orig/arch/x86/include/asm/uv/uv.h
>> +++ linux/arch/x86/include/asm/uv/uv.h
>> @@ -10,8 +10,13 @@ struct cpumask;
>>   struct mm_struct;
>>   
>>   #ifdef CONFIG_X86_UV
>> +#include <linux/efi.h>
>>   
>>   extern enum uv_system_type get_uv_system_type(void);
>> +static inline int is_early_uv_system(void)
> 
> Can you please make this bool?
> 
>> +{
>> +	return !((efi.uv_systab == EFI_INVALID_TABLE_ADDR) || !efi.uv_systab);
>> +}
> 
> Thanks,
> 
> 	tglx
> 

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

* Re: [PATCH 1/2] x86/platform/uv: Add is_early_uv_system check
  2018-10-02  1:22 ` [PATCH 1/2] x86/platform/uv: Add is_early_uv_system check Mike Travis
@ 2018-10-02  6:20   ` Thomas Gleixner
  2018-10-02 14:20     ` Mike Travis
  0 siblings, 1 reply; 9+ messages in thread
From: Thomas Gleixner @ 2018-10-02  6:20 UTC (permalink / raw)
  To: Mike Travis
  Cc: Ingo Molnar, H. Peter Anvin, Hedi Berriche, Russ Anderson,
	Dimitri Sivanich, Borislav Petkov, Kate Stewart,
	Greg Kroah-Hartman, Philippe Ombredanne, Pavel Tatashin,
	Dave Hansen, Tom Lendacky, Ram Pai, Juergen Gross,
	Kirill A. Shutemov, Andi Kleen, Petr Tesarik, Sinan Kaya, x86,
	linux-kernel, Hedi Berriche

On Mon, 1 Oct 2018, Mike Travis wrote:

> Introduce is_early_uv_system() which uses efi.uv_systab to decide early
> in the boot process whether we're on a UV system.
> 
> This is needed to skip other early setup/init code that might break UV
> platform if done too early such as before necessary ACPI tables parsing
> takes place.
> 
> Signed-off-by: Mike Travis <mike.travis@hpe.com>
> Signed-off-by: Hedi Berriche <hedi.berriche@hpe.com>

This SOB chain is wrong. I don't see how Hedi is involved in this. If this
wants to express that the patch was developed together please see
Documentation for the Co-developed-by tag.

> Reviewed-by: Russ Anderson <rja@hpe.com>
> Reviewed-by: Dimitri Sivanich <sivanich@hpe.com>
> ---
>  arch/x86/include/asm/uv/uv.h |    6 ++++++
>  1 file changed, 6 insertions(+)
> 
> --- linux.orig/arch/x86/include/asm/uv/uv.h
> +++ linux/arch/x86/include/asm/uv/uv.h
> @@ -10,8 +10,13 @@ struct cpumask;
>  struct mm_struct;
>  
>  #ifdef CONFIG_X86_UV
> +#include <linux/efi.h>
>  
>  extern enum uv_system_type get_uv_system_type(void);
> +static inline int is_early_uv_system(void)

Can you please make this bool?

> +{
> +	return !((efi.uv_systab == EFI_INVALID_TABLE_ADDR) || !efi.uv_systab);
> +}

Thanks,

	tglx

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

* [PATCH 1/2] x86/platform/uv: Add is_early_uv_system check
  2018-10-02  1:22 [PATCH 0/2] Fix community TSC ADJUST breakage causing TSC failure Mike Travis
@ 2018-10-02  1:22 ` Mike Travis
  2018-10-02  6:20   ` Thomas Gleixner
  0 siblings, 1 reply; 9+ messages in thread
From: Mike Travis @ 2018-10-02  1:22 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin
  Cc: Hedi Berriche, Russ Anderson, Dimitri Sivanich, Borislav Petkov,
	Kate Stewart, Greg Kroah-Hartman, Philippe Ombredanne,
	Pavel Tatashin, Dave Hansen, Tom Lendacky, Ram Pai,
	Juergen Gross, Kirill A. Shutemov, Andi Kleen, Petr Tesarik,
	Sinan Kaya, x86, linux-kernel, Hedi Berriche

[-- Attachment #1: add_is_early_uv_system --]
[-- Type: text/plain, Size: 1386 bytes --]

Introduce is_early_uv_system() which uses efi.uv_systab to decide early
in the boot process whether we're on a UV system.

This is needed to skip other early setup/init code that might break UV
platform if done too early such as before necessary ACPI tables parsing
takes place.

Signed-off-by: Mike Travis <mike.travis@hpe.com>
Signed-off-by: Hedi Berriche <hedi.berriche@hpe.com>
Reviewed-by: Russ Anderson <rja@hpe.com>
Reviewed-by: Dimitri Sivanich <sivanich@hpe.com>
---
 arch/x86/include/asm/uv/uv.h |    6 ++++++
 1 file changed, 6 insertions(+)

--- linux.orig/arch/x86/include/asm/uv/uv.h
+++ linux/arch/x86/include/asm/uv/uv.h
@@ -10,8 +10,13 @@ struct cpumask;
 struct mm_struct;
 
 #ifdef CONFIG_X86_UV
+#include <linux/efi.h>
 
 extern enum uv_system_type get_uv_system_type(void);
+static inline int is_early_uv_system(void)
+{
+	return !((efi.uv_systab == EFI_INVALID_TABLE_ADDR) || !efi.uv_systab);
+}
 extern int is_uv_system(void);
 extern int is_uv_hubless(void);
 extern void uv_cpu_init(void);
@@ -23,6 +28,7 @@ extern const struct cpumask *uv_flush_tl
 #else	/* X86_UV */
 
 static inline enum uv_system_type get_uv_system_type(void) { return UV_NONE; }
+static inline int is_early_uv_system(void)	{ return 0; }
 static inline int is_uv_system(void)	{ return 0; }
 static inline int is_uv_hubless(void)	{ return 0; }
 static inline void uv_cpu_init(void)	{ }

-- 

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

end of thread, other threads:[~2018-10-02 19:35 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-02 18:01 [PATCH 0/2] Fix TSC ADJUST breakage causing TSC failure Mike Travis
2018-10-02 18:01 ` [PATCH 1/2] x86/platform/uv: Add is_early_uv_system check Mike Travis
2018-10-02 19:33   ` [tip:x86/urgent] x86/platform/uv: Provide is_early_uv_system() tip-bot for Mike Travis
2018-10-02 18:01 ` [PATCH 2/2] x86/tsc: Fix UV TSC initialization Mike Travis
2018-10-02 19:34   ` [tip:x86/urgent] " tip-bot for Mike Travis
  -- strict thread matches above, loose matches on Subject: below --
2018-10-02  1:22 [PATCH 0/2] Fix community TSC ADJUST breakage causing TSC failure Mike Travis
2018-10-02  1:22 ` [PATCH 1/2] x86/platform/uv: Add is_early_uv_system check Mike Travis
2018-10-02  6:20   ` Thomas Gleixner
2018-10-02 14:20     ` Mike Travis
2018-10-02 14:23       ` Thomas Gleixner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).