From: Alex Chiang <achiang@hp.com>
To: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org
Cc: linux-acpi@vger.kernel.org, Alex Chiang <achiang@hp.com>,
Ingo Molnar <mingo@redhat.com>,
Thomas Gleixner <tglx@linutronix.de>,
hpa@zytor.com
Subject: [PATCH 11/14] x86: Populate cpu_enabled_map
Date: Mon, 14 Jul 2008 20:56:56 -0600 [thread overview]
Message-ID: <20080715025656.GC15452@ldl.fc.hp.com> (raw)
In-Reply-To: <20080715023344.2528.1836.stgit@blender.achiang>
Populate the cpu_enabled_map correctly.
Note that this patch does not actually make any decisions based
on the contents of the map.
However, as the map is presented via sysfs in:
/sys/devices/system/cpu/
It should be populated correctly.
There will be a user-visible change under the above directory.
cpuN/ entries for firmware-disabled CPUs will now appear, whereas
before, they did not due to a check against ACPI_MADT_ENABLED.
The cpuN/ entries will be empty, and the online file in the
above directory will reflect which CPUs are actually schedulable.
Signed-off-by: Alex Chiang <achiang@hp.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: H. Peter Anvin <hpa@zytor.com>
---
arch/x86/kernel/acpi/boot.c | 7 +++++--
arch/x86/kernel/apic_32.c | 1 +
arch/x86/kernel/apic_64.c | 1 +
arch/x86/kernel/smpboot.c | 2 ++
arch/x86/mach-voyager/voyager_smp.c | 2 ++
arch/x86/xen/smp.c | 1 +
6 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index 33c5216..c6dc5da 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -559,8 +559,7 @@ static int __cpuinit _acpi_map_lsapic(acpi_handle handle, int *pcpu)
lapic = (struct acpi_madt_local_apic *)obj->buffer.pointer;
- if (lapic->header.type != ACPI_MADT_TYPE_LOCAL_APIC ||
- !(lapic->lapic_flags & ACPI_MADT_ENABLED)) {
+ if (lapic->header.type != ACPI_MADT_TYPE_LOCAL_APIC) {
kfree(buffer.pointer);
return -EINVAL;
}
@@ -584,6 +583,9 @@ static int __cpuinit _acpi_map_lsapic(acpi_handle handle, int *pcpu)
return -EINVAL;
}
+ if (lapic->lapic_flags & ACPI_MADT_ENABLED)
+ cpu_set(cpu, cpu_enabled_map);
+
cpu = first_cpu(new_map);
*pcpu = cpu;
@@ -601,6 +603,7 @@ int acpi_unmap_lsapic(int cpu)
{
per_cpu(x86_cpu_to_apicid, cpu) = -1;
cpu_clear(cpu, cpu_present_map);
+ cpu_clear(cpu, cpu_enabled_map);
num_processors--;
return (0);
diff --git a/arch/x86/kernel/apic_32.c b/arch/x86/kernel/apic_32.c
index 4b99b1b..787699e 100644
--- a/arch/x86/kernel/apic_32.c
+++ b/arch/x86/kernel/apic_32.c
@@ -1547,6 +1547,7 @@ void __cpuinit generic_processor_info(int apicid, int version)
#endif
cpu_set(cpu, cpu_possible_map);
cpu_set(cpu, cpu_present_map);
+ cpu_set(cpu, cpu_enabled_map);
}
/*
diff --git a/arch/x86/kernel/apic_64.c b/arch/x86/kernel/apic_64.c
index 0633cfd..ad21476 100644
--- a/arch/x86/kernel/apic_64.c
+++ b/arch/x86/kernel/apic_64.c
@@ -1104,6 +1104,7 @@ void __cpuinit generic_processor_info(int apicid, int version)
cpu_set(cpu, cpu_possible_map);
cpu_set(cpu, cpu_present_map);
+ cpu_set(cpu, cpu_enabled_map);
}
/*
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
index 3e1cece..3d378cf 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -997,6 +997,7 @@ do_rest:
cpu_clear(cpu, cpu_callout_map); /* was set by do_boot_cpu() */
cpu_clear(cpu, cpu_initialized); /* was set by cpu_init() */
cpu_clear(cpu, cpu_present_map);
+ cpu_clear(cpu, cpu_enabled_map);
per_cpu(x86_cpu_to_apicid, cpu) = BAD_APICID;
}
@@ -1086,6 +1087,7 @@ int __cpuinit native_cpu_up(unsigned int cpu)
static __init void disable_smp(void)
{
cpu_present_map = cpumask_of_cpu(0);
+ cpu_enabled_map = cpumask_of_cpu(0);
cpu_possible_map = cpumask_of_cpu(0);
#ifdef CONFIG_X86_32
smpboot_clear_io_apic_irqs();
diff --git a/arch/x86/mach-voyager/voyager_smp.c b/arch/x86/mach-voyager/voyager_smp.c
index 8acbf0c..8dee2b8 100644
--- a/arch/x86/mach-voyager/voyager_smp.c
+++ b/arch/x86/mach-voyager/voyager_smp.c
@@ -606,6 +606,7 @@ static void __init do_boot_cpu(__u8 cpu)
wmb();
cpu_set(cpu, cpu_callout_map);
cpu_set(cpu, cpu_present_map);
+ cpu_set(cpu, cpu_enabled_map);
} else {
printk("CPU%d FAILED TO BOOT: ", cpu);
if (*
@@ -1825,6 +1826,7 @@ static void __cpuinit voyager_smp_prepare_boot_cpu(void)
cpu_set(smp_processor_id(), cpu_callout_map);
cpu_set(smp_processor_id(), cpu_possible_map);
cpu_set(smp_processor_id(), cpu_present_map);
+ cpu_set(smp_processor_id(), cpu_enabled_map);
}
static int __cpuinit voyager_cpu_up(unsigned int cpu)
diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
index 94e6900..bc0a53d 100644
--- a/arch/x86/xen/smp.c
+++ b/arch/x86/xen/smp.c
@@ -209,6 +209,7 @@ void __init xen_smp_prepare_cpus(unsigned int max_cpus)
panic("failed fork for CPU %d", cpu);
cpu_set(cpu, cpu_present_map);
+ cpu_set(cpu, cpu_enabled_map);
}
//init_xenbus_allowed_cpumask();
next prev parent reply other threads:[~2008-07-15 2:56 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-15 2:33 [PATCH 00/14] Introduce cpu_enabled_map and friends Alex Chiang
2008-07-15 2:33 ` [PATCH 01/14] " Alex Chiang
2008-07-15 3:15 ` Matthew Wilcox
2008-07-15 10:03 ` Andi Kleen
2008-07-15 10:21 ` Russell King
2008-07-15 17:57 ` Alex Chiang
2008-07-15 18:16 ` Matthew Wilcox
2008-07-15 18:48 ` Russell King
2008-07-15 19:15 ` Alex Chiang
2008-07-18 21:44 ` Russell King
2008-07-18 23:08 ` Alex Chiang
2008-07-16 1:11 ` Alex Chiang
2008-07-16 1:11 ` Alex Chiang
2008-07-15 2:33 ` [PATCH 02/14] [M32R] Populate cpu_enabled_map Alex Chiang
2008-07-15 2:33 ` [PATCH 03/14] [ALPHA] " Alex Chiang
2008-07-15 2:34 ` [PATCH 04/14] [ARM] " Alex Chiang
2008-07-15 2:34 ` [PATCH 05/14] [MIPS] " Alex Chiang
2008-07-15 2:34 ` [PATCH 06/14] [PARISC] " Alex Chiang
2008-07-15 2:34 ` [PATCH 07/14] [POWERPC] " Alex Chiang
2008-07-15 5:51 ` Benjamin Herrenschmidt
2008-07-16 1:04 ` Alex Chiang
2008-07-15 2:34 ` [PATCH 08/14] [S390] " Alex Chiang
2008-07-15 2:34 ` [PATCH 09/14] [SH] " Alex Chiang
2008-07-15 2:34 ` [PATCH 12/14] [IA64] Populate and use cpu_enabled_map Alex Chiang
2008-07-15 2:34 ` [PATCH 13/14] [IA64] Avoid overflowing ia64_cpu_to_sapicid in acpi_map_lsapic() Alex Chiang
2008-07-15 2:34 ` [PATCH 14/14] ACPI: Provide /sys/devices/system/cpu/cpuN/deconfigure Alex Chiang
2008-07-15 17:06 ` Andi Kleen
2008-07-15 18:40 ` Alex Chiang
2008-07-15 2:56 ` Alex Chiang [this message]
2008-07-18 20:00 ` [PATCH 11/14] x86: Populate cpu_enabled_map H. Peter Anvin
2008-07-18 20:00 ` H. Peter Anvin
2008-07-18 23:06 ` Alex Chiang
2008-07-15 20:10 ` [PATCH 00/14] Introduce cpu_enabled_map and friends Luck, Tony
2008-07-15 20:10 ` Luck, Tony
2008-07-15 23:54 ` Alex Chiang
2008-07-15 23:54 ` Alex Chiang
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=20080715025656.GC15452@ldl.fc.hp.com \
--to=achiang@hp.com \
--cc=hpa@zytor.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
/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.