[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86/genapic: remove indirection from genapic hook accesses
commit c0bb0d88436581f589946b3f76d19fc26546ff66 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Thu Nov 8 15:59:14 2018 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Thu Nov 8 15:59:14 2018 +0100 x86/genapic: remove indirection from genapic hook accesses Instead of loading a pointer at each use site, have a single runtime instance of struct genapic, copying into it from the individual instances. The individual instances can this way also be moved to .init (also adjust apic_probe[] at this occasion). Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Wei Liu <wei.liu2@xxxxxxxxxx> Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/apic.c | 4 ++-- xen/arch/x86/genapic/bigsmp.c | 2 +- xen/arch/x86/genapic/default.c | 2 +- xen/arch/x86/genapic/probe.c | 30 +++++++++++++--------------- xen/arch/x86/genapic/x2apic.c | 6 +++--- xen/arch/x86/mpparse.c | 3 ++- xen/arch/x86/smp.c | 4 ++-- xen/include/asm-x86/genapic.h | 3 ++- xen/include/asm-x86/mach-generic/mach_apic.h | 12 +++++------ 9 files changed, 33 insertions(+), 33 deletions(-) diff --git a/xen/arch/x86/apic.c b/xen/arch/x86/apic.c index df6aea75ab..7120107b0c 100644 --- a/xen/arch/x86/apic.c +++ b/xen/arch/x86/apic.c @@ -944,8 +944,8 @@ void __init x2apic_bsp_setup(void) force_iommu = 1; - genapic = apic_x2apic_probe(); - printk("Switched to APIC driver %s.\n", genapic->name); + genapic = *apic_x2apic_probe(); + printk("Switched to APIC driver %s.\n", genapic.name); if ( !x2apic_enabled ) { diff --git a/xen/arch/x86/genapic/bigsmp.c b/xen/arch/x86/genapic/bigsmp.c index 294902ba85..91a973ac16 100644 --- a/xen/arch/x86/genapic/bigsmp.c +++ b/xen/arch/x86/genapic/bigsmp.c @@ -42,7 +42,7 @@ static __init int probe_bigsmp(void) return def_to_bigsmp; } -const struct genapic apic_bigsmp = { +const struct genapic __initconstrel apic_bigsmp = { APIC_INIT("bigsmp", probe_bigsmp), GENAPIC_PHYS }; diff --git a/xen/arch/x86/genapic/default.c b/xen/arch/x86/genapic/default.c index 4d1a06fb82..53ebf20a3f 100644 --- a/xen/arch/x86/genapic/default.c +++ b/xen/arch/x86/genapic/default.c @@ -20,7 +20,7 @@ static __init int probe_default(void) return 1; } -const struct genapic apic_default = { +const struct genapic __initconstrel apic_default = { APIC_INIT("default", probe_default), GENAPIC_FLAT }; diff --git a/xen/arch/x86/genapic/probe.c b/xen/arch/x86/genapic/probe.c index af3745aa21..6aa7eb7b1c 100644 --- a/xen/arch/x86/genapic/probe.c +++ b/xen/arch/x86/genapic/probe.c @@ -15,11 +15,9 @@ #include <asm/mach-generic/mach_apic.h> #include <asm/setup.h> -extern const struct genapic apic_bigsmp; +struct genapic __read_mostly genapic; -const struct genapic *__read_mostly genapic; - -const struct genapic *apic_probe[] __initdata = { +const struct genapic *const __initconstrel apic_probe[] = { &apic_bigsmp, &apic_default, /* must be last */ NULL, @@ -36,11 +34,11 @@ void __init generic_bigsmp_probe(void) * - we find more than 8 CPUs in acpi LAPIC listing with xAPIC support */ - if (!cmdline_apic && genapic == &apic_default) + if (!cmdline_apic && genapic.name == apic_default.name) if (apic_bigsmp.probe()) { - genapic = &apic_bigsmp; + genapic = apic_bigsmp; printk(KERN_INFO "Overriding APIC driver with %s\n", - genapic->name); + genapic.name); } } @@ -50,7 +48,7 @@ static int __init genapic_apic_force(const char *str) for (i = 0; apic_probe[i]; i++) if (!strcmp(apic_probe[i]->name, str)) { - genapic = apic_probe[i]; + genapic = *apic_probe[i]; rc = 0; } @@ -66,18 +64,18 @@ void __init generic_apic_probe(void) record_boot_APIC_mode(); check_x2apic_preenabled(); - cmdline_apic = changed = (genapic != NULL); + cmdline_apic = changed = !!genapic.name; for (i = 0; !changed && apic_probe[i]; i++) { if (apic_probe[i]->probe()) { changed = 1; - genapic = apic_probe[i]; + genapic = *apic_probe[i]; } } if (!changed) - genapic = &apic_default; + genapic = apic_default; - printk(KERN_INFO "Using APIC driver %s\n", genapic->name); + printk(KERN_INFO "Using APIC driver %s\n", genapic.name); } /* These functions can switch the APIC even after the initial ->probe() */ @@ -88,9 +86,9 @@ int __init mps_oem_check(struct mp_config_table *mpc, char *oem, char *productid for (i = 0; apic_probe[i]; ++i) { if (apic_probe[i]->mps_oem_check(mpc,oem,productid)) { if (!cmdline_apic) { - genapic = apic_probe[i]; + genapic = *apic_probe[i]; printk(KERN_INFO "Switched to APIC driver `%s'.\n", - genapic->name); + genapic.name); } return 1; } @@ -104,9 +102,9 @@ int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id) for (i = 0; apic_probe[i]; ++i) { if (apic_probe[i]->acpi_madt_oem_check(oem_id, oem_table_id)) { if (!cmdline_apic) { - genapic = apic_probe[i]; + genapic = *apic_probe[i]; printk(KERN_INFO "Switched to APIC driver `%s'.\n", - genapic->name); + genapic.name); } return 1; } diff --git a/xen/arch/x86/genapic/x2apic.c b/xen/arch/x86/genapic/x2apic.c index 5df70b0cf6..7e2e89d881 100644 --- a/xen/arch/x86/genapic/x2apic.c +++ b/xen/arch/x86/genapic/x2apic.c @@ -163,7 +163,7 @@ static void send_IPI_mask_x2apic_cluster(const cpumask_t *cpumask, int vector) local_irq_restore(flags); } -static const struct genapic apic_x2apic_phys = { +static const struct genapic __initconstrel apic_x2apic_phys = { APIC_INIT("x2apic_phys", NULL), .int_delivery_mode = dest_Fixed, .int_dest_mode = 0 /* physical delivery */, @@ -175,7 +175,7 @@ static const struct genapic apic_x2apic_phys = { .send_IPI_self = send_IPI_self_x2apic }; -static const struct genapic apic_x2apic_cluster = { +static const struct genapic __initconstrel apic_x2apic_cluster = { APIC_INIT("x2apic_cluster", NULL), .int_delivery_mode = dest_LowestPrio, .int_dest_mode = 1 /* logical delivery */, @@ -259,6 +259,6 @@ void __init check_x2apic_preenabled(void) { printk("x2APIC mode is already enabled by BIOS.\n"); x2apic_enabled = 1; - genapic = apic_x2apic_probe(); + genapic = *apic_x2apic_probe(); } } diff --git a/xen/arch/x86/mpparse.c b/xen/arch/x86/mpparse.c index f2b6d6bdab..16c93a935d 100644 --- a/xen/arch/x86/mpparse.c +++ b/xen/arch/x86/mpparse.c @@ -162,7 +162,8 @@ static int MP_processor_info_x(struct mpc_config_processor *m, return -ENOSPC; } - if (num_processors >= 8 && hotplug && genapic == &apic_default) { + if (num_processors >= 8 && hotplug + && genapic.name == apic_default.name) { printk(KERN_WARNING "WARNING: CPUs limit of 8 reached." " Processor ignored.\n"); return -ENOSPC; diff --git a/xen/arch/x86/smp.c b/xen/arch/x86/smp.c index 63e819ca38..b15d4f05df 100644 --- a/xen/arch/x86/smp.c +++ b/xen/arch/x86/smp.c @@ -29,12 +29,12 @@ void send_IPI_mask(const cpumask_t *mask, int vector) { - genapic->send_IPI_mask(mask, vector); + genapic.send_IPI_mask(mask, vector); } void send_IPI_self(int vector) { - genapic->send_IPI_self(vector); + genapic.send_IPI_self(vector); } /* diff --git a/xen/include/asm-x86/genapic.h b/xen/include/asm-x86/genapic.h index 8aeb28ecda..5aa35ceb5f 100644 --- a/xen/include/asm-x86/genapic.h +++ b/xen/include/asm-x86/genapic.h @@ -47,8 +47,9 @@ struct genapic { APICFUNC(mps_oem_check), \ APICFUNC(acpi_madt_oem_check) -extern const struct genapic *genapic; +extern struct genapic genapic; extern const struct genapic apic_default; +extern const struct genapic apic_bigsmp; void send_IPI_self_legacy(uint8_t vector); diff --git a/xen/include/asm-x86/mach-generic/mach_apic.h b/xen/include/asm-x86/mach-generic/mach_apic.h index 3fed22c81a..0984554d36 100644 --- a/xen/include/asm-x86/mach-generic/mach_apic.h +++ b/xen/include/asm-x86/mach-generic/mach_apic.h @@ -10,13 +10,13 @@ #define esr_disable (0) /* The following are dependent on APIC delivery mode (logical vs. physical). */ -#define INT_DELIVERY_MODE (genapic->int_delivery_mode) -#define INT_DEST_MODE (genapic->int_dest_mode) +#define INT_DELIVERY_MODE (genapic.int_delivery_mode) +#define INT_DEST_MODE (genapic.int_dest_mode) #define TARGET_CPUS ((const typeof(cpu_online_map) *)&cpu_online_map) -#define init_apic_ldr (genapic->init_apic_ldr) -#define clustered_apic_check (genapic->clustered_apic_check) -#define cpu_mask_to_apicid (genapic->cpu_mask_to_apicid) -#define vector_allocation_cpumask(cpu) (genapic->vector_allocation_cpumask(cpu)) +#define init_apic_ldr (genapic.init_apic_ldr) +#define clustered_apic_check (genapic.clustered_apic_check) +#define cpu_mask_to_apicid (genapic.cpu_mask_to_apicid) +#define vector_allocation_cpumask(cpu) (genapic.vector_allocation_cpumask(cpu)) static inline void enable_apic_mode(void) { -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |