Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp3659ybb; Tue, 31 Mar 2020 15:47:21 -0700 (PDT) X-Google-Smtp-Source: APiQypL1TogVhWqiOg6ABjOz1DNTjq79fdU/hD14VsTRIXyLgPWf82mfGxHlUMDMJKeKppGdewxg X-Received: by 2002:aca:c3d1:: with SMTP id t200mr910861oif.24.1585694841613; Tue, 31 Mar 2020 15:47:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585694841; cv=none; d=google.com; s=arc-20160816; b=Acpl14rNJP+sAYIM/xBY1fYfmGzGWUL/aJO8ofm8KXGJagRVKbela71FWZ+9YoJ3t8 P6khltQUz3XBcVF8aGI86XKj8HtKc4TQmroODGEuFfeimTXs26EiiA0Q+p48LOyRkq1s 8lE4nmozMx+dE5WowjCcBMXX0dS+9VzOK3WTFz5zL57OAO1AZYlj5yWbPIY/ASeyFUEX 735PYwNKmwNfwjTte+V/qBjmn3/hpTfCU7op01MlRqUDnpAaRbhSWt34PV7rE+dzr/lS To9Ea14fHSVOBRlsEoEy6fjr3iwSgONzOb6l/aBps1d31xqeMDOiwQToZYi+f4pmv7GI 47bQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:ironport-sdr :dkim-signature; bh=S6vZJt+U0DmGTyltaTcmPdQT7L0ggGOum5+sNA1bm0o=; b=08kE5WV/zm4tjaOEgtMO6eD47qoDLK8eFtng7G2C8N2nBmigbnSzfLSW8Jt3SAiJ4M J8kenlQEFqPL6cG72esGe5Gf7wteu82qH98zONIVgpOyh6H0dz7Ii1SjYyCtsGmARU3+ oEQTvWXQaMN5Pv+uul0yOE3ZV+55stQPeN3ULRzDfOZxQz6cqINaTIqmeR25otVSengl oPP5TaFxNt013g5AJsI32361tDu57psXeiu9w907Z3+em4J+wkL2ghPXNELiz4Z9rLY+ fsgT4e25mfyX01Tvt31FoXIqx4dfLFixyhgDjxoDhROIe0ypKleT93tCYl6OlbuDMBM1 eDYg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@citrix.com header.s=securemail header.b=crWryM9q; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=citrix.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c195si140541oig.142.2020.03.31.15.47.06; Tue, 31 Mar 2020 15:47:21 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@citrix.com header.s=securemail header.b=crWryM9q; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=citrix.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731483AbgCaWo7 (ORCPT + 99 others); Tue, 31 Mar 2020 18:44:59 -0400 Received: from esa1.hc3370-68.iphmx.com ([216.71.145.142]:48771 "EHLO esa1.hc3370-68.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727955AbgCaWo6 (ORCPT ); Tue, 31 Mar 2020 18:44:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1585694698; h=subject:to:cc:references:from:message-id:date: mime-version:in-reply-to:content-transfer-encoding; bh=Chq5sFXca5uPXf4ffaxBj2vrDSl/FVyiOW1Nsm4T2fo=; b=crWryM9qL2ctaTRsxllkGp0hcrycByKsL+Kb53nZiezN786qyGJ7G1vQ 7rLfzAR33nGaj0EvMzoofacofEuOpnQ/775uZgvLlYTJMTC4U701dZ9uV KsSuWYiQTDHsAyKicMKfVZNyblWvQpk5dFo7GBIvuUUoe3/WOf/1fIQxh s=; Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=andrew.cooper3@citrix.com; spf=Pass smtp.mailfrom=Andrew.Cooper3@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: None (esa1.hc3370-68.iphmx.com: no sender authenticity information available from domain of andrew.cooper3@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com; envelope-from="Andrew.Cooper3@citrix.com"; x-sender="andrew.cooper3@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa1.hc3370-68.iphmx.com: domain of Andrew.Cooper3@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com; envelope-from="Andrew.Cooper3@citrix.com"; x-sender="Andrew.Cooper3@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ip4:168.245.78.127 ~all" Received-SPF: None (esa1.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com; envelope-from="Andrew.Cooper3@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: NAsrma9tTEcl7LEQG8wF+MJQy+sbYhN4aIQmAw3bzH5irOH8CuvS5tQcv70dVtPgJ/eOeWFMgK 0GVskZU5r8VQSj4fze7AD4mXtBB1OO3nUUzuA6IfIIHfPAZ3UzuYlYJfuQ2D6KMqh29JkyIGU/ zvPJw9VyuEYO8jQ/K+5iLLbmuWxti+Bdjjdqw40KUOk58Jio/4asewt8lumNae23CVmvIftXjj CAM7XEb1/RnahfwT8qG2CssS7ipQ4sgDYuEkc5G2ptWC3xQn5TOqGdCax5jvpkky2k+k5n6r3C un8= X-SBRS: 2.7 X-MesageID: 15185279 X-Ironport-Server: esa1.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.72,329,1580792400"; d="scan'208";a="15185279" Subject: Re: [PATCH v2] x86/smpboot: Remove 486-isms from the modern AP boot path To: Brian Gerst CC: LKML , Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" , the arch/x86 maintainers , Jan Kiszka , James Morris , David Howells , Matthew Garrett , Josh Boyer , Steve Wahl , Mike Travis , Dimitri Sivanich , "Arnd Bergmann" , "Peter Zijlstra (Intel)" , Giovanni Gherdovich , "Rafael J. Wysocki" , Len Brown , Kees Cook , Martin Molnar , Pingfan Liu , References: <20200325101431.12341-1-andrew.cooper3@citrix.com> <20200331175810.30204-1-andrew.cooper3@citrix.com> From: Andrew Cooper Message-ID: Date: Tue, 31 Mar 2020 23:44:51 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Content-Language: en-GB X-ClientProxiedBy: AMSPEX02CAS01.citrite.net (10.69.22.112) To AMSPEX02CL02.citrite.net (10.69.22.126) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 31/03/2020 23:23, Brian Gerst wrote: > On Tue, Mar 31, 2020 at 1:59 PM Andrew Cooper wrote: >> Linux has an implementation of the Universal Start-up Algorithm (MP spec, >> Appendix B.4, Application Processor Startup), which includes unconditionally >> writing to the Bios Data Area and CMOS registers. >> >> The warm reset vector is only necessary in the non-integrated Local APIC case. >> UV and Jailhouse already have an opt-out for this behaviour, but blindly using >> the BDA and CMOS on a UEFI or other reduced hardware system isn't clever. >> >> We could make this conditional on the integrated-ness of the Local APIC, but >> 486-era SMP isn't supported. Drop the logic completely, tidying up the includ >> list and header files as appropriate. >> >> CC: Thomas Gleixner >> CC: Ingo Molnar >> CC: Borislav Petkov >> CC: "H. Peter Anvin" >> CC: x86@kernel.org >> CC: Jan Kiszka >> CC: James Morris >> CC: David Howells >> CC: Andrew Cooper >> CC: Matthew Garrett >> CC: Josh Boyer >> CC: Steve Wahl >> CC: Mike Travis >> CC: Dimitri Sivanich >> CC: Arnd Bergmann >> CC: "Peter Zijlstra (Intel)" >> CC: Giovanni Gherdovich >> CC: "Rafael J. Wysocki" >> CC: Len Brown >> CC: Kees Cook >> CC: Martin Molnar >> CC: Pingfan Liu >> CC: linux-kernel@vger.kernel.org >> CC: jailhouse-dev@googlegroups.com >> Suggested-by: "H. Peter Anvin" >> Signed-off-by: Andrew Cooper >> --- >> v2: >> * Drop logic entirely, rather than retaining support in 32bit builds. >> --- >> arch/x86/include/asm/apic.h | 6 ----- >> arch/x86/include/asm/x86_init.h | 1 - >> arch/x86/kernel/apic/x2apic_uv_x.c | 1 - >> arch/x86/kernel/jailhouse.c | 1 - >> arch/x86/kernel/platform-quirks.c | 1 - >> arch/x86/kernel/smpboot.c | 50 -------------------------------------- >> 6 files changed, 60 deletions(-) >> >> diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h >> index 19e94af9cc5d..5c33f9374b28 100644 >> --- a/arch/x86/include/asm/apic.h >> +++ b/arch/x86/include/asm/apic.h >> @@ -472,12 +472,6 @@ static inline unsigned default_get_apic_id(unsigned long x) >> return (x >> 24) & 0x0F; >> } >> >> -/* >> - * Warm reset vector position: >> - */ >> -#define TRAMPOLINE_PHYS_LOW 0x467 >> -#define TRAMPOLINE_PHYS_HIGH 0x469 >> - >> extern void generic_bigsmp_probe(void); >> >> #ifdef CONFIG_X86_LOCAL_APIC >> diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h >> index 96d9cd208610..006a5d7fd7eb 100644 >> --- a/arch/x86/include/asm/x86_init.h >> +++ b/arch/x86/include/asm/x86_init.h >> @@ -229,7 +229,6 @@ enum x86_legacy_i8042_state { >> struct x86_legacy_features { >> enum x86_legacy_i8042_state i8042; >> int rtc; >> - int warm_reset; >> int no_vga; >> int reserve_bios_regions; >> struct x86_legacy_devices devices; >> diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c >> index ad53b2abc859..5afcfd193592 100644 >> --- a/arch/x86/kernel/apic/x2apic_uv_x.c >> +++ b/arch/x86/kernel/apic/x2apic_uv_x.c >> @@ -343,7 +343,6 @@ static int __init uv_acpi_madt_oem_check(char *_oem_id, char *_oem_table_id) >> } else if (!strcmp(oem_table_id, "UVH")) { >> /* Only UV1 systems: */ >> uv_system_type = UV_NON_UNIQUE_APIC; >> - x86_platform.legacy.warm_reset = 0; >> __this_cpu_write(x2apic_extra_bits, pnodeid << uvh_apicid.s.pnode_shift); >> uv_set_apicid_hibit(); >> uv_apic = 1; >> diff --git a/arch/x86/kernel/jailhouse.c b/arch/x86/kernel/jailhouse.c >> index 6eb8b50ea07e..d628fe92d6af 100644 >> --- a/arch/x86/kernel/jailhouse.c >> +++ b/arch/x86/kernel/jailhouse.c >> @@ -210,7 +210,6 @@ static void __init jailhouse_init_platform(void) >> x86_platform.calibrate_tsc = jailhouse_get_tsc; >> x86_platform.get_wallclock = jailhouse_get_wallclock; >> x86_platform.legacy.rtc = 0; >> - x86_platform.legacy.warm_reset = 0; >> x86_platform.legacy.i8042 = X86_LEGACY_I8042_PLATFORM_ABSENT; >> >> legacy_pic = &null_legacy_pic; >> diff --git a/arch/x86/kernel/platform-quirks.c b/arch/x86/kernel/platform-quirks.c >> index b348a672f71d..d922c5e0c678 100644 >> --- a/arch/x86/kernel/platform-quirks.c >> +++ b/arch/x86/kernel/platform-quirks.c >> @@ -9,7 +9,6 @@ void __init x86_early_init_platform_quirks(void) >> { >> x86_platform.legacy.i8042 = X86_LEGACY_I8042_EXPECTED_PRESENT; >> x86_platform.legacy.rtc = 1; >> - x86_platform.legacy.warm_reset = 1; >> x86_platform.legacy.reserve_bios_regions = 0; >> x86_platform.legacy.devices.pnpbios = 1; >> >> diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c >> index fe3ab9632f3b..a9f5b511d0b4 100644 >> --- a/arch/x86/kernel/smpboot.c >> +++ b/arch/x86/kernel/smpboot.c >> @@ -72,7 +72,6 @@ >> #include >> #include >> #include >> -#include >> #include >> #include >> #include >> @@ -119,34 +118,6 @@ int arch_update_cpu_topology(void) >> return retval; >> } >> >> -static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip) >> -{ >> - unsigned long flags; >> - >> - spin_lock_irqsave(&rtc_lock, flags); >> - CMOS_WRITE(0xa, 0xf); >> - spin_unlock_irqrestore(&rtc_lock, flags); >> - *((volatile unsigned short *)phys_to_virt(TRAMPOLINE_PHYS_HIGH)) = >> - start_eip >> 4; >> - *((volatile unsigned short *)phys_to_virt(TRAMPOLINE_PHYS_LOW)) = >> - start_eip & 0xf; >> -} >> - >> -static inline void smpboot_restore_warm_reset_vector(void) >> -{ >> - unsigned long flags; >> - >> - /* >> - * Paranoid: Set warm reset code and vector here back >> - * to default values. >> - */ >> - spin_lock_irqsave(&rtc_lock, flags); >> - CMOS_WRITE(0, 0xf); >> - spin_unlock_irqrestore(&rtc_lock, flags); >> - >> - *((volatile u32 *)phys_to_virt(TRAMPOLINE_PHYS_LOW)) = 0; >> -} >> - >> static void init_freq_invariance(void); >> >> /* >> @@ -1049,20 +1020,6 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle, >> * the targeted processor. >> */ >> >> - if (x86_platform.legacy.warm_reset) { >> - >> - pr_debug("Setting warm reset code and vector.\n"); >> - >> - smpboot_setup_warm_reset_vector(start_ip); >> - /* >> - * Be paranoid about clearing APIC errors. >> - */ >> - if (APIC_INTEGRATED(boot_cpu_apic_version)) { >> - apic_write(APIC_ESR, 0); >> - apic_read(APIC_ESR); >> - } >> - } >> - >> /* >> * AP might wait on cpu_callout_mask in cpu_init() with >> * cpu_initialized_mask set if previous attempt to online >> @@ -1118,13 +1075,6 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle, >> } >> } >> >> - if (x86_platform.legacy.warm_reset) { >> - /* >> - * Cleanup possible dangling ends... >> - */ >> - smpboot_restore_warm_reset_vector(); >> - } >> - >> return boot_error; >> } > You removed x86_platform.legacy.warm_reset in the original patch, but > that is missing in V2. Second hunk?  Or are you referring to something different? ~Andrew