diff mbox

[1/2] x86 smpboot: fix cpu_init_udelay=10000

Message ID de363cdbbcfcca1d22569683f7eb9873e0177251.1444968087.git.len.brown@intel.com (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Len Brown Oct. 16, 2015, 4:14 a.m. UTC
From: Len Brown <len.brown@intel.com>

For legacy machines cpu_init_udelay defaults to 10,000.
For modern machines it is set to 0.

The user should be able to set cpu_init_udelay to
any value on the cmdline, including 10,000.
Before this patch, that was seen as "unchanged from default"
and thus on a modern machine, the user request was ignored
and the delay was set to 0.

Signed-off-by: Len Brown <len.brown@intel.com>
---
 arch/x86/kernel/smpboot.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

Comments

shrybman Oct. 16, 2015, 7:34 p.m. UTC | #1
> From: Len Brown <len.brown@intel.com>
> 
> For legacy machines cpu_init_udelay defaults to 10,000.
> For modern machines it is set to 0.
> 
> The user should be able to set cpu_init_udelay to
> any value on the cmdline, including 10,000.
> Before this patch, that was seen as "unchanged from default"
> and thus on a modern machine, the user request was ignored
> and the delay was set to 0.
> 
> Signed-off-by: Len Brown <len.brown@intel.com>
> ---
>  arch/x86/kernel/smpboot.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
> index e0c198e..32267cc 100644
> --- a/arch/x86/kernel/smpboot.c
> +++ b/arch/x86/kernel/smpboot.c
> @@ -509,7 +509,7 @@ void __inquire_remote_apic(int apicid)
>   */
>  #define UDELAY_10MS_DEFAULT 10000
>  
> -static unsigned int init_udelay = UDELAY_10MS_DEFAULT;
> +static unsigned int init_udelay = INT_MAX;
>  
>  static int __init cpu_init_udelay(char *str)
>  {
> @@ -522,13 +522,16 @@ early_param("cpu_init_udelay", cpu_init_udelay);
>  static void __init smp_quirk_init_udelay(void)
>  {
>       /* if cmdline changed it from default, leave it alone */
> -     if (init_udelay != UDELAY_10MS_DEFAULT)
> +     if (init_udelay != INT_MAX)
>            return;
>  
>       /* if modern processor, use no delay */
>       if (((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) && (boot_cpu_data.x86 == 6)) ||
>           ((boot_cpu_data.x86_vendor == X86_VENDOR_AMD) && (boot_cpu_data.x86 >= 0xF)))
>            init_udelay = 0;
> +
> +     /* else, use legacy delay */
> +     init_udelay = UDELAY_10MS_DEFAULT;


Hi Len,


Is this really what you intended? The else is commented out so if init_udelay is quirked
to be 0 it will always be reset to UDELAY_10MS_DEFAULT. Also init_udelay is unsigned, so
would UINT_MAX be a better choice?


Shane

--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Len Brown Nov. 3, 2015, 5:16 a.m. UTC | #2
> Is this really what you intended? The else is commented out so if init_udelay is quirked
> to be 0 it will always be reset to UDELAY_10MS_DEFAULT. Also init_udelay is unsigned, so
> would UINT_MAX be a better choice?

Hi Shane,
Thanks for pointing out this flaw.
Seems it will make 4.3 10ms slower than 4.2 on these boxes, by default.
We'll send an incremental patch for 4.4.

Len Brown, Intel Open Source Technology Center
--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
shrybman Nov. 6, 2015, 2:39 a.m. UTC | #3
> > Is this really what you intended? The else is commented out so if init_udelay is quirked
> > to be 0 it will always be reset to UDELAY_10MS_DEFAULT. Also init_udelay is unsigned, so
> > would UINT_MAX be a better choice?
> 
> Hi Shane,
> Thanks for pointing out this flaw.
> Seems it will make 4.3 10ms slower than 4.2 on these boxes, by default.
> We'll send an incremental patch for 4.4.


Sounds good. Thanks Len.

--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
index e0c198e..32267cc 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -509,7 +509,7 @@  void __inquire_remote_apic(int apicid)
  */
 #define UDELAY_10MS_DEFAULT 10000
 
-static unsigned int init_udelay = UDELAY_10MS_DEFAULT;
+static unsigned int init_udelay = INT_MAX;
 
 static int __init cpu_init_udelay(char *str)
 {
@@ -522,13 +522,16 @@  early_param("cpu_init_udelay", cpu_init_udelay);
 static void __init smp_quirk_init_udelay(void)
 {
 	/* if cmdline changed it from default, leave it alone */
-	if (init_udelay != UDELAY_10MS_DEFAULT)
+	if (init_udelay != INT_MAX)
 		return;
 
 	/* if modern processor, use no delay */
 	if (((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) && (boot_cpu_data.x86 == 6)) ||
 	    ((boot_cpu_data.x86_vendor == X86_VENDOR_AMD) && (boot_cpu_data.x86 >= 0xF)))
 		init_udelay = 0;
+
+	/* else, use legacy delay */
+	init_udelay = UDELAY_10MS_DEFAULT;
 }
 
 /*