|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging] x86/cpu: Drop cpu_devs[] and $VENDOR_init_cpu() hooks
commit 64933920c9b34129d8c868347da0ed396b50e3a8
Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Thu Apr 4 15:51:25 2019 +0100
Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Fri Apr 5 11:09:07 2019 +0100
x86/cpu: Drop cpu_devs[] and $VENDOR_init_cpu() hooks
These helpers each fill in a single cpu_devs[] pointer, and since c/s
00b4f4d0f "x86/cpuid: Drop get_cpu_vendor() completely", this array is read
exactly once on boot.
Delete the hooks and cpu_devs[], and have early_cpu_detect() pick the
appropriate cpu_dev structure directly.
As early_cpu_init() is empty now other than a call to early_cpu_detect(),
and
this isn't expected to change moving forwards, rename the latter and delete
the former.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
---
xen/arch/x86/cpu/amd.c | 8 +-------
xen/arch/x86/cpu/centaur.c | 8 +-------
xen/arch/x86/cpu/common.c | 31 ++++++++-----------------------
xen/arch/x86/cpu/cpu.h | 8 ++------
xen/arch/x86/cpu/intel.c | 11 +----------
xen/arch/x86/cpu/shanghai.c | 8 +-------
6 files changed, 14 insertions(+), 60 deletions(-)
diff --git a/xen/arch/x86/cpu/amd.c b/xen/arch/x86/cpu/amd.c
index 7a73d62994..d58952b222 100644
--- a/xen/arch/x86/cpu/amd.c
+++ b/xen/arch/x86/cpu/amd.c
@@ -792,14 +792,8 @@ static void init_amd(struct cpuinfo_x86 *c)
check_syscfg_dram_mod_en();
}
-static const struct cpu_dev amd_cpu_dev = {
+const struct cpu_dev amd_cpu_dev = {
.c_vendor = "AMD",
.c_early_init = early_init_amd,
.c_init = init_amd,
};
-
-int __init amd_init_cpu(void)
-{
- cpu_devs[X86_VENDOR_AMD] = &amd_cpu_dev;
- return 0;
-}
diff --git a/xen/arch/x86/cpu/centaur.c b/xen/arch/x86/cpu/centaur.c
index 71f6503682..268f4d44d7 100644
--- a/xen/arch/x86/cpu/centaur.c
+++ b/xen/arch/x86/cpu/centaur.c
@@ -54,13 +54,7 @@ static void init_centaur(struct cpuinfo_x86 *c)
init_c3(c);
}
-static const struct cpu_dev centaur_cpu_dev = {
+const struct cpu_dev centaur_cpu_dev = {
.c_vendor = "Centaur",
.c_init = init_centaur,
};
-
-int __init centaur_init_cpu(void)
-{
- cpu_devs[X86_VENDOR_CENTAUR] = ¢aur_cpu_dev;
- return 0;
-}
diff --git a/xen/arch/x86/cpu/common.c b/xen/arch/x86/cpu/common.c
index b2249b5b12..c7b1f34239 100644
--- a/xen/arch/x86/cpu/common.c
+++ b/xen/arch/x86/cpu/common.c
@@ -42,8 +42,6 @@ unsigned int __read_mostly levelling_caps;
DEFINE_PER_CPU(struct cpuidmasks, cpuidmasks);
struct cpuidmasks __read_mostly cpuidmask_defaults;
-const struct cpu_dev *__read_mostly cpu_devs[X86_VENDOR_NUM] = {};
-
unsigned int paddr_bits __read_mostly = 36;
unsigned int hap_paddr_bits __read_mostly = 36;
unsigned int vaddr_bits __read_mostly = VADDR_BITS;
@@ -270,7 +268,7 @@ static inline u32 phys_pkg_id(u32 cpuid_apic, int index_msb)
WARNING: this function is only called on the BP. Don't add code here
that is supposed to run on all CPUs. */
-static void __init early_cpu_detect(void)
+void __init early_cpu_init(void)
{
struct cpuinfo_x86 *c = &boot_cpu_data;
u32 eax, ebx, ecx, edx;
@@ -284,12 +282,16 @@ static void __init early_cpu_detect(void)
*(u32 *)&c->x86_vendor_id[4] = edx;
c->x86_vendor = x86_cpuid_lookup_vendor(ebx, ecx, edx);
- if (c->x86_vendor < ARRAY_SIZE(cpu_devs) && cpu_devs[c->x86_vendor])
- this_cpu = cpu_devs[c->x86_vendor];
- else
+ switch (c->x86_vendor) {
+ case X86_VENDOR_INTEL: this_cpu = &intel_cpu_dev; break;
+ case X86_VENDOR_AMD: this_cpu = &amd_cpu_dev; break;
+ case X86_VENDOR_CENTAUR: this_cpu = ¢aur_cpu_dev; break;
+ case X86_VENDOR_SHANGHAI: this_cpu = &shanghai_cpu_dev; break;
+ default:
printk(XENLOG_ERR
"Unrecognised or unsupported CPU vendor '%.12s'\n",
c->x86_vendor_id);
+ }
cpuid(0x00000001, &eax, &ebx, &ecx, &edx);
c->x86 = get_cpu_family(eax, &c->x86_model, &c->x86_mask);
@@ -677,23 +679,6 @@ void print_cpu_info(unsigned int cpu)
static cpumask_t cpu_initialized;
-/* This is hacky. :)
- * We're emulating future behavior.
- * In the future, the cpu-specific init functions will be called implicitly
- * via the magic of initcalls.
- * They will insert themselves into the cpu_devs structure.
- * Then, when cpu_init() is called, we can just iterate over that array.
- */
-
-void __init early_cpu_init(void)
-{
- intel_cpu_init();
- amd_init_cpu();
- centaur_init_cpu();
- shanghai_init_cpu();
- early_cpu_detect();
-}
-
/*
* Sets up system tables and descriptors.
*
diff --git a/xen/arch/x86/cpu/cpu.h b/xen/arch/x86/cpu/cpu.h
index edc88b1eab..62e4b03c0c 100644
--- a/xen/arch/x86/cpu/cpu.h
+++ b/xen/arch/x86/cpu/cpu.h
@@ -6,7 +6,8 @@ struct cpu_dev {
void (*c_init)(struct cpuinfo_x86 * c);
};
-extern const struct cpu_dev *cpu_devs[X86_VENDOR_NUM];
+extern const struct cpu_dev intel_cpu_dev, amd_cpu_dev, centaur_cpu_dev,
+ shanghai_cpu_dev;
extern bool_t opt_arat;
extern unsigned int opt_cpuid_mask_ecx, opt_cpuid_mask_edx;
@@ -15,8 +16,3 @@ extern unsigned int opt_cpuid_mask_ext_ecx,
opt_cpuid_mask_ext_edx;
extern int get_model_name(struct cpuinfo_x86 *c);
extern void display_cacheinfo(struct cpuinfo_x86 *c);
-
-int intel_cpu_init(void);
-int amd_init_cpu(void);
-int centaur_init_cpu(void);
-int shanghai_init_cpu(void);
diff --git a/xen/arch/x86/cpu/intel.c b/xen/arch/x86/cpu/intel.c
index f9c2ec439a..fcb37083d8 100644
--- a/xen/arch/x86/cpu/intel.c
+++ b/xen/arch/x86/cpu/intel.c
@@ -348,17 +348,8 @@ static void init_intel(struct cpuinfo_x86 *c)
__set_bit(X86_FEATURE_ARAT, c->x86_capability);
}
-static const struct cpu_dev intel_cpu_dev = {
+const struct cpu_dev intel_cpu_dev = {
.c_vendor = "Intel",
.c_early_init = early_init_intel,
.c_init = init_intel,
};
-
-int __init intel_cpu_init(void)
-{
- cpu_devs[X86_VENDOR_INTEL] = &intel_cpu_dev;
- return 0;
-}
-
-// arch_initcall(intel_cpu_init);
-
diff --git a/xen/arch/x86/cpu/shanghai.c b/xen/arch/x86/cpu/shanghai.c
index 24af5c8259..189e13eaef 100644
--- a/xen/arch/x86/cpu/shanghai.c
+++ b/xen/arch/x86/cpu/shanghai.c
@@ -15,13 +15,7 @@ static void init_shanghai(struct cpuinfo_x86 *c)
init_intel_cacheinfo(c);
}
-static const struct cpu_dev shanghai_cpu_dev = {
+const struct cpu_dev shanghai_cpu_dev = {
.c_vendor = " Shang",
.c_init = init_shanghai,
};
-
-int __init shanghai_init_cpu(void)
-{
- cpu_devs[X86_VENDOR_SHANGHAI] = &shanghai_cpu_dev;
- return 0;
-}
--
generated by git-patchbot for /home/xen/git/xen.git#staging
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |