From: Cyrill Gorcunov <gorcunov@gmail.com>
To: Robert Richter <robert.richter@amd.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>, Ingo Molnar <mingo@elte.hu>,
Suresh Siddha <suresh.b.siddha@intel.com>,
LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 00/10] x86, xsave: some code cleanups and reworks
Date: Wed, 21 Jul 2010 23:14:33 +0400 [thread overview]
Message-ID: <20100721191433.GA24749@lenovo> (raw)
In-Reply-To: <20100721172428.GS26154@erda.amd.com>
On Wed, Jul 21, 2010 at 07:24:28PM +0200, Robert Richter wrote:
> On 21.07.10 13:17:18, Cyrill Gorcunov wrote:
> > On Wed, Jul 21, 2010 at 10:11:56AM -0700, H. Peter Anvin wrote:
> > > On 07/21/2010 10:01 AM, Cyrill Gorcunov wrote:
> > > >
> > > > Peter, also I think such tuning must be done at merge window time only,
> > > > just to not break other's patch queues.
> > > >
> > >
> > > Realistically it should be done right after the merge window for the
> > > *next* merge window.
> > >
> > > -hpa
> > >
> >
> > ok, which means Robert should use old conventional test at the moment
> > instead of introducing is_boot_cpu I suppose.
>
> Yes, I am just using:
>
> if (!smp_processor_id())
> ...
>
> Cyrill, if you like, I will leave it up to you to introduce the
> is_boot_cpu() macro.
>
> I still have patch 7/7 in my new posting in that removes the
> boot_cpu_id. If your patch comes soon this will be obsolete as all
> places will have the macro then.
>
> Thanks,
>
> -Robert
>
> --
> Advanced Micro Devices, Inc.
> Operating System Research Center
>
Robert, Peter, it might be something like the patch
below. I've compile-tested it only. On top of current
-tip with Robert's patch applied. If you find it convenient
we could queue it somewhere and give it a shot. Complains
are welcome. Initially I thought about kepping boot_cpu_id
as macro too (to be consistent with say IA-64) but not sure
so I drop this idea.
-- Cyrill
---
x86: Introduce is_boot_cpu() helper
This allow us to make clear the code snippets where we
test for cpu being bootstrap one instead of open coded test
with zero.
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
CC: Robert Richter <robert.richter@amd.com>
CC: "H. Peter Anvin" <hpa@zytor.com>
---
arch/x86/include/asm/apb_timer.h | 2 ++
arch/x86/include/asm/cpu.h | 1 -
arch/x86/include/asm/smp.h | 2 ++
arch/x86/kernel/apb_timer.c | 2 +-
arch/x86/kernel/apic/apic.c | 6 +++---
arch/x86/kernel/apic/nmi.c | 2 +-
arch/x86/kernel/apm_32.c | 2 +-
arch/x86/kernel/cpu/amd.c | 2 +-
arch/x86/kernel/cpu/common.c | 2 +-
arch/x86/kernel/cpu/intel.c | 2 +-
arch/x86/kernel/i387.c | 2 +-
arch/x86/kernel/setup_percpu.c | 2 +-
arch/x86/kernel/smpboot.c | 4 ++--
arch/x86/kernel/traps.c | 2 +-
arch/x86/xen/smp.c | 4 ++--
arch/x86/xen/suspend.c | 2 +-
16 files changed, 21 insertions(+), 18 deletions(-)
Index: linux-2.6.git/arch/x86/include/asm/apb_timer.h
=====================================================================
--- linux-2.6.git.orig/arch/x86/include/asm/apb_timer.h
+++ linux-2.6.git/arch/x86/include/asm/apb_timer.h
@@ -59,6 +59,8 @@ extern struct sfi_timer_table_entry *sfi
extern void sfi_free_mtmr(struct sfi_timer_table_entry *mtmr);
extern int sfi_mtimer_num;
+#define is_boot_cpu(cpu) ((cpu) == 0)
+
#else /* CONFIG_APB_TIMER */
static inline unsigned long apbt_quick_calibrate(void) {return 0; }
Index: linux-2.6.git/arch/x86/include/asm/cpu.h
=====================================================================
--- linux-2.6.git.orig/arch/x86/include/asm/cpu.h
+++ linux-2.6.git/arch/x86/include/asm/cpu.h
@@ -32,5 +32,4 @@ extern void arch_unregister_cpu(int);
DECLARE_PER_CPU(int, cpu_state);
-
#endif /* _ASM_X86_CPU_H */
Index: linux-2.6.git/arch/x86/include/asm/smp.h
=====================================================================
--- linux-2.6.git.orig/arch/x86/include/asm/smp.h
+++ linux-2.6.git/arch/x86/include/asm/smp.h
@@ -203,5 +203,7 @@ extern int hard_smp_processor_id(void);
#endif /* CONFIG_X86_LOCAL_APIC */
+#define is_boot_cpu(cpu) ((cpu) == 0)
+
#endif /* __ASSEMBLY__ */
#endif /* _ASM_X86_SMP_H */
Index: linux-2.6.git/arch/x86/kernel/apb_timer.c
=====================================================================
--- linux-2.6.git.orig/arch/x86/kernel/apb_timer.c
+++ linux-2.6.git/arch/x86/kernel/apb_timer.c
@@ -343,7 +343,7 @@ void apbt_setup_secondary_clock(void)
/* Don't register boot CPU clockevent */
cpu = smp_processor_id();
- if (!cpu)
+ if (is_boot_cpu(cpu))
return;
/*
* We need to calculate the scaled math multiplication factor for
Index: linux-2.6.git/arch/x86/kernel/apic/apic.c
=====================================================================
--- linux-2.6.git.orig/arch/x86/kernel/apic/apic.c
+++ linux-2.6.git/arch/x86/kernel/apic/apic.c
@@ -1293,7 +1293,7 @@ void __cpuinit setup_local_APIC(void)
* TODO: set up through-local-APIC from through-I/O-APIC? --macro
*/
value = apic_read(APIC_LVT0) & APIC_LVT_MASKED;
- if (!smp_processor_id() && (pic_mode || !value)) {
+ if (is_boot_cpu(smp_processor_id()) && (pic_mode || !value)) {
value = APIC_DM_EXTINT;
apic_printk(APIC_VERBOSE, "enabled ExtINT on CPU#%d\n",
smp_processor_id());
@@ -1307,7 +1307,7 @@ void __cpuinit setup_local_APIC(void)
/*
* only the BP should see the LINT1 NMI signal, obviously.
*/
- if (!smp_processor_id())
+ if (is_boot_cpu(smp_processor_id()))
value = APIC_DM_NMI;
else
value = APIC_DM_NMI | APIC_LVT_MASKED;
@@ -1319,7 +1319,7 @@ void __cpuinit setup_local_APIC(void)
#ifdef CONFIG_X86_MCE_INTEL
/* Recheck CMCI information after local APIC is up on CPU #0 */
- if (smp_processor_id() == 0)
+ if (is_boot_cpu(smp_processor_id()))
cmci_recheck();
#endif
}
Index: linux-2.6.git/arch/x86/kernel/apic/nmi.c
=====================================================================
--- linux-2.6.git.orig/arch/x86/kernel/apic/nmi.c
+++ linux-2.6.git/arch/x86/kernel/apic/nmi.c
@@ -316,7 +316,7 @@ void setup_apic_nmi_watchdog(void *unuse
/* cheap hack to support suspend/resume */
/* if cpu0 is not active neither should the other cpus */
- if (smp_processor_id() != 0 && atomic_read(&nmi_active) <= 0)
+ if (!is_boot_cpu(smp_processor_id()) && atomic_read(&nmi_active) <= 0)
return;
switch (nmi_watchdog) {
Index: linux-2.6.git/arch/x86/kernel/apm_32.c
=====================================================================
--- linux-2.6.git.orig/arch/x86/kernel/apm_32.c
+++ linux-2.6.git/arch/x86/kernel/apm_32.c
@@ -1746,7 +1746,7 @@ static int apm(void *unused)
* Method suggested by Ingo Molnar.
*/
set_cpus_allowed_ptr(current, cpumask_of(0));
- BUG_ON(smp_processor_id() != 0);
+ BUG_ON(!is_boot_cpu(smp_processor_id());
if (apm_info.connection_version == 0) {
apm_info.connection_version = apm_info.bios.version;
Index: linux-2.6.git/arch/x86/kernel/cpu/amd.c
=====================================================================
--- linux-2.6.git.orig/arch/x86/kernel/cpu/amd.c
+++ linux-2.6.git/arch/x86/kernel/cpu/amd.c
@@ -148,7 +148,7 @@ static void __cpuinit amd_k7_smp_check(s
{
#ifdef CONFIG_SMP
/* calling is from identify_secondary_cpu() ? */
- if (!c->cpu_index)
+ if (is_boot_cpu(c->cpu_index))
return;
/*
Index: linux-2.6.git/arch/x86/kernel/cpu/common.c
=====================================================================
--- linux-2.6.git.orig/arch/x86/kernel/cpu/common.c
+++ linux-2.6.git/arch/x86/kernel/cpu/common.c
@@ -1273,7 +1273,7 @@ void __cpuinit cpu_init(void)
/*
* Boot processor to setup the FP and extended state context info.
*/
- if (smp_processor_id() == boot_cpu_id)
+ if (is_boot_cpu(smp_processor_id())
init_thread_xstate();
xsave_init();
Index: linux-2.6.git/arch/x86/kernel/cpu/intel.c
=====================================================================
--- linux-2.6.git.orig/arch/x86/kernel/cpu/intel.c
+++ linux-2.6.git/arch/x86/kernel/cpu/intel.c
@@ -169,7 +169,7 @@ static void __cpuinit intel_smp_check(st
{
#ifdef CONFIG_SMP
/* calling is from identify_secondary_cpu() ? */
- if (!c->cpu_index)
+ if (is_boot_cpu(c->cpu_index))
return;
/*
Index: linux-2.6.git/arch/x86/kernel/i387.c
=====================================================================
--- linux-2.6.git.orig/arch/x86/kernel/i387.c
+++ linux-2.6.git/arch/x86/kernel/i387.c
@@ -96,7 +96,7 @@ void __cpuinit fpu_init(void)
/*
* Boot processor to setup the FP and extended state context info.
*/
- if (!smp_processor_id())
+ if (is_boot_cpu(smp_processor_id()))
init_thread_xstate();
xsave_init();
Index: linux-2.6.git/arch/x86/kernel/setup_percpu.c
=====================================================================
--- linux-2.6.git.orig/arch/x86/kernel/setup_percpu.c
+++ linux-2.6.git/arch/x86/kernel/setup_percpu.c
@@ -244,7 +244,7 @@ void __init setup_per_cpu_areas(void)
* Up to this point, the boot CPU has been using .init.data
* area. Reload any changed state for the boot CPU.
*/
- if (!cpu)
+ if (is_boot_cpu(cpu))
switch_to_new_gdt(cpu);
}
Index: linux-2.6.git/arch/x86/kernel/smpboot.c
=====================================================================
--- linux-2.6.git.orig/arch/x86/kernel/smpboot.c
+++ linux-2.6.git/arch/x86/kernel/smpboot.c
@@ -369,7 +369,7 @@ void __cpuinit smp_store_cpu_info(int id
copy_cpuinfo_x86(c, &boot_cpu_data);
c->cpu_index = id;
- if (id != 0)
+ if (!is_boot_cpu(id))
identify_secondary_cpu(c);
}
@@ -1319,7 +1319,7 @@ int native_cpu_disable(void)
* interrupts only being able to be serviced by the BSP.
* Especially so if we're not using an IOAPIC -zwane
*/
- if (cpu == 0)
+ if (is_boot_cpu(cpu))
return -EBUSY;
if (nmi_watchdog == NMI_LOCAL_APIC)
Index: linux-2.6.git/arch/x86/kernel/traps.c
=====================================================================
--- linux-2.6.git.orig/arch/x86/kernel/traps.c
+++ linux-2.6.git/arch/x86/kernel/traps.c
@@ -385,7 +385,7 @@ static notrace __kprobes void default_do
cpu = smp_processor_id();
/* Only the BSP gets external NMIs from the system. */
- if (!cpu)
+ if (is_boot_cpu(cpu))
reason = get_nmi_reason();
if (!(reason & 0xc0)) {
Index: linux-2.6.git/arch/x86/xen/smp.c
=====================================================================
--- linux-2.6.git.orig/arch/x86/xen/smp.c
+++ linux-2.6.git/arch/x86/xen/smp.c
@@ -167,7 +167,7 @@ static void __init xen_fill_possible_map
static void __init xen_smp_prepare_boot_cpu(void)
{
- BUG_ON(smp_processor_id() != 0);
+ BUG_ON(!is_boot_cpu(smp_processor_id()));
native_smp_prepare_boot_cpu();
/* We've switched to the "real" per-cpu gdt, so make sure the
@@ -336,7 +336,7 @@ static void xen_smp_cpus_done(unsigned i
static int xen_cpu_disable(void)
{
unsigned int cpu = smp_processor_id();
- if (cpu == 0)
+ if (is_boot_cpu(cpu))
return -EBUSY;
cpu_disable_common();
Index: linux-2.6.git/arch/x86/xen/suspend.c
=====================================================================
--- linux-2.6.git.orig/arch/x86/xen/suspend.c
+++ linux-2.6.git/arch/x86/xen/suspend.c
@@ -52,7 +52,7 @@ static void xen_vcpu_notify_restore(void
unsigned long reason = (unsigned long)data;
/* Boot processor notified via generic timekeeping_resume() */
- if ( smp_processor_id() == 0)
+ if (is_boot_cpu(smp_processor_id()))
return;
clockevents_notify(reason, NULL);
next prev parent reply other threads:[~2010-07-21 19:14 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-20 18:50 [PATCH 00/10] x86, xsave: some code cleanups and reworks Robert Richter
2010-07-20 18:50 ` [PATCH 01/10] x86, xsave: do not include asm/i387.h in asm/xsave.h Robert Richter
2010-07-20 21:46 ` Suresh Siddha
2010-07-20 18:50 ` [PATCH 02/10] x86, xsave: 32/64 bit boot cpu check unification in initialization Robert Richter
2010-07-20 21:47 ` Suresh Siddha
2010-07-21 0:40 ` [tip:x86/xsave] " tip-bot for Robert Richter
2010-07-20 18:50 ` [PATCH 03/10] x86: removing boot_cpu_id variable Robert Richter
2010-07-20 18:50 ` [PATCH 04/10] x86, xsave: moving boot cpu initialization to xsave_init() Robert Richter
2010-07-20 21:48 ` Suresh Siddha
2010-07-21 0:40 ` [tip:x86/xsave] x86, xsave: Move " tip-bot for Robert Richter
2010-07-20 18:50 ` [PATCH 05/10] x86, xsave: make xsave_cntxt_init() static Robert Richter
2010-07-20 22:20 ` Suresh Siddha
2010-07-21 13:48 ` Robert Richter
2010-07-21 16:15 ` H. Peter Anvin
2010-07-20 18:50 ` [PATCH 06/10] x86, xsave: do not initialize xsave in fpu_init() Robert Richter
2010-07-20 22:21 ` Suresh Siddha
2010-07-20 18:50 ` [PATCH 07/10] x86, xsave: reduce cpu_has_xsave checks Robert Richter
2010-07-20 22:22 ` Suresh Siddha
2010-07-20 18:50 ` [PATCH 08/10] x86, xsave: introduce xstate enable functions Robert Richter
2010-07-20 22:23 ` Suresh Siddha
2010-07-20 18:50 ` [PATCH 09/10] x86, xsave: check cpuid level for XSTATE_CPUID (0x0d) Robert Richter
2010-07-20 22:26 ` Suresh Siddha
2010-07-20 22:45 ` H. Peter Anvin
2010-07-20 22:51 ` H. Peter Anvin
2010-07-20 18:50 ` [PATCH 10/10] x86, xsave: make init_xstate_buf static Robert Richter
2010-07-20 22:26 ` Suresh Siddha
2010-07-20 19:27 ` [PATCH 00/10] x86, xsave: some code cleanups and reworks Cyrill Gorcunov
2010-07-20 19:46 ` Robert Richter
2010-07-20 20:05 ` Suresh Siddha
2010-07-20 20:07 ` Cyrill Gorcunov
2010-07-20 20:17 ` Cyrill Gorcunov
2010-07-21 16:16 ` Robert Richter
2010-07-21 16:29 ` Cyrill Gorcunov
2010-07-21 16:32 ` H. Peter Anvin
2010-07-21 16:52 ` Cyrill Gorcunov
2010-07-21 17:01 ` Cyrill Gorcunov
2010-07-21 17:11 ` H. Peter Anvin
2010-07-21 17:17 ` Cyrill Gorcunov
2010-07-21 17:24 ` Robert Richter
2010-07-21 17:37 ` Cyrill Gorcunov
2010-07-21 19:14 ` Cyrill Gorcunov [this message]
2010-07-20 20:22 ` H. Peter Anvin
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=20100721191433.GA24749@lenovo \
--to=gorcunov@gmail.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=robert.richter@amd.com \
--cc=suresh.b.siddha@intel.com \
/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.