From patchwork Thu Apr 4 20:26:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Andrew Cooper X-Patchwork-Id: 10886281 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 968C4922 for ; Thu, 4 Apr 2019 20:28:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 848E028AF3 for ; Thu, 4 Apr 2019 20:28:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 78FE228AF5; Thu, 4 Apr 2019 20:28:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id EE02B28AF1 for ; Thu, 4 Apr 2019 20:28:40 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hC8wZ-0002A5-S5; Thu, 04 Apr 2019 20:26:39 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hC8wY-00029r-05 for xen-devel@lists.xen.org; Thu, 04 Apr 2019 20:26:38 +0000 X-Inumbo-ID: f1e76ab3-5717-11e9-92d7-bc764e045a96 Received: from SMTP03.CITRIX.COM (unknown [162.221.156.55]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS id f1e76ab3-5717-11e9-92d7-bc764e045a96; Thu, 04 Apr 2019 20:26:36 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.60,309,1549929600"; d="scan'208";a="82795822" From: Andrew Cooper To: Xen-devel Date: Thu, 4 Apr 2019 21:26:28 +0100 Message-ID: <1554409592-28572-2-git-send-email-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1554409592-28572-1-git-send-email-andrew.cooper3@citrix.com> References: <1554409592-28572-1-git-send-email-andrew.cooper3@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH 1/5] x86/cpu: Drop cpu_devs[] and $VENDOR_init_cpu() hooks X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Wei Liu , Andrew Cooper , David Wang , Jan Beulich , Pu Wen , =?utf-8?q?Roger_Pau_Monn=C3=A9?= Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP 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. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- CC: Jan Beulich CC: Wei Liu CC: Roger Pau MonnĂ© CC: David Wang CC: Pu Wen --- xen/arch/x86/cpu/amd.c | 8 +------- xen/arch/x86/cpu/centaur.c | 8 +------- xen/arch/x86/cpu/common.c | 16 +++++++--------- xen/arch/x86/cpu/cpu.h | 8 ++------ xen/arch/x86/cpu/intel.c | 11 +---------- xen/arch/x86/cpu/shanghai.c | 8 +------- 6 files changed, 13 insertions(+), 46 deletions(-) diff --git a/xen/arch/x86/cpu/amd.c b/xen/arch/x86/cpu/amd.c index 7a73d62..d58952b 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 71f6503..268f4d4 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 b2249b5..4cf9ec2 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; @@ -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); @@ -687,10 +689,6 @@ static cpumask_t cpu_initialized; void __init early_cpu_init(void) { - intel_cpu_init(); - amd_init_cpu(); - centaur_init_cpu(); - shanghai_init_cpu(); early_cpu_detect(); } diff --git a/xen/arch/x86/cpu/cpu.h b/xen/arch/x86/cpu/cpu.h index edc88b1..62e4b03 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 f9c2ec4..fcb3708 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 24af5c8..189e13e 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; -}