From: Steffen Persvold <sp@numascale.com>
To: Ingo Molnar <mingo@redhat.com>
Cc: Suresh Siddha <suresh.b.siddha@intel.com>,
Thomas Gleixner <tglx@linutronix.de>,
"H. Peter Anvin" <hpa@zytor.com>,
Daniel J Blueman <daniel@numascale-asia.com>,
Yinghai Lu <yinghai@kernel.org>, Jack Steiner <steiner@sgi.com>,
linux-kernel@vger.kernel.org, x86@kernel.org
Subject: Re: [PATCH REPOST] Added separate apic_id_valid() functions for selected apic drivers.
Date: Tue, 20 Mar 2012 11:41:44 +0100 [thread overview]
Message-ID: <4F685EE8.5020708@numascale.com> (raw)
In-Reply-To: <1331925935-13372-1-git-send-email-sp@numascale.com>
On 3/16/2012 20:25, Steffen Persvold wrote:
> As suggested by Suresh Siddha<suresh.b.siddha@intel.com> and Yinghai Lu<yinghai@kernel.org> :
>
> For x2apic pre-enabled systems, apic driver is set already early through early_acpi_boot_init()/early_acpi_process_madt()/acpi_parse_madt()/default_acpi_madt_oem_check() so that apic_id_valid() checking will be sufficient during MADT and SRAT prasing. For non- x2apic pre-enabled systems, all apic ids should be less than 255.
>
> This allows us to substitute the checks in arch/x86/kernel/acpi/boot.c::acpi_parse_x2apic() and arch/x86/mm/srat.c::acpi_numa_x2apic_affinity_init() with apic->apic_id_valid().
>
> In addition we can avoid feigning the x2apic cpu feature in the NumaChip apic code.
>
> The following apic drivers have separate apic_id_valid() functions which will accept x2apic type IDs :
>
> x2apic_phys
> x2apic_cluster
> x2apic_uv_x
> apic_numachip
>
> Signed-off-by: Steffen Persvold<sp@numascale.com>
Ingo, any comments on this approach ? It should cover both cases as
suggested by Suresh and Yinghai.
Kind regards,
--
Steffen Persvold, Chief Architect NumaChip
Numascale AS - www.numascale.com
Tel: +47 92 49 25 54 Skype: spersvold
> ---
> arch/x86/include/asm/apic.h | 2 +-
> arch/x86/include/asm/x2apic.h | 5 +++++
> arch/x86/kernel/acpi/boot.c | 2 +-
> arch/x86/kernel/apic/apic_numachip.c | 3 +--
> arch/x86/kernel/apic/x2apic_cluster.c | 2 +-
> arch/x86/kernel/apic/x2apic_phys.c | 2 +-
> arch/x86/kernel/apic/x2apic_uv_x.c | 7 ++++++-
> arch/x86/mm/srat.c | 2 +-
> 8 files changed, 17 insertions(+), 8 deletions(-)
>
> diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h
> index a9371c9..d3eaac4 100644
> --- a/arch/x86/include/asm/apic.h
> +++ b/arch/x86/include/asm/apic.h
> @@ -535,7 +535,7 @@ static inline unsigned int read_apic_id(void)
>
> static inline int default_apic_id_valid(int apicid)
> {
> - return x2apic_mode || (apicid< 255);
> + return (apicid< 255);
> }
>
> extern void default_setup_apic_routing(void);
> diff --git a/arch/x86/include/asm/x2apic.h b/arch/x86/include/asm/x2apic.h
> index 6bf5b8e..92e54ab 100644
> --- a/arch/x86/include/asm/x2apic.h
> +++ b/arch/x86/include/asm/x2apic.h
> @@ -18,6 +18,11 @@ static const struct cpumask *x2apic_target_cpus(void)
> return cpu_online_mask;
> }
>
> +static int x2apic_apic_id_valid(int apicid)
> +{
> + return 1;
> +}
> +
> static int x2apic_apic_id_registered(void)
> {
> return 1;
> diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
> index ce664f3..4b5059c 100644
> --- a/arch/x86/kernel/acpi/boot.c
> +++ b/arch/x86/kernel/acpi/boot.c
> @@ -239,7 +239,7 @@ acpi_parse_x2apic(struct acpi_subtable_header *header, const unsigned long end)
> * to not preallocating memory for all NR_CPUS
> * when we use CPU hotplug.
> */
> - if (!cpu_has_x2apic&& (apic_id>= 0xff)&& enabled)
> + if (!apic->apic_id_valid(apic_id)&& enabled)
> printk(KERN_WARNING PREFIX "x2apic entry ignored\n");
> else
> acpi_register_lapic(apic_id, enabled);
> diff --git a/arch/x86/kernel/apic/apic_numachip.c b/arch/x86/kernel/apic/apic_numachip.c
> index d9ea5f3..899803e 100644
> --- a/arch/x86/kernel/apic/apic_numachip.c
> +++ b/arch/x86/kernel/apic/apic_numachip.c
> @@ -229,11 +229,10 @@ static int __init numachip_system_init(void)
> }
> early_initcall(numachip_system_init);
>
> -static int __cpuinit numachip_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
> +static int numachip_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
> {
> if (!strncmp(oem_id, "NUMASC", 6)) {
> numachip_system = 1;
> - setup_force_cpu_cap(X86_FEATURE_X2APIC);
> return 1;
> }
>
> diff --git a/arch/x86/kernel/apic/x2apic_cluster.c b/arch/x86/kernel/apic/x2apic_cluster.c
> index 9193713..48f3103 100644
> --- a/arch/x86/kernel/apic/x2apic_cluster.c
> +++ b/arch/x86/kernel/apic/x2apic_cluster.c
> @@ -213,7 +213,7 @@ static struct apic apic_x2apic_cluster = {
> .name = "cluster x2apic",
> .probe = x2apic_cluster_probe,
> .acpi_madt_oem_check = x2apic_acpi_madt_oem_check,
> - .apic_id_valid = default_apic_id_valid,
> + .apic_id_valid = x2apic_apic_id_valid,
> .apic_id_registered = x2apic_apic_id_registered,
>
> .irq_delivery_mode = dest_LowestPrio,
> diff --git a/arch/x86/kernel/apic/x2apic_phys.c b/arch/x86/kernel/apic/x2apic_phys.c
> index bcd1db6..8a778db 100644
> --- a/arch/x86/kernel/apic/x2apic_phys.c
> +++ b/arch/x86/kernel/apic/x2apic_phys.c
> @@ -119,7 +119,7 @@ static struct apic apic_x2apic_phys = {
> .name = "physical x2apic",
> .probe = x2apic_phys_probe,
> .acpi_madt_oem_check = x2apic_acpi_madt_oem_check,
> - .apic_id_valid = default_apic_id_valid,
> + .apic_id_valid = x2apic_apic_id_valid,
> .apic_id_registered = x2apic_apic_id_registered,
>
> .irq_delivery_mode = dest_Fixed,
> diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c
> index fc47714..87bfa69 100644
> --- a/arch/x86/kernel/apic/x2apic_uv_x.c
> +++ b/arch/x86/kernel/apic/x2apic_uv_x.c
> @@ -266,6 +266,11 @@ static void uv_send_IPI_all(int vector)
> uv_send_IPI_mask(cpu_online_mask, vector);
> }
>
> +static int uv_apic_id_valid(int apicid)
> +{
> + return 1;
> +}
> +
> static int uv_apic_id_registered(void)
> {
> return 1;
> @@ -351,7 +356,7 @@ static struct apic __refdata apic_x2apic_uv_x = {
> .name = "UV large system",
> .probe = uv_probe,
> .acpi_madt_oem_check = uv_acpi_madt_oem_check,
> - .apic_id_valid = default_apic_id_valid,
> + .apic_id_valid = uv_apic_id_valid,
> .apic_id_registered = uv_apic_id_registered,
>
> .irq_delivery_mode = dest_Fixed,
> diff --git a/arch/x86/mm/srat.c b/arch/x86/mm/srat.c
> index 1c1c4f4..efb5b4b 100644
> --- a/arch/x86/mm/srat.c
> +++ b/arch/x86/mm/srat.c
> @@ -70,7 +70,7 @@ acpi_numa_x2apic_affinity_init(struct acpi_srat_x2apic_cpu_affinity *pa)
> return;
> pxm = pa->proximity_domain;
> apic_id = pa->apic_id;
> - if (!cpu_has_x2apic&& (apic_id>= 0xff)) {
> + if (!apic->apic_id_valid(apic_id)) {
> printk(KERN_INFO "SRAT: PXM %u -> X2APIC 0x%04x ignored\n",
> pxm, apic_id);
> return;
next prev parent reply other threads:[~2012-03-20 10:42 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-13 9:29 x2APIC and many-APIC systems Daniel J Blueman
2012-03-13 22:58 ` Yinghai Lu
2012-03-13 23:16 ` Suresh Siddha
2012-03-14 7:17 ` [PATCH] Move APIC ID validity check into platform APIC code Daniel J Blueman
2012-03-14 11:27 ` [tip:x86/platform] x86/platform: " tip-bot for Daniel J Blueman
2012-03-14 17:58 ` [PATCH] " Yinghai Lu
2012-03-14 20:18 ` Steffen Persvold
2012-03-14 23:19 ` Yinghai Lu
2012-03-15 18:03 ` [PATCH] Use x2apic_supported() in the default_apic_id_valid() function Steffen Persvold
2012-03-15 20:23 ` Yinghai Lu
2012-03-15 21:21 ` Suresh Siddha
2012-03-15 22:34 ` Steffen Persvold
2012-03-15 22:58 ` Steffen Persvold
2012-03-15 23:04 ` Suresh Siddha
2012-03-15 23:17 ` Steffen Persvold
2012-03-15 23:33 ` Steffen Persvold
2012-03-15 23:44 ` Steffen Persvold
2012-03-16 0:07 ` [PATCH] Added separate apic_id_valid() functions for selected apic drivers Steffen Persvold
2012-03-16 0:13 ` Suresh Siddha
2012-03-16 0:57 ` Yinghai Lu
2012-03-16 6:45 ` Steffen Persvold
2012-03-16 2:08 ` [PATCH] Use x2apic_supported() in the default_apic_id_valid() function Yinghai Lu
2012-03-16 3:03 ` Yinghai Lu
2012-03-16 4:19 ` Yinghai Lu
2012-03-16 6:56 ` Steffen Persvold
2012-03-16 16:57 ` Yinghai Lu
2012-03-16 18:01 ` Suresh Siddha
2012-03-16 19:10 ` Yinghai Lu
2012-03-16 19:25 ` [PATCH REPOST] Added separate apic_id_valid() functions for selected apic drivers Steffen Persvold
2012-03-20 10:41 ` Steffen Persvold [this message]
2012-03-20 10:49 ` Ingo Molnar
2012-03-23 19:45 ` [tip:x86/urgent] x86/apic: Add " tip-bot for Steffen Persvold
2012-03-20 16:20 ` [PATCH 0/6] Improvements to Yinghai's x86 IOAPIC hotplug work Jiang Liu
2012-03-20 16:20 ` [PATCH 0/5] Improvements to Yinghai's IOAPIC hotplug work on x86 Jiang Liu
2012-03-20 16:20 ` [PATCH 1/6] x86,IRQ: Fix possible invalid memory access after IOAPIC hot-plugging Jiang Liu
2012-03-20 16:20 ` [PATCH 2/6] x86,IRQ: Mark unused entries in 'ioapics' array as free at startup Jiang Liu
2012-03-21 3:25 ` Yinghai Lu
2012-03-21 3:32 ` Jiang Liu
2012-03-21 14:56 ` Jiang Liu
2012-03-20 16:21 ` [PATCH 3/6] x86,IRQ: Enhance irq allocation policy for hot-added IOAPICs Jiang Liu
2012-03-20 16:21 ` [PATCH 4/6] x86,IRQ: split out function ioapic_setup_resource() Jiang Liu
2012-03-21 3:34 ` Yinghai Lu
2012-03-21 3:43 ` Jiang Liu
2012-03-20 16:21 ` [PATCH 5/6] x86,IRQ: Correctly manage MMIO resource used by IOAPIC when hot-plugging IOPAICs Jiang Liu
2012-03-20 16:21 ` [PATCH 6/6] x86,IRQ: Use memory barriers to protect searching side code Jiang Liu
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=4F685EE8.5020708@numascale.com \
--to=sp@numascale.com \
--cc=daniel@numascale-asia.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=steiner@sgi.com \
--cc=suresh.b.siddha@intel.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
--cc=yinghai@kernel.org \
/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.