From patchwork Fri Mar 10 21:42:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67727 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1113907wrd; Fri, 10 Mar 2023 13:45:49 -0800 (PST) X-Google-Smtp-Source: AK7set+5lHKokEIh/33kmJm1Yh+Kil/sXvbc7UfEDML5IqJjHT1OFclmDHb5/FXY7ibbLE1l3E2l X-Received: by 2002:a17:902:e5ce:b0:199:25d1:e559 with SMTP id u14-20020a170902e5ce00b0019925d1e559mr32762549plf.0.1678484749676; Fri, 10 Mar 2023 13:45:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678484749; cv=none; d=google.com; s=arc-20160816; b=Qkl3+Ax0gwHUQ3Mz/Vf+R3Pu4PWIh3KQpxorLXmxXfV99XhKr3IBQOZOQv82mV8zfX jp19fNFZojFLqf1j5w/+pD8z1eS98iYHvVaIWEDRUd4BNV2gH8qWtjC0V9DFGtx3RsxF SM84undhv3mqraw1U9IA4FG4et+k9KETrLJWJWoNTA4nRLzapotNv2nzEGY/bypoySXJ y5EHnlULPS2NbQ/g9RVzHarT5IX8lWWR6FIae/amAI0yqq9zWypuLCetrgxKn6htf2tN GLLEyR9ThGXGb1YBhhJYOyxBjYV58ZyYMll8DzJO972WcI45E/PtftopPW1Wd42KcHBu Qcfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=ef7PP0SQ7R8DCF78GLBtkjVAZkkgPEB1VXa9M7tBWJI=; b=hzVV39+MUbQ1nwC0vBnVr8he2Uuge7Oz+uP9+RHpU54UIF6qQzilX06lP5eNCaH8+o 8M2dfmGK1cgKTgqRty4CC2JOiZU0ik/5Stcd3LGdTyPARFjdYHSkFv83fdkAkJsmf5sf I+tPzAWvlpIlWbTGyVm49+UR9gyg11En1PidEHD2cqxGWGaPW8rElfrW7Yj6q+33aTEI u8n2Fm/LxR3uLvwPx3cghu57zlMwPLSdsA7G7BBdo19mAnsewwV6X1WmU0V20hAIArvW a8BJ5l/H5Z//0hF74S4BdwrdMqrcYmRjH+vK0IUWHQ9Ug9hIjvS/4Lhrg9PxvJaPc/PL Z7ZA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=Un8MBYCm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id u6-20020a17090341c600b0019e2c25d670si866272ple.572.2023.03.10.13.45.32; Fri, 10 Mar 2023 13:45:49 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=Un8MBYCm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231878AbjCJVmn (ORCPT + 99 others); Fri, 10 Mar 2023 16:42:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57772 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231590AbjCJVmk (ORCPT ); Fri, 10 Mar 2023 16:42:40 -0500 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5A9D91308F8 for ; Fri, 10 Mar 2023 13:42:39 -0800 (PST) Received: by mail-pj1-x104a.google.com with SMTP id pl10-20020a17090b268a00b00239ed042afcso4912938pjb.4 for ; Fri, 10 Mar 2023 13:42:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678484559; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=ef7PP0SQ7R8DCF78GLBtkjVAZkkgPEB1VXa9M7tBWJI=; b=Un8MBYCmNnLoukZjJV+nUJt8RrbN1Wuz/29ZYWJZGTk2dPZ5X9qMkdfmDLXpK6nWai hCnYZQbiJGX8XRqFa1KD6lVkYvkWoAbqL62YxFG/yJKKljUoX2BnFUaKgeVDc5u5LGxN PyLIxDhvz7dvMSK8rLvrMj/Db8H5ad5uFl7o2jROvRPRjCfyiaV4RReQzCegQGzv5VAK wCYubxPB2Q6XJlzhUIPpzUhA5azOQTTyIE/8R+SkPGSbhqr8wQgcwBYVLgtEl8IPWuOh ozerfx7inWzUZLxL/dlwiAilvkE4hChx0tvu45zH/d1mD9WrKJsnHVXyBa/ZXeLW1gpj tq4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678484559; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ef7PP0SQ7R8DCF78GLBtkjVAZkkgPEB1VXa9M7tBWJI=; b=pKTl05APapL3TmebQIOyBY+q8/xwa4/DcTIhPEDjSPYBRYoP8ZZqT5jT+8uIZSCPQL wnF7qUq6xCBxwBJ82ZttI8rzCvIwL39gQdvcuLPDz/b7EV4rm2kvLq/195g4moDYncqD Yy9BlZduFe05xenY6hZEUJLe0OPRx77zGgi1QMyJeSpJOeblNxTE7p4NRBlgEDzv/HLk P27VE8F+MPkcvk4dsI80OQv6+jAj+pFiZpUoR5AO1EQhJylY0STQENyzk5imO/opHU3W w/yrGpG9FidNaXWVdCycigxx2lpiBHBZWuX/HYV6iUFXZ4F+oChz5YbGt5oSbc0YsI0a MNkQ== X-Gm-Message-State: AO0yUKWMX9T2jhwIbW82NVWplbwTr6hpBCh81Jt2PPSZYKOTu/J9jMMQ cu5ImZwtNlh4FNgLbTVqzyrKLPcSzVM= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:a38e:b0:19b:42d:79f8 with SMTP id x14-20020a170902a38e00b0019b042d79f8mr10655656pla.5.1678484558868; Fri, 10 Mar 2023 13:42:38 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 13:42:15 -0800 In-Reply-To: <20230310214232.806108-1-seanjc@google.com> Mime-Version: 1.0 References: <20230310214232.806108-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230310214232.806108-2-seanjc@google.com> Subject: [PATCH v2 01/18] x86/reboot: VMCLEAR active VMCSes before emergency reboot From: Sean Christopherson To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Sean Christopherson , Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Andrew Cooper , Kai Huang , Chao Gao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760018824609467548?= X-GMAIL-MSGID: =?utf-8?q?1760018824609467548?= VMCLEAR active VMCSes before any emergency reboot, not just if the kernel may kexec into a new kernel after a crash. Per Intel's SDM, the VMX architecture doesn't require the CPU to flush the VMCS cache on INIT. If an emergency reboot doesn't RESET CPUs, cached VMCSes could theoretically be kept and only be written back to memory after the new kernel is booted, i.e. could effectively corrupt memory after reboot. Opportunistically remove the setting of the global pointer to NULL to make checkpatch happy. Cc: Andrew Cooper Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kexec.h | 2 -- arch/x86/include/asm/reboot.h | 2 ++ arch/x86/kernel/crash.c | 31 ------------------------------- arch/x86/kernel/reboot.c | 22 ++++++++++++++++++++++ arch/x86/kvm/vmx/vmx.c | 10 +++------- 5 files changed, 27 insertions(+), 40 deletions(-) diff --git a/arch/x86/include/asm/kexec.h b/arch/x86/include/asm/kexec.h index a3760ca796aa..256eee99afc8 100644 --- a/arch/x86/include/asm/kexec.h +++ b/arch/x86/include/asm/kexec.h @@ -208,8 +208,6 @@ int arch_kimage_file_post_load_cleanup(struct kimage *image); #endif #endif -typedef void crash_vmclear_fn(void); -extern crash_vmclear_fn __rcu *crash_vmclear_loaded_vmcss; extern void kdump_nmi_shootdown_cpus(void); #endif /* __ASSEMBLY__ */ diff --git a/arch/x86/include/asm/reboot.h b/arch/x86/include/asm/reboot.h index bc5b4d788c08..2551baec927d 100644 --- a/arch/x86/include/asm/reboot.h +++ b/arch/x86/include/asm/reboot.h @@ -25,6 +25,8 @@ void __noreturn machine_real_restart(unsigned int type); #define MRR_BIOS 0 #define MRR_APM 1 +typedef void crash_vmclear_fn(void); +extern crash_vmclear_fn __rcu *crash_vmclear_loaded_vmcss; void cpu_emergency_disable_virtualization(void); typedef void (*nmi_shootdown_cb)(int, struct pt_regs*); diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c index cdd92ab43cda..54cd959cb316 100644 --- a/arch/x86/kernel/crash.c +++ b/arch/x86/kernel/crash.c @@ -48,38 +48,12 @@ struct crash_memmap_data { unsigned int type; }; -/* - * This is used to VMCLEAR all VMCSs loaded on the - * processor. And when loading kvm_intel module, the - * callback function pointer will be assigned. - * - * protected by rcu. - */ -crash_vmclear_fn __rcu *crash_vmclear_loaded_vmcss = NULL; -EXPORT_SYMBOL_GPL(crash_vmclear_loaded_vmcss); - -static inline void cpu_crash_vmclear_loaded_vmcss(void) -{ - crash_vmclear_fn *do_vmclear_operation = NULL; - - rcu_read_lock(); - do_vmclear_operation = rcu_dereference(crash_vmclear_loaded_vmcss); - if (do_vmclear_operation) - do_vmclear_operation(); - rcu_read_unlock(); -} - #if defined(CONFIG_SMP) && defined(CONFIG_X86_LOCAL_APIC) static void kdump_nmi_callback(int cpu, struct pt_regs *regs) { crash_save_cpu(regs, cpu); - /* - * VMCLEAR VMCSs loaded on all cpus if needed. - */ - cpu_crash_vmclear_loaded_vmcss(); - /* * Disable Intel PT to stop its logging */ @@ -133,11 +107,6 @@ void native_machine_crash_shutdown(struct pt_regs *regs) crash_smp_send_stop(); - /* - * VMCLEAR VMCSs loaded on this cpu if needed. - */ - cpu_crash_vmclear_loaded_vmcss(); - cpu_emergency_disable_virtualization(); /* diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index d03c551defcc..299b970e5f82 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c @@ -787,6 +787,26 @@ void machine_crash_shutdown(struct pt_regs *regs) } #endif +/* + * This is used to VMCLEAR all VMCSs loaded on the + * processor. And when loading kvm_intel module, the + * callback function pointer will be assigned. + * + * protected by rcu. + */ +crash_vmclear_fn __rcu *crash_vmclear_loaded_vmcss; +EXPORT_SYMBOL_GPL(crash_vmclear_loaded_vmcss); + +static inline void cpu_crash_vmclear_loaded_vmcss(void) +{ + crash_vmclear_fn *do_vmclear_operation = NULL; + + rcu_read_lock(); + do_vmclear_operation = rcu_dereference(crash_vmclear_loaded_vmcss); + if (do_vmclear_operation) + do_vmclear_operation(); + rcu_read_unlock(); +} /* This is the CPU performing the emergency shutdown work. */ int crashing_cpu = -1; @@ -798,6 +818,8 @@ int crashing_cpu = -1; */ void cpu_emergency_disable_virtualization(void) { + cpu_crash_vmclear_loaded_vmcss(); + cpu_emergency_vmxoff(); cpu_emergency_svm_disable(); } diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index bcac3efcde41..302086255be6 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -41,7 +41,7 @@ #include #include #include -#include +#include #include #include #include @@ -743,7 +743,6 @@ static int vmx_set_guest_uret_msr(struct vcpu_vmx *vmx, return ret; } -#ifdef CONFIG_KEXEC_CORE static void crash_vmclear_local_loaded_vmcss(void) { int cpu = raw_smp_processor_id(); @@ -753,7 +752,6 @@ static void crash_vmclear_local_loaded_vmcss(void) loaded_vmcss_on_cpu_link) vmcs_clear(v->vmcs); } -#endif /* CONFIG_KEXEC_CORE */ static void __loaded_vmcs_clear(void *arg) { @@ -8553,10 +8551,9 @@ static void __vmx_exit(void) { allow_smaller_maxphyaddr = false; -#ifdef CONFIG_KEXEC_CORE RCU_INIT_POINTER(crash_vmclear_loaded_vmcss, NULL); synchronize_rcu(); -#endif + vmx_cleanup_l1d_flush(); } @@ -8605,10 +8602,9 @@ static int __init vmx_init(void) pi_init_cpu(cpu); } -#ifdef CONFIG_KEXEC_CORE rcu_assign_pointer(crash_vmclear_loaded_vmcss, crash_vmclear_local_loaded_vmcss); -#endif + vmx_check_vmcs12_offsets(); /* From patchwork Fri Mar 10 21:42:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67756 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1121315wrd; Fri, 10 Mar 2023 14:06:12 -0800 (PST) X-Google-Smtp-Source: AK7set/ozbehb51Khu6qz3TO2WUlYSFsIbKCJwEh/tXw/hHGLK49ZAwDUkJaURrBiTuKSmBI3x9Z X-Received: by 2002:a17:902:e848:b0:19e:7f7f:c8b1 with SMTP id t8-20020a170902e84800b0019e7f7fc8b1mr30422636plg.51.1678485972315; Fri, 10 Mar 2023 14:06:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678485972; cv=none; d=google.com; s=arc-20160816; b=FyKsSYkeQ2ziIOm2zDawtXqWY0/8ujKcIOLc92HfT+j/eDyI+FhlkCmVEbBQlypZjB Cb6WJYkQx96Wep7esQqzpflgrDWV/YQLnBHd81sewKPxMuKybgZbDH19wOCpWlnZycad 3ewOcW0MAE+N0uPPHeI7N8jyF87jk4+BpeQp7ENaZ1CEy49CrPqbwFCFqz6HX5vvjW+B kthOAEE+Lij0PkNMFOydVNeOvAbFU//LI9+8LoU+gQVXuOdgk2rAztem6aq/9HGXtXX7 peLwT2Mj6TLGKmzURbjLFK8MRdWmUxuk43S1to8fWn7i7YlPSnEwaeIBO6RTQ6lguFPX Pi4w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=enCDXi9YsDemt2TTHxfwszJvRc2dXqyk89onukiwfQc=; b=r8pqEKCcxfVcfVyik99AXE+C1tbNF1D7PtUF304PAi2hQD2SAFnTzgK4DK8xW5Clag hvZtxqa8LP+MTFXNlBZdniVO1gPwEzaXAfboMOlXcAJjJyEMNJ0qRABBpMSlJiHcPAwo M2LBwBJcpWudcMHmiekc6yAo0hx9C/FxhiFFvcbCypZvMRORs7g8EAh9DjYxmjOMQ7hr ONWB4Cd7YDydLqCXtehUDczPyq44smr4b72xxhssWTd8MOmlAViE3KlyyVW6PiQ8d0SP dn4ZZaJQIsy6AE3gsNVe8T2Kh7Ismju9Wq0HGq0d4NCDkyenQ/5Sxvu0x+jDMqtTH8/w AQGg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=SPuqihFs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id li11-20020a170903294b00b0019cb8eede49si820288plb.506.2023.03.10.14.05.58; Fri, 10 Mar 2023 14:06:12 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=SPuqihFs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231905AbjCJVmr (ORCPT + 99 others); Fri, 10 Mar 2023 16:42:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57856 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231868AbjCJVmn (ORCPT ); Fri, 10 Mar 2023 16:42:43 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1AD90130C0B for ; Fri, 10 Mar 2023 13:42:42 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id g5-20020a25a485000000b009419f64f6afso7059841ybi.2 for ; Fri, 10 Mar 2023 13:42:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678484561; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=enCDXi9YsDemt2TTHxfwszJvRc2dXqyk89onukiwfQc=; b=SPuqihFsYK9loRsqerF2bubjM61LStKypskZQztDWFydbqKu4vX/erViPPJeSHsWvS rppVs6WV756orTYsyXgV+CjCRh365Fc5NpZI5KUA0XyW3pnmbiYruP15pQapOP52kQla EtuUG+8Jw357D32wLqbTIVCqAPfinsvXQpYfzJMc5sq/caBnqgXO88T8aLxhVIgvOnEb 5owsW7BZvOZY2T8ls1H4Zw3mzTqVb7cXLPtdphlxezMpqOcdGM6cPlgwAnWSJomydpam 5u/+pfPjb1ViCYG8h9uMxcGnfrMh6DUEDezA60Pe82tUdlOloVcnXkBTDLhCHaqAd20r tfIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678484561; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=enCDXi9YsDemt2TTHxfwszJvRc2dXqyk89onukiwfQc=; b=MWlunD7o4pjVIE2lZmcq8SUfZHm+c03UiDbabJHd8XRbxnxHjgALmPd9n5R1prfDD6 yzfGTi3RoA+p4YREg7ionBQqswx59z55fvOYhPDAsmntIkAdU6HH3k0CtH08jzwSjoHC MR+UFhJJtSqiDGlWnbz0P/P4Xd1GZ10fRYkJB55uzMer8bY9o4vFeZvlwy8/1kD1DeyM BBkQEd7Xp5eH0cjjlwunbuFDQL5UXX/lP5eZHWG2gm+O5/KUPPERmyY45F0QEIN3qDxg 1rttoFZZ+CcjSqDBV9jfSbcGi+/e/xNCjeRKLA36f3FbyzO1rIEd+RXlVj5VZSGPLWPA XSSw== X-Gm-Message-State: AO0yUKXpkPQt9GvuRDXyEO89XtLKz7Dt50MDGo7LD2au++ipIREjL1vI sdANEb+N3RRXNlwsN/MTkWUBDGV0mIU= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a81:a989:0:b0:534:1d7:fcf0 with SMTP id g131-20020a81a989000000b0053401d7fcf0mr17579810ywh.1.1678484561398; Fri, 10 Mar 2023 13:42:41 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 13:42:16 -0800 In-Reply-To: <20230310214232.806108-1-seanjc@google.com> Mime-Version: 1.0 References: <20230310214232.806108-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230310214232.806108-3-seanjc@google.com> Subject: [PATCH v2 02/18] x86/reboot: Expose VMCS crash hooks if and only if KVM_INTEL is enabled From: Sean Christopherson To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Sean Christopherson , Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Andrew Cooper , Kai Huang , Chao Gao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760020106690308013?= X-GMAIL-MSGID: =?utf-8?q?1760020106690308013?= Expose the crash/reboot hooks used by KVM to do VMCLEAR+VMXOFF if and only if there's a potential in-tree user, KVM_INTEL. Signed-off-by: Sean Christopherson --- arch/x86/include/asm/reboot.h | 2 ++ arch/x86/kernel/reboot.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/arch/x86/include/asm/reboot.h b/arch/x86/include/asm/reboot.h index 2551baec927d..33c8e911e0de 100644 --- a/arch/x86/include/asm/reboot.h +++ b/arch/x86/include/asm/reboot.h @@ -25,8 +25,10 @@ void __noreturn machine_real_restart(unsigned int type); #define MRR_BIOS 0 #define MRR_APM 1 +#if IS_ENABLED(CONFIG_KVM_INTEL) typedef void crash_vmclear_fn(void); extern crash_vmclear_fn __rcu *crash_vmclear_loaded_vmcss; +#endif void cpu_emergency_disable_virtualization(void); typedef void (*nmi_shootdown_cb)(int, struct pt_regs*); diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index 299b970e5f82..6c0b1634b884 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c @@ -787,6 +787,7 @@ void machine_crash_shutdown(struct pt_regs *regs) } #endif +#if IS_ENABLED(CONFIG_KVM_INTEL) /* * This is used to VMCLEAR all VMCSs loaded on the * processor. And when loading kvm_intel module, the @@ -807,6 +808,7 @@ static inline void cpu_crash_vmclear_loaded_vmcss(void) do_vmclear_operation(); rcu_read_unlock(); } +#endif /* This is the CPU performing the emergency shutdown work. */ int crashing_cpu = -1; @@ -818,7 +820,9 @@ int crashing_cpu = -1; */ void cpu_emergency_disable_virtualization(void) { +#if IS_ENABLED(CONFIG_KVM_INTEL) cpu_crash_vmclear_loaded_vmcss(); +#endif cpu_emergency_vmxoff(); cpu_emergency_svm_disable(); From patchwork Fri Mar 10 21:42:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67728 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1113914wrd; Fri, 10 Mar 2023 13:45:50 -0800 (PST) X-Google-Smtp-Source: AK7set/Cym5/OcNy05MN0qV03/3PLZ14QIxyu3jLhpLSV1IFML492XkunTfep0KP379xkkqtppzd X-Received: by 2002:a05:6a20:9386:b0:cc:d762:64a with SMTP id x6-20020a056a20938600b000ccd762064amr32993199pzh.8.1678484750649; Fri, 10 Mar 2023 13:45:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678484750; cv=none; d=google.com; s=arc-20160816; b=Vq2oXEXiteITiWVaMGiyHzNnQMh9o6l+sRo9XvFl4R/NWYvsiYSOoKitTNO2SxxFRm qb/sdxCunOUMiPiCv886JpWDVnz85qFxoqw63h8mVgDfXRYNbAQhHbSz8B7bE6SIC2DK ykKvgfKxEq6W6TKF2JzIVZii3Tva52QmFentmV1Yr0zezHzSJ4MlSS15eDxjrG4sx/3K IZryWeezBgBALqerEz2ufVlc7bIM47j2Vircy18oEhuVUp6XFPTZ6QvZPxwK53rB67zy YuBCCIoejOjFh8sfIUMjHHNcNwpLhvazp7NXo5RPk2GP69NQfgpIV6DwN9n2WKgid/u7 +Y+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=m9B074ZWiEHZYM5cOwoFqQdD3ATusTMpSAjOh2gg06o=; b=OqI5ojCeb7XE30R6xLUAUal0wgtyN7SAVy3pizRq6Xbzz7YvRu5m0Wdap4e+vDtbmY QAcVSd/6xrPBCKftXI/OzqLPI+GJ8ipGtz+5rFp+v4g6LZcwI6E4PVIjEHglqa6GJzVi gEYYmQbNJ1aAqf7Dlfoac+rQBINoj3TjpaBcVAcIBym9FcOpxTv3sNm5nrwUDdn+ILSJ Lo3YEh7ZdNVibfnib/OEcMMIvNHED312cr61vTRkcWWYPASIyUFXwySEJ500qWhQ5AN1 Tm73Mh/giwZHGv5bdFjVmkG9CCedHJRtvyfbbIeQP+zZ5Kgr+ZzLS6vOfMKZVhTEywwu m7aQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=Xi0Ldulp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f17-20020a631011000000b004ff7002e3f9si737948pgl.164.2023.03.10.13.45.32; Fri, 10 Mar 2023 13:45:50 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=Xi0Ldulp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231872AbjCJVmw (ORCPT + 99 others); Fri, 10 Mar 2023 16:42:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57934 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231886AbjCJVmo (ORCPT ); Fri, 10 Mar 2023 16:42:44 -0500 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D0B6E130C00 for ; Fri, 10 Mar 2023 13:42:43 -0800 (PST) Received: by mail-pl1-x64a.google.com with SMTP id m9-20020a170902db0900b0019ea0e227e4so3427598plx.6 for ; Fri, 10 Mar 2023 13:42:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678484563; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=m9B074ZWiEHZYM5cOwoFqQdD3ATusTMpSAjOh2gg06o=; b=Xi0LdulpSAj5xMQpDvfavN0f/y7xMY/kjeHiUUYhU2XVndRnwmBBUtQboHMhjo6cNN ZyCsDsTxXx8CQ8td4o51Kroke1ngCZCjZ8UwITBNeFUI+az9fmxHSh/AwPKonTDo1VQK uNgTRlSSucxi/QlCB0o912iZP2u6754DtJk+ZKN8ScdL+MdhE0DC+HPJxVVLDbZoi2bP vDUScLT584Qza/HDtme1czgDS5a8e9HgWQF11yJG7pcFCqR4onL/85xnciWUaLlQWKCx C1gbODJnvg5RuJf9QtfEHMaXIad15rTqI2a7tfN7rspYr5D3otXBgC/gSY1qEPEpHPD7 iiGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678484563; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=m9B074ZWiEHZYM5cOwoFqQdD3ATusTMpSAjOh2gg06o=; b=IQuGfa/SlRKxX+ltezDqSeSB7Se1b0vG6UJmqV5KvhTwtxGX0qPpSvhTMbnh5zeiXu aFsYaB5Ny9S4YI8njyc4CA3N3Ssq3Igr7TJv1qfddLNOBk6/j/2n/259efQlVQ8eDGqC zcG2Dg7ejEPEOAdzmUO597yUGfdnPY4bXLmr5ijG6XYFsyzxRM4v77nzjURN64JVXCim OMRIWve6hmfoQCgD81Kquk2WdV+kyGGnEyNs2dtTz3qih1F/riDwS12R2hAwkI2EQIpZ BEHvbGrUISshnyQxfhxUvgunlPdjU0NIGZwWiVjlAivFgg2pyp+AWgtKjtkEM+9soF+T w3vQ== X-Gm-Message-State: AO0yUKVhHYlz7oCa2iDpnLye0yezgp0M0Wk5uqgRfS4j7jfXSsZ/+vie WrE+zgUIOYIafxgn/uMJa0HYkYhpBOI= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:903:3312:b0:19d:756:d99c with SMTP id jk18-20020a170903331200b0019d0756d99cmr10284912plb.1.1678484563343; Fri, 10 Mar 2023 13:42:43 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 13:42:17 -0800 In-Reply-To: <20230310214232.806108-1-seanjc@google.com> Mime-Version: 1.0 References: <20230310214232.806108-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230310214232.806108-4-seanjc@google.com> Subject: [PATCH v2 03/18] x86/reboot: Harden virtualization hooks for emergency reboot From: Sean Christopherson To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Sean Christopherson , Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Andrew Cooper , Kai Huang , Chao Gao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760018825916450830?= X-GMAIL-MSGID: =?utf-8?q?1760018825916450830?= Provide dedicated helpers to (un)register virt hooks used during an emergency crash/reboot, and WARN if there is an attempt to overwrite the registered callback, or an attempt to do an unpaired unregister. Opportunsitically use rcu_assign_pointer() instead of RCU_INIT_POINTER(), mainly so that the set/unset paths are more symmetrical, but also because any performance gains from using RCU_INIT_POINTER() are meaningless for this code. Signed-off-by: Sean Christopherson --- arch/x86/include/asm/reboot.h | 5 +++-- arch/x86/kernel/reboot.c | 30 ++++++++++++++++++++++++------ arch/x86/kvm/vmx/vmx.c | 6 ++---- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/arch/x86/include/asm/reboot.h b/arch/x86/include/asm/reboot.h index 33c8e911e0de..1d098a7d329a 100644 --- a/arch/x86/include/asm/reboot.h +++ b/arch/x86/include/asm/reboot.h @@ -26,8 +26,9 @@ void __noreturn machine_real_restart(unsigned int type); #define MRR_APM 1 #if IS_ENABLED(CONFIG_KVM_INTEL) -typedef void crash_vmclear_fn(void); -extern crash_vmclear_fn __rcu *crash_vmclear_loaded_vmcss; +typedef void (cpu_emergency_virt_cb)(void); +void cpu_emergency_register_virt_callback(cpu_emergency_virt_cb *callback); +void cpu_emergency_unregister_virt_callback(cpu_emergency_virt_cb *callback); #endif void cpu_emergency_disable_virtualization(void); diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index 6c0b1634b884..78182b2969db 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c @@ -795,17 +795,35 @@ void machine_crash_shutdown(struct pt_regs *regs) * * protected by rcu. */ -crash_vmclear_fn __rcu *crash_vmclear_loaded_vmcss; -EXPORT_SYMBOL_GPL(crash_vmclear_loaded_vmcss); +static cpu_emergency_virt_cb __rcu *cpu_emergency_virt_callback; + +void cpu_emergency_register_virt_callback(cpu_emergency_virt_cb *callback) +{ + if (WARN_ON_ONCE(rcu_access_pointer(cpu_emergency_virt_callback))) + return; + + rcu_assign_pointer(cpu_emergency_virt_callback, callback); +} +EXPORT_SYMBOL_GPL(cpu_emergency_register_virt_callback); + +void cpu_emergency_unregister_virt_callback(cpu_emergency_virt_cb *callback) +{ + if (WARN_ON_ONCE(rcu_access_pointer(cpu_emergency_virt_callback) != callback)) + return; + + rcu_assign_pointer(cpu_emergency_virt_callback, NULL); + synchronize_rcu(); +} +EXPORT_SYMBOL_GPL(cpu_emergency_unregister_virt_callback); static inline void cpu_crash_vmclear_loaded_vmcss(void) { - crash_vmclear_fn *do_vmclear_operation = NULL; + cpu_emergency_virt_cb *callback; rcu_read_lock(); - do_vmclear_operation = rcu_dereference(crash_vmclear_loaded_vmcss); - if (do_vmclear_operation) - do_vmclear_operation(); + callback = rcu_dereference(cpu_emergency_virt_callback); + if (callback) + callback(); rcu_read_unlock(); } #endif diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 302086255be6..41095fc864f3 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -8551,8 +8551,7 @@ static void __vmx_exit(void) { allow_smaller_maxphyaddr = false; - RCU_INIT_POINTER(crash_vmclear_loaded_vmcss, NULL); - synchronize_rcu(); + cpu_emergency_unregister_virt_callback(crash_vmclear_local_loaded_vmcss); vmx_cleanup_l1d_flush(); } @@ -8602,8 +8601,7 @@ static int __init vmx_init(void) pi_init_cpu(cpu); } - rcu_assign_pointer(crash_vmclear_loaded_vmcss, - crash_vmclear_local_loaded_vmcss); + cpu_emergency_register_virt_callback(crash_vmclear_local_loaded_vmcss); vmx_check_vmcs12_offsets(); From patchwork Fri Mar 10 21:42:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67729 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1114167wrd; Fri, 10 Mar 2023 13:46:27 -0800 (PST) X-Google-Smtp-Source: AK7set8XhFjF8nvoIF5N7P2OkzQmEYndcvPy6xjkDZwlZWwGLqoI33h2jyh8QflVh3C7mnE9pIpc X-Received: by 2002:a62:7905:0:b0:5a9:c75f:bcc4 with SMTP id u5-20020a627905000000b005a9c75fbcc4mr28532920pfc.25.1678484787618; Fri, 10 Mar 2023 13:46:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678484787; cv=none; d=google.com; s=arc-20160816; b=O9wJWDf7mpZ6xugbupSS8yft9/azUU3I783u/xUBu64eSRKQPiBWJGqCdMZdJlgc04 JsheF73MjApM6ZHTpTJSqQKGGCqv2Vub2KRissO9dgTtIGIPyMR/QlpJ/z87zGxFYyJ/ nQkSKH1qU28jH7Tpxt7PC9rHXWt0gJ/FDZn+DtijF4aCGrwTOqvxqpR7KXHSsNGFk2Zt cw/BkE3dhtwywwU1yOq3pyae6Ww+F5wHXPpWCS8iX7c0fc3XUEmREL0n0TqAQjhJniVK zhLiSXrLvP1mQuHleLXoKys9t3+1S54g3rjJA+G/rc5cUON6/1mcDAO3JzoqUjSvh8sQ qonQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=ZTdlaahA+hJ1PbOJKq8XkVSpenQe+RFMEt4am3hb+Bk=; b=Spqy1kt7ID7yG0Pr+Vx5vRTRP/vCEuu1L+BZfSgXyrMvjwFECCC9NRtq2O0qJgcmzA awMMbG4PEt3M+OpBo2s3y0s4jgfBgwzQHZfkYeVEoXS8vezerH+elAZITYFzMTuZYY44 MhaR59g0vCbvEAc4HrjNkgORURX2q3ChLxVauNafC3kHQeDCbuenQjSRcb9bTeCBSOwt AXTYdnj1RFmesrFteXFT5OAzyJ9ltDPUaMughUv8kAF76Y0a3D3qMAsDuwVUaf0SKweR /pL5j/LpFCZFmLjPu/NaavSucDgKVY7nY38fiL9ezAefBk7osddsmylsJiozfjYDJXYN 7rTg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=BOROzPRv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b2-20020aa79502000000b005cd33628c0fsi583047pfp.177.2023.03.10.13.46.12; Fri, 10 Mar 2023 13:46:27 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=BOROzPRv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231886AbjCJVnD (ORCPT + 99 others); Fri, 10 Mar 2023 16:43:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58066 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231904AbjCJVmr (ORCPT ); Fri, 10 Mar 2023 16:42:47 -0500 Received: from mail-pf1-x44a.google.com (mail-pf1-x44a.google.com [IPv6:2607:f8b0:4864:20::44a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 16CE8132BDB for ; Fri, 10 Mar 2023 13:42:46 -0800 (PST) Received: by mail-pf1-x44a.google.com with SMTP id bw25-20020a056a00409900b005a9d0e66a7aso3444948pfb.5 for ; Fri, 10 Mar 2023 13:42:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678484565; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=ZTdlaahA+hJ1PbOJKq8XkVSpenQe+RFMEt4am3hb+Bk=; b=BOROzPRv5X6s9tSVq3z98BwKTJA8HOlvQwrcpQkN6WYT7vS2UberlqOHxU6LOf9/No vnPJYo/hIcw84Y+K5/ymxzpbt0gx6purMOlBR2LqSk9NI7rUSgZcDRmCx8zDGlZjeE9H 2qB5i7GsugLTyrrDTn+QrsaKhxR30KMebMJm5Gjz9KQlN1hWLt0uKWdyf+9aFJpQMZa6 KJ+SVMO1L7qsi3MHudN5kpGpyKDTqWIiiXuwIXT7o2rvhSrvIDWZfaJsg46m/A9tCCRm L9mRTradiTVpYVq0IUgcq+EgTnDxAkQzskCQKbLf6sxeM4gQI7gDohUU3Hvvv91ntW6F Mbiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678484565; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ZTdlaahA+hJ1PbOJKq8XkVSpenQe+RFMEt4am3hb+Bk=; b=tnYcWnwJB9gD1OQKSdFQX17+2Qif8cGkmKFI0RAyigxAJYoZpk1Q7sTVKTIp7oxqec 3hwQ9uB/dtRFR97GjDegYJCp387JqQWpiWtUeya8D4JhlKRNhtNIQB67xPah7Jrfy1D4 YKiuLCtyokjThqtvEbcOyWtHUHnkptWw3dGk/t84Z8kT1Vnd/yqri+f0dqG8wRJ899dL A4VkUqFSZrSGS+g/TzvePzfVY82qb7qbtL8cKECQojz/6KkA5SwvP+Fl54aWFMJ4fC/r SOCIcKs7Dt45FWPu23GJ/m86BOQXtrJmUioEBKTgNol75f6e1otbLxqF+mXgfndv66ow 7Pug== X-Gm-Message-State: AO0yUKWTx3YXcJrEJFEnfeK5yljHLNgmrV1NsnUqp65PvaLJG0qwU0Xv 8IWISw49UNq7Ifij4dSPnKojPRqu/XY= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a63:2746:0:b0:503:83e8:9b54 with SMTP id n67-20020a632746000000b0050383e89b54mr1160320pgn.1.1678484565499; Fri, 10 Mar 2023 13:42:45 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 13:42:18 -0800 In-Reply-To: <20230310214232.806108-1-seanjc@google.com> Mime-Version: 1.0 References: <20230310214232.806108-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230310214232.806108-5-seanjc@google.com> Subject: [PATCH v2 04/18] x86/reboot: KVM: Handle VMXOFF in KVM's reboot callback From: Sean Christopherson To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Sean Christopherson , Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Andrew Cooper , Kai Huang , Chao Gao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760018864270212312?= X-GMAIL-MSGID: =?utf-8?q?1760018864270212312?= Use KVM VMX's reboot/crash callback to do VMXOFF in an emergency instead of manually and blindly doing VMXOFF. There's no need to attempt VMXOFF if KVM (or some other out-of-tree hypervisor) isn't loaded/active, i.e. if the CPU can't possibly be post-VMXON. Signed-off-by: Sean Christopherson --- arch/x86/include/asm/virtext.h | 10 ---------- arch/x86/kernel/reboot.c | 30 +++++++++--------------------- arch/x86/kvm/vmx/vmx.c | 8 +++++--- 3 files changed, 14 insertions(+), 34 deletions(-) diff --git a/arch/x86/include/asm/virtext.h b/arch/x86/include/asm/virtext.h index 3b12e6b99412..5bc29fab15da 100644 --- a/arch/x86/include/asm/virtext.h +++ b/arch/x86/include/asm/virtext.h @@ -70,16 +70,6 @@ static inline void __cpu_emergency_vmxoff(void) cpu_vmxoff(); } -/** Disable VMX if it is supported and enabled on the current CPU - */ -static inline void cpu_emergency_vmxoff(void) -{ - if (cpu_has_vmx()) - __cpu_emergency_vmxoff(); -} - - - /* * SVM functions: diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index 78182b2969db..5fb1fbf14c82 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c @@ -788,13 +788,7 @@ void machine_crash_shutdown(struct pt_regs *regs) #endif #if IS_ENABLED(CONFIG_KVM_INTEL) -/* - * This is used to VMCLEAR all VMCSs loaded on the - * processor. And when loading kvm_intel module, the - * callback function pointer will be assigned. - * - * protected by rcu. - */ +/* RCU-protected callback to disable virtualization prior to reboot. */ static cpu_emergency_virt_cb __rcu *cpu_emergency_virt_callback; void cpu_emergency_register_virt_callback(cpu_emergency_virt_cb *callback) @@ -815,17 +809,6 @@ void cpu_emergency_unregister_virt_callback(cpu_emergency_virt_cb *callback) synchronize_rcu(); } EXPORT_SYMBOL_GPL(cpu_emergency_unregister_virt_callback); - -static inline void cpu_crash_vmclear_loaded_vmcss(void) -{ - cpu_emergency_virt_cb *callback; - - rcu_read_lock(); - callback = rcu_dereference(cpu_emergency_virt_callback); - if (callback) - callback(); - rcu_read_unlock(); -} #endif /* This is the CPU performing the emergency shutdown work. */ @@ -839,10 +822,15 @@ int crashing_cpu = -1; void cpu_emergency_disable_virtualization(void) { #if IS_ENABLED(CONFIG_KVM_INTEL) - cpu_crash_vmclear_loaded_vmcss(); -#endif + cpu_emergency_virt_cb *callback; - cpu_emergency_vmxoff(); + rcu_read_lock(); + callback = rcu_dereference(cpu_emergency_virt_callback); + if (callback) + callback(); + rcu_read_unlock(); +#endif + /* KVM_AMD doesn't yet utilize the common callback. */ cpu_emergency_svm_disable(); } diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 41095fc864f3..9e196b9fe183 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -743,7 +743,7 @@ static int vmx_set_guest_uret_msr(struct vcpu_vmx *vmx, return ret; } -static void crash_vmclear_local_loaded_vmcss(void) +static void vmx_emergency_disable(void) { int cpu = raw_smp_processor_id(); struct loaded_vmcs *v; @@ -751,6 +751,8 @@ static void crash_vmclear_local_loaded_vmcss(void) list_for_each_entry(v, &per_cpu(loaded_vmcss_on_cpu, cpu), loaded_vmcss_on_cpu_link) vmcs_clear(v->vmcs); + + __cpu_emergency_vmxoff(); } static void __loaded_vmcs_clear(void *arg) @@ -8551,7 +8553,7 @@ static void __vmx_exit(void) { allow_smaller_maxphyaddr = false; - cpu_emergency_unregister_virt_callback(crash_vmclear_local_loaded_vmcss); + cpu_emergency_unregister_virt_callback(vmx_emergency_disable); vmx_cleanup_l1d_flush(); } @@ -8601,7 +8603,7 @@ static int __init vmx_init(void) pi_init_cpu(cpu); } - cpu_emergency_register_virt_callback(crash_vmclear_local_loaded_vmcss); + cpu_emergency_register_virt_callback(vmx_emergency_disable); vmx_check_vmcs12_offsets(); From patchwork Fri Mar 10 21:42:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67750 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1119208wrd; Fri, 10 Mar 2023 14:01:41 -0800 (PST) X-Google-Smtp-Source: AK7set/gjaP1Omd+M1AgtXWDIu9Vvk5z+CYpJEMHap6YwDDg8dfC36/rsM95h3f/iQs4E0weaizu X-Received: by 2002:a05:6a20:898f:b0:cd:f17:5292 with SMTP id h15-20020a056a20898f00b000cd0f175292mr26544039pzg.44.1678485701609; Fri, 10 Mar 2023 14:01:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678485701; cv=none; d=google.com; s=arc-20160816; b=LVkUM9flr/P65fU1Wx1S6IFi4tnN814H1GHF6KVYZNLZbp6i3IrFnAnIbBlIr7kDcJ sR77NBVSJ98I7B/ZiJ3Ttw7YMpZaIdW23mbQduHK/4xZjY2yru6hzQd2jMcOe4lG38vZ 3USGMhM4RTDpl99JbTKkZ3rwJZ/OlwHwPSS1+6xWdaZVIS89mJOroF8MlINWrkeTdcHH B16hEUYO7iHp/YuqHuJJ6vHAmTCNAuUoYSr6LV8zh7YIrHn/CnogeDsqouBrChysnJqZ 15XoIj1cjoDtNr+VhGBSm3oBcpiFxY0+fr/zYlwHs8WIOEOc0kjBFqycO4IvVeoZ4NYJ vBeg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=6AjMm+ZIflXjbG/NDelvXH8TSuo2TKT9NTo2PS7seCw=; b=0975dbyCqqRnF1E4DdMgDnMgVRhm4ep9WEEgeHys5d2tduKZwkoa6SbCewpXtBXz95 EmpRx4XuJq4W+B1GXBeG5ZtCIyArBqK7t7fuerceRAzcvP1UOvk/AS0f/Jq/cRldtqZc ZKqMQCR6zDhZYs+oJltjiYYkPhgGAXqVnIuPeku0ROCOtRzELUfZ6Ue1PuTl2xCfwlpG x9n4Q2C/fiYz6LI+SHuX0YKWhZ+yEYt8QGXYsTAgRD7EeexlyfT00QHu/6xS3wZHd35+ dXjohzDdA4WifYi427R/7Jb7x1OjI6rt+71uo/A6AV/VuNSGoSIlhgd0nhHWqb6gqeoD Y0dQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=Qw1EdmDh; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 83-20020a630256000000b004fbd2a5db20si719558pgc.538.2023.03.10.14.01.28; Fri, 10 Mar 2023 14:01:41 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=Qw1EdmDh; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231461AbjCJVnG (ORCPT + 99 others); Fri, 10 Mar 2023 16:43:06 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58516 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231927AbjCJVmz (ORCPT ); Fri, 10 Mar 2023 16:42:55 -0500 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CF4A71308F8 for ; Fri, 10 Mar 2023 13:42:47 -0800 (PST) Received: by mail-pl1-x64a.google.com with SMTP id u4-20020a170902bf4400b0019e30a57694so3511732pls.20 for ; Fri, 10 Mar 2023 13:42:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678484567; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=6AjMm+ZIflXjbG/NDelvXH8TSuo2TKT9NTo2PS7seCw=; b=Qw1EdmDhXaeYs1tE5XZaNY1Ci+xXV0fhwEeQm8/bJRZ42DmkCzGLUDPeyGTOgJGVEK 7wxUV1aVPx2u8QqcjPKcwpnh8EbRvNn/NZ7kB4tUYIcTwc2h6iSgUrMitfaB2Sc5t+D5 gkIUnlg3UsW/Kjbt5BlyrQy4s6bx5R0O2TBUE0NaJ4Hwr+MeINZ+kbAa377moYsHMkKE 1ZMHIceeOUqdT5nxA4BsJ62tO0RwiR6qi94zhB5bNZ7uBcIa4PhX9T7yvfHjJxL71kzb ugpq53ovQTF50Gs4t+JbNjsf2q5WWdeqDnamFuNJuTN7Ce6VwLw7Ijz0PAcYPiKlQXPG 82gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678484567; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=6AjMm+ZIflXjbG/NDelvXH8TSuo2TKT9NTo2PS7seCw=; b=UDUxpwYl0OQhJ1SG/Vrhdt+fD4UN5FtPF010Qyy1QogFam6TXqazKZmNsiTmFreFP0 WNlA1w9LLZlgoaE663stMnMsQivpwxg+jzn5S8UZzQ/iyHcVN0HFFLpunBvNwFDPzu1b ayTnwKKaoGZyIY/QBtFn0h10ab8CAvyoR6l4aBwJs3rh4peKMiUdXjDzg++575RK+V7t W5nuktro5CVUy+RIr435/2SzlH6bIbTOLaCKoy8zFRkiMoIMv9yqwcya5NM/Z0YRXXPa F13q4h9AeMHlTl0xEWd9N/jZjiH/3Umdv3Zte49pqFSUgmhdC4TGN8bGESv5oEK5ae1m 9AQg== X-Gm-Message-State: AO0yUKUDs/3U+7BefZvDqfm0j0bik9GDQ8DBE7HiKyookZogOe8e+RPT HaZUf+nqNulO82eWB7e06Ihv6HtD0h8= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:903:4282:b0:19a:ac0b:9d93 with SMTP id ju2-20020a170903428200b0019aac0b9d93mr10675117plb.0.1678484567461; Fri, 10 Mar 2023 13:42:47 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 13:42:19 -0800 In-Reply-To: <20230310214232.806108-1-seanjc@google.com> Mime-Version: 1.0 References: <20230310214232.806108-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230310214232.806108-6-seanjc@google.com> Subject: [PATCH v2 05/18] x86/reboot: KVM: Disable SVM during reboot via virt/KVM reboot callback From: Sean Christopherson To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Sean Christopherson , Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Andrew Cooper , Kai Huang , Chao Gao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760019822684006113?= X-GMAIL-MSGID: =?utf-8?q?1760019822684006113?= Use the virt callback to disable SVM (and set GIF=1) during an emergency instead of blindly attempting to disable SVM. Like the VMX case, if KVM (or an out-of-tree hypervisor) isn't loaded/active, SVM can't be in use. Signed-off-by: Sean Christopherson --- arch/x86/include/asm/reboot.h | 2 +- arch/x86/include/asm/virtext.h | 8 -------- arch/x86/kernel/reboot.c | 6 ++---- arch/x86/kvm/svm/svm.c | 19 +++++++++++++++++-- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/arch/x86/include/asm/reboot.h b/arch/x86/include/asm/reboot.h index 1d098a7d329a..dc2b77e6704b 100644 --- a/arch/x86/include/asm/reboot.h +++ b/arch/x86/include/asm/reboot.h @@ -25,7 +25,7 @@ void __noreturn machine_real_restart(unsigned int type); #define MRR_BIOS 0 #define MRR_APM 1 -#if IS_ENABLED(CONFIG_KVM_INTEL) +#if IS_ENABLED(CONFIG_KVM_INTEL) || IS_ENABLED(CONFIG_KVM_AMD) typedef void (cpu_emergency_virt_cb)(void); void cpu_emergency_register_virt_callback(cpu_emergency_virt_cb *callback); void cpu_emergency_unregister_virt_callback(cpu_emergency_virt_cb *callback); diff --git a/arch/x86/include/asm/virtext.h b/arch/x86/include/asm/virtext.h index 5bc29fab15da..aaed66249ccf 100644 --- a/arch/x86/include/asm/virtext.h +++ b/arch/x86/include/asm/virtext.h @@ -133,12 +133,4 @@ static inline void cpu_svm_disable(void) } } -/** Makes sure SVM is disabled, if it is supported on the CPU - */ -static inline void cpu_emergency_svm_disable(void) -{ - if (cpu_has_svm(NULL)) - cpu_svm_disable(); -} - #endif /* _ASM_X86_VIRTEX_H */ diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index 5fb1fbf14c82..db535542b7ab 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c @@ -787,7 +787,7 @@ void machine_crash_shutdown(struct pt_regs *regs) } #endif -#if IS_ENABLED(CONFIG_KVM_INTEL) +#if IS_ENABLED(CONFIG_KVM_INTEL) || IS_ENABLED(CONFIG_KVM_AMD) /* RCU-protected callback to disable virtualization prior to reboot. */ static cpu_emergency_virt_cb __rcu *cpu_emergency_virt_callback; @@ -821,7 +821,7 @@ int crashing_cpu = -1; */ void cpu_emergency_disable_virtualization(void) { -#if IS_ENABLED(CONFIG_KVM_INTEL) +#if IS_ENABLED(CONFIG_KVM_INTEL) || IS_ENABLED(CONFIG_KVM_AMD) cpu_emergency_virt_cb *callback; rcu_read_lock(); @@ -830,8 +830,6 @@ void cpu_emergency_disable_virtualization(void) callback(); rcu_read_unlock(); #endif - /* KVM_AMD doesn't yet utilize the common callback. */ - cpu_emergency_svm_disable(); } #if defined(CONFIG_SMP) diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index b43775490074..541dd978a94b 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -38,6 +38,7 @@ #include #include #include +#include #include #include @@ -565,6 +566,11 @@ void __svm_write_tsc_multiplier(u64 multiplier) preempt_enable(); } +static void svm_emergency_disable(void) +{ + cpu_svm_disable(); +} + static void svm_hardware_disable(void) { /* Make sure we clean up behind us */ @@ -5092,6 +5098,13 @@ static struct kvm_x86_init_ops svm_init_ops __initdata = { .pmu_ops = &amd_pmu_ops, }; +static void __svm_exit(void) +{ + kvm_x86_vendor_exit(); + + cpu_emergency_unregister_virt_callback(svm_emergency_disable); +} + static int __init svm_init(void) { int r; @@ -5105,6 +5118,8 @@ static int __init svm_init(void) if (r) return r; + cpu_emergency_register_virt_callback(svm_emergency_disable); + /* * Common KVM initialization _must_ come last, after this, /dev/kvm is * exposed to userspace! @@ -5117,14 +5132,14 @@ static int __init svm_init(void) return 0; err_kvm_init: - kvm_x86_vendor_exit(); + __svm_exit(); return r; } static void __exit svm_exit(void) { kvm_exit(); - kvm_x86_vendor_exit(); + __svm_exit(); } module_init(svm_init) From patchwork Fri Mar 10 21:42:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67757 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1121317wrd; Fri, 10 Mar 2023 14:06:12 -0800 (PST) X-Google-Smtp-Source: AK7set+Ii0XoKcT4uY0Q3sm4yr+gzydDLyYAW7O29FNC6BKyt5GkFLiBacX1zynX56n2Qq4wy3X1 X-Received: by 2002:a05:6a20:42aa:b0:c7:13be:6dec with SMTP id o42-20020a056a2042aa00b000c713be6decmr29736256pzj.15.1678485972327; Fri, 10 Mar 2023 14:06:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678485972; cv=none; d=google.com; s=arc-20160816; b=AIG/I6DqsvZLBWCeuAaU60VgAGPE4Tb55EvKAqHIJYk6jDmv7AEDz1f8ripHsELoFw /ZSGpTTo/RJUDmTK0ZZRJpbt5zFJVxaXlc4VB1Z4bTMAD9jS/CHfWRJ9KILzJ9adVzi/ 6GLacGibrtj2ijp7AZi+wmX/Y5XKq6uI/5Rfnc2Z9MHv7s8MFGltWCPch0rrq3bkKQdI FfqOKG14Lb/DvFMmxdHhm47CgmO0KRtWe9qsx1JWBCkGHG2rMvhs51gX5ucuyGNP4RL1 9GQc1D5NiqkR+enPelnXcYgLECjDuM+oY2LEqovIfEOu0qL+TvwB0GhifInz9yJptDjI +SbA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=w80rZt1o6cOYQZQj30lqAx7Xyo1RS8UfRwRwdGlfA5I=; b=aBh2Ut78OliyiqMNTp8iccBWztu7lFrnMfE7+/YdF+bj1ifMI/kwmXh/Oum/X3Jh5+ 3g3wGqtNuAxwNAspdrW2QkSvNfwQWAlVsysr9C+Zi7xMTiGwkcIGssSME5vmWCvotxsZ /Z2+QypIIgCVEpIvPdP8y0W0hexQEKsWNY18Uw9s1ReEAX7utOe9bPGmHmE5HutwUdkt 7/x7S0uQY/JqYPP1fU9GkMucbynH5Sfnyrq8nqOc92pHZS8yIJr+/uaF1O0xiYzsWBRL wy21V82nD4juG3xXm2iPHNdurmwXCO6WbCmRD5ytld4kDp+0HzQuF5zyFwpHPub3FFGv m22A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=D1LjzQtD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x7-20020aa79407000000b005a9c4c41b0esi643959pfo.22.2023.03.10.14.05.57; Fri, 10 Mar 2023 14:06:12 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=D1LjzQtD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231991AbjCJVnL (ORCPT + 99 others); Fri, 10 Mar 2023 16:43:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59014 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231935AbjCJVnB (ORCPT ); Fri, 10 Mar 2023 16:43:01 -0500 Received: from mail-pf1-x44a.google.com (mail-pf1-x44a.google.com [IPv6:2607:f8b0:4864:20::44a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 92C83132BF9 for ; Fri, 10 Mar 2023 13:42:49 -0800 (PST) Received: by mail-pf1-x44a.google.com with SMTP id cj27-20020a056a00299b00b005f1ef2e4e1aso3429562pfb.6 for ; Fri, 10 Mar 2023 13:42:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678484569; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=w80rZt1o6cOYQZQj30lqAx7Xyo1RS8UfRwRwdGlfA5I=; b=D1LjzQtDn3DaIVmk+eWNv1i1Smgll06esksBMYRtrPoSiyJXPFYHGx8lYzRTrwHy8H k6yg5HOeairVqcCZCqaNu+AcodZw7lkuYgDz7s9MLxchdJ80fWDX2PveGpRPNMvDqGbG 7C0VtGgcqRGW4TYwssBbVw/fQtDTEfymsV2cj96lg2hGaHH5SrwAbmxbqB6QKiEnTTNI fRS5j+bf8z102qj3qCWu1WQPwErM85UXnc0/OHiZea1DjI4zo8yrUbV8+vU1FR8UlifZ Dj5OhNC4iDvDQwHFKx0UhlSQBgLhPrS874lqzBQkzYZLG7mPurRcKAiodPzPSq0Kju1X tDmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678484569; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=w80rZt1o6cOYQZQj30lqAx7Xyo1RS8UfRwRwdGlfA5I=; b=g2WR6wW60U+rviuz09/S+JYZIFwSXLItLkf9rTJB85FcMl913UbCTggdPy8thQQkG8 V7j42l7fMquzc2ZHUrT+y8nnoawcgHlAliE9U3v5kiMr7iJQ1InM4bA4302R+L5oJ8RN pZjiJu1NkJH7L0oS4cTrwGLUB3V8qHSR0O2iG26X+lBnao8e5MmWmAsRFDomGMUu+peW SVEd+8gltH8rmSbZ8yXkkY/rmoyAmSXjdxlr4WTYobfRLM1mj0TL1x3p2ev57Vl8FdT3 gjjzN5lpIU6jdmhjVd44Fwlnf0vkHhE95EN121LeU1rkNacknNnj8YdErO902IbscA9n dH1Q== X-Gm-Message-State: AO0yUKWrZnR8N1HgWK0SjTOZWn/oR2zxn0fFnfTCLqVSgbRm5TW+RUDa dUWne+EMZZxpcsDGM0YWoG9CXb4/AIA= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a63:201d:0:b0:507:4697:392d with SMTP id g29-20020a63201d000000b005074697392dmr6810447pgg.7.1678484569126; Fri, 10 Mar 2023 13:42:49 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 13:42:20 -0800 In-Reply-To: <20230310214232.806108-1-seanjc@google.com> Mime-Version: 1.0 References: <20230310214232.806108-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230310214232.806108-7-seanjc@google.com> Subject: [PATCH v2 06/18] x86/reboot: Hoist "disable virt" helpers above "emergency reboot" path From: Sean Christopherson To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Sean Christopherson , Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Andrew Cooper , Kai Huang , Chao Gao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760020106984864570?= X-GMAIL-MSGID: =?utf-8?q?1760020106984864570?= Move the various "disable virtualization" helpers above the emergency reboot path so that emergency_reboot_disable_virtualization() can be stubbed out in a future patch if neither KVM_INTEL nor KVM_AMD is enabled, i.e. if there is no in-tree user of CPU virtualization. No functional change intended. Signed-off-by: Sean Christopherson --- arch/x86/include/asm/reboot.h | 4 +- arch/x86/kernel/reboot.c | 82 +++++++++++++++++------------------ 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/arch/x86/include/asm/reboot.h b/arch/x86/include/asm/reboot.h index dc2b77e6704b..2be5b89c9a05 100644 --- a/arch/x86/include/asm/reboot.h +++ b/arch/x86/include/asm/reboot.h @@ -29,8 +29,10 @@ void __noreturn machine_real_restart(unsigned int type); typedef void (cpu_emergency_virt_cb)(void); void cpu_emergency_register_virt_callback(cpu_emergency_virt_cb *callback); void cpu_emergency_unregister_virt_callback(cpu_emergency_virt_cb *callback); -#endif void cpu_emergency_disable_virtualization(void); +#else +static inline void cpu_emergency_disable_virtualization(void) {} +#endif typedef void (*nmi_shootdown_cb)(int, struct pt_regs*); void nmi_panic_self_stop(struct pt_regs *regs); diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index db535542b7ab..cb268ec7ce85 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c @@ -530,6 +530,46 @@ static inline void kb_wait(void) static inline void nmi_shootdown_cpus_on_restart(void); +#if IS_ENABLED(CONFIG_KVM_INTEL) || IS_ENABLED(CONFIG_KVM_AMD) +/* RCU-protected callback to disable virtualization prior to reboot. */ +static cpu_emergency_virt_cb __rcu *cpu_emergency_virt_callback; + +void cpu_emergency_register_virt_callback(cpu_emergency_virt_cb *callback) +{ + if (WARN_ON_ONCE(rcu_access_pointer(cpu_emergency_virt_callback))) + return; + + rcu_assign_pointer(cpu_emergency_virt_callback, callback); +} +EXPORT_SYMBOL_GPL(cpu_emergency_register_virt_callback); + +void cpu_emergency_unregister_virt_callback(cpu_emergency_virt_cb *callback) +{ + if (WARN_ON_ONCE(rcu_access_pointer(cpu_emergency_virt_callback) != callback)) + return; + + rcu_assign_pointer(cpu_emergency_virt_callback, NULL); + synchronize_rcu(); +} +EXPORT_SYMBOL_GPL(cpu_emergency_unregister_virt_callback); + +/* + * Disable virtualization, i.e. VMX or SVM, to ensure INIT is recognized during + * reboot. VMX blocks INIT if the CPU is post-VMXON, and SVM blocks INIT if + * GIF=0, i.e. if the crash occurred between CLGI and STGI. + */ +void cpu_emergency_disable_virtualization(void) +{ + cpu_emergency_virt_cb *callback; + + rcu_read_lock(); + callback = rcu_dereference(cpu_emergency_virt_callback); + if (callback) + callback(); + rcu_read_unlock(); +} +#endif /* CONFIG_KVM_INTEL || CONFIG_KVM_AMD */ + static void emergency_reboot_disable_virtualization(void) { /* Just make sure we won't change CPUs while doing this */ @@ -787,51 +827,9 @@ void machine_crash_shutdown(struct pt_regs *regs) } #endif -#if IS_ENABLED(CONFIG_KVM_INTEL) || IS_ENABLED(CONFIG_KVM_AMD) -/* RCU-protected callback to disable virtualization prior to reboot. */ -static cpu_emergency_virt_cb __rcu *cpu_emergency_virt_callback; - -void cpu_emergency_register_virt_callback(cpu_emergency_virt_cb *callback) -{ - if (WARN_ON_ONCE(rcu_access_pointer(cpu_emergency_virt_callback))) - return; - - rcu_assign_pointer(cpu_emergency_virt_callback, callback); -} -EXPORT_SYMBOL_GPL(cpu_emergency_register_virt_callback); - -void cpu_emergency_unregister_virt_callback(cpu_emergency_virt_cb *callback) -{ - if (WARN_ON_ONCE(rcu_access_pointer(cpu_emergency_virt_callback) != callback)) - return; - - rcu_assign_pointer(cpu_emergency_virt_callback, NULL); - synchronize_rcu(); -} -EXPORT_SYMBOL_GPL(cpu_emergency_unregister_virt_callback); -#endif - /* This is the CPU performing the emergency shutdown work. */ int crashing_cpu = -1; -/* - * Disable virtualization, i.e. VMX or SVM, to ensure INIT is recognized during - * reboot. VMX blocks INIT if the CPU is post-VMXON, and SVM blocks INIT if - * GIF=0, i.e. if the crash occurred between CLGI and STGI. - */ -void cpu_emergency_disable_virtualization(void) -{ -#if IS_ENABLED(CONFIG_KVM_INTEL) || IS_ENABLED(CONFIG_KVM_AMD) - cpu_emergency_virt_cb *callback; - - rcu_read_lock(); - callback = rcu_dereference(cpu_emergency_virt_callback); - if (callback) - callback(); - rcu_read_unlock(); -#endif -} - #if defined(CONFIG_SMP) static nmi_shootdown_cb shootdown_callback; From patchwork Fri Mar 10 21:42:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67754 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1121204wrd; Fri, 10 Mar 2023 14:05:56 -0800 (PST) X-Google-Smtp-Source: AK7set/o3X3DQqOjIGqur2zGZWNsXzlz/fhnqDooOIQpFOv3E+nQAcdrHGMDVsJLMGQtqPU99ixq X-Received: by 2002:a05:6a20:6707:b0:cc:75b8:7cac with SMTP id q7-20020a056a20670700b000cc75b87cacmr24510999pzh.27.1678485956671; Fri, 10 Mar 2023 14:05:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678485956; cv=none; d=google.com; s=arc-20160816; b=0qcTRm8npzOA9VgD8npRdJEvzzP+kw2toL+f1yswdp0waXU25Gxhnhhs/t9sNmgVeO uLWpYS3Ksy3yaXioNPMPUF4OlMl4fPGl4NGqiAJX3fvtLeow2tJI+TlOXRKBhydSfzWA clEb4gndi9x1tNjml5gFVhCsmdF54bFSfjf01jduGQh2oiUo1mvY+OnGTUNFHy4R04wQ bilEjZWZsbBzonoEG/exvbeUiNGcmh6PK2LUyTItAW6d1Mbqa8IVPzB41K/LsclK5636 xXoeDoBDifs0myAUnMOs3c5/vPITwa9X/1dmb61ROaqsJhj9iozijWR53VZcpoS3xLWd HRUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=UrFhrRLgy4Dg7VovQ+m+3/2rGjIGNfnIAOJyLCSFf1Q=; b=YSZAr+bq9yt1CeDCrxhtB4bsjYjRuxkzAEzCpiCKeThvTTQqRRKT7AJQHWVyTuCtA2 62G5/7oNj4ep1IelgBt3UQssmTJErVLMxBTzYcc7sx3dpLAHzDIi6WjqjCT0BXbNffH9 AGfDrNH+tkqUoDOiiWwCHC+2hcYv5L+plG+HCwCTxzoZuPoDw60dTEOebwfvd+RsYJc+ D6WahmHKCFJ6Ml/4oyEwYRDMiiOlnSZoaI2ffN+bGz21nihayMjdjPPtcy3mwNsvS04+ v40radCxXU8Z/TNe8qkg7PWiHonjuNJzy306Nf1of/q6as3Rz5PYL54gcH7QuFCR8rSa J0CQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=qQ+4AyQA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k125-20020a628483000000b005a66daed6c4si435179pfd.352.2023.03.10.14.05.43; Fri, 10 Mar 2023 14:05:56 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=qQ+4AyQA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232037AbjCJVn3 (ORCPT + 99 others); Fri, 10 Mar 2023 16:43:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59266 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231968AbjCJVnE (ORCPT ); Fri, 10 Mar 2023 16:43:04 -0500 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 29CF9138F5A for ; Fri, 10 Mar 2023 13:42:51 -0800 (PST) Received: by mail-yb1-xb49.google.com with SMTP id z5-20020a254c05000000b00b2f2c700a4aso3570470yba.3 for ; Fri, 10 Mar 2023 13:42:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678484571; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=UrFhrRLgy4Dg7VovQ+m+3/2rGjIGNfnIAOJyLCSFf1Q=; b=qQ+4AyQAna687GJeq1zGtgOyFtmS1w3jtYz4FxMhBtg0lbNygd8Mtb2g/rxO2C94As 0EKxHnLe54GiTzuuwahCZJK/rPIGfBhgh8AYes4+mkcHguNyymDZuqgWf8baRgONgwL1 wfjX09kHm5e5++W9qSH2agNbrp3nafdyYIjTOJqT6EBKmMEyhZoAcJXuqXP1avhhkzMh i3Oy4Ls1L2pp31NVom87D1//vSRgAROsc4pJlhAg29jfi8xT31pLTM8b3ql45VMt7TIe OkCHMGoOIExz8wmDzriKley7k5NsXPgw4tZxEDEGtaKlC/M3L61MSSGig4WEQaf5y9ap dHWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678484571; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=UrFhrRLgy4Dg7VovQ+m+3/2rGjIGNfnIAOJyLCSFf1Q=; b=YM4YsJ+hHJPFDZkohaarmeXRvqCkvw962XZ0A2PQQAfXYvvyDaYTc+u0RH/BR5b4+8 Dk/La7nzsxYsBG70LcnnMyBZDsYKj0A25vmP+vDUPjMhaE+/lGf7BZmISr8LIdi2yD0i 2JY6Z/hkZ7/1slParKkyurofEMSJbtJiz9FOdJW6oXWE3+PCfkStJqukI1Dj2NnoenyS vCh2G4eaEEcTUt1qeeqdtv7kzOoSCTqmqvuGKsaZR1VzJ0JUij6kzBtWoncs0Z2BhFDn DCcNEhFtX5WIVQkYfCknkbTLK4OYWYXtwNqywU0qKCKzFjr+YDbw4rX7FQ6fK4zdMTxU +BDg== X-Gm-Message-State: AO0yUKV70J2xHsrHtffx5g4CMr0klUJkmNapDfbP8LbzptDjhVUhfgXP zToZDOJOaKhqMQWycIEMkpJxNa4KrNk= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:6902:10e:b0:98e:6280:74ca with SMTP id o14-20020a056902010e00b0098e628074camr14382907ybh.1.1678484570964; Fri, 10 Mar 2023 13:42:50 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 13:42:21 -0800 In-Reply-To: <20230310214232.806108-1-seanjc@google.com> Mime-Version: 1.0 References: <20230310214232.806108-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230310214232.806108-8-seanjc@google.com> Subject: [PATCH v2 07/18] x86/reboot: Disable virtualization during reboot iff callback is registered From: Sean Christopherson To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Sean Christopherson , Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Andrew Cooper , Kai Huang , Chao Gao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760020090844120050?= X-GMAIL-MSGID: =?utf-8?q?1760020090844120050?= Attempt to disable virtualization during an emergency reboot if and only if there is a registered virt callback, i.e. iff a hypervisor (KVM) is active. If there's no active hypervisor, then the CPU can't be operating with VMX or SVM enabled (barring an egregious bug). Note, IRQs are disabled, which prevents KVM from coming along and enabling virtualization after the fact. Signed-off-by: Sean Christopherson --- arch/x86/kernel/reboot.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index cb268ec7ce85..dd7def3d4144 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c @@ -22,7 +22,6 @@ #include #include #include -#include #include #include #include @@ -568,7 +567,6 @@ void cpu_emergency_disable_virtualization(void) callback(); rcu_read_unlock(); } -#endif /* CONFIG_KVM_INTEL || CONFIG_KVM_AMD */ static void emergency_reboot_disable_virtualization(void) { @@ -585,7 +583,7 @@ static void emergency_reboot_disable_virtualization(void) * Do the NMI shootdown even if virtualization is off on _this_ CPU, as * other CPUs may have virtualization enabled. */ - if (cpu_has_vmx() || cpu_has_svm(NULL)) { + if (rcu_access_pointer(cpu_emergency_virt_callback)) { /* Safely force _this_ CPU out of VMX/SVM operation. */ cpu_emergency_disable_virtualization(); @@ -593,6 +591,9 @@ static void emergency_reboot_disable_virtualization(void) nmi_shootdown_cpus_on_restart(); } } +#else +static void emergency_reboot_disable_virtualization(void) { } +#endif /* CONFIG_KVM_INTEL || CONFIG_KVM_AMD */ void __attribute__((weak)) mach_reboot_fixups(void) From patchwork Fri Mar 10 21:42:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67749 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1119050wrd; Fri, 10 Mar 2023 14:01:23 -0800 (PST) X-Google-Smtp-Source: AK7set8N5kO6OpFDpnxeirH6ZIwx1DDo3GtQ+ssRppJDgMlBTOZWvMOTb8/S9MpLbijMoXY2q4Bg X-Received: by 2002:a05:6a20:7faa:b0:cb:6e9e:e6df with SMTP id d42-20020a056a207faa00b000cb6e9ee6dfmr29261041pzj.14.1678485683446; Fri, 10 Mar 2023 14:01:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678485683; cv=none; d=google.com; s=arc-20160816; b=StOhINn9qmcqRGCnB3MLlx4LSnEBI+1iQr01VLHegElwvIZ3qoDKU97bLQuAJmz8Y5 TyH8S4LrfsgJcANLfA0ZGWgIRCEm+oEfkZuIjM4+U1TWOSzcYxJfVeziCdwAwFXVDQJ4 79QfjrBK4njo5nswEiDDmqWQbcr231eSZpM90/HigeCOeLvlmoplyzbdOHPLO941Kt3q tpWLgyOCwRkplhxqvxx7SFMZYG0Y5g8oTV/56E9j9t4huGwz+/wEwmqRje3OLNtnlvRH 7XSB/R+mrJ4TqjQ6jAYUsKQYH2+0ATgmcnKYZ2M+w4LRbGvlM2QGAbP3DeYruqLTUv6U h07w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=fdbxG5GpH0K/7Izu0jZcu7behH1nknXGGfDqpmCDcTg=; b=jMcGwaWq/3OoKye1dC2ewrMtl3PEkZpOuv6jAWQXTjIyd0xStWV0id3nvNJUF/cnEv iYA/D0a3Al0uCK84wLmL177rtiKOnsE0pZlLhSxGHyIbuKODZtETtYTryvONVooA6zN6 4PKo/3Xbl3hP3PjheZTO8TrT4Aozzipk95CRJmZylOwShQS0As09Ikpjzu6OyAdr9Rx+ 5eTGOLo56I7ySWLdCNQ8c/kIacjxwL9b+bJFBUv2uKzrsHJWUm/5LtSgyxC2TuBCuCb8 UIVPEHlT4mTmbITWrs+NL7K0B+vekK+n7mE0JubMf0vRTlXbuGrRfp8I6cIWC1iKe8ws +nWw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=XG0L8i7a; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f8-20020a63e308000000b00502d7c858b1si671109pgh.768.2023.03.10.14.01.10; Fri, 10 Mar 2023 14:01:23 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=XG0L8i7a; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230262AbjCJVni (ORCPT + 99 others); Fri, 10 Mar 2023 16:43:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59374 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231927AbjCJVnJ (ORCPT ); Fri, 10 Mar 2023 16:43:09 -0500 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5A10C13D1C8 for ; Fri, 10 Mar 2023 13:42:53 -0800 (PST) Received: by mail-pj1-x104a.google.com with SMTP id cx12-20020a17090afd8c00b002366e47e91bso3254394pjb.7 for ; Fri, 10 Mar 2023 13:42:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678484573; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=fdbxG5GpH0K/7Izu0jZcu7behH1nknXGGfDqpmCDcTg=; b=XG0L8i7ah/Iu/HKllVebErQ6thJaZF1/Shz/kB1qXXDilVer49Tjj51tL+MniidrsR 8XHkwnDIeVNF3OZSE2UE5rmWJyNLepxv6/huhfW3Kye//acGWg06Yhn+Z4tfqpTsDJfI TaulfprRLtbDI2a/A4m2FgQ2lr1Kh3AKNfbi+PbDjwBZuAsL87FLs1Fl8ig+QHg42jHf nK4MQeLvwOXRmBrabw4/bvy6lRp+Mwo8l9swQcrbCmNCqbTJlIVvX2TU5sXliYl48Wzr VmrqV694+LCash1PIsVSYG9g+jcdqvWJxnzlRXjVEHwS9i5/pDKJ+B95lI4YQTWHAbv/ Z1jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678484573; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=fdbxG5GpH0K/7Izu0jZcu7behH1nknXGGfDqpmCDcTg=; b=RvyLBFn3TXoBY/Ho7PTLvq5qS2209hzUKAftVO5Tv631KHkIgWZE8lgzcDMjr6Mnk5 gaFfIKzU9JMr/tRjQYqn/JAVaxlQQhjK+7aPeIUv64MTRhF6UppmfdzYsWcnhZLOV4rt +0MjXCclUQyLglyNC6atzQPRGhovKLrh3gYYEP59PGvP8GHey1/Eo/SzV+dCR+/k9BDz Pu9CJhnmPxb/Yj9T9nGwFMCe64UKJDEvNhkOU0i2RzzW0F1Hco3AfFz3RpxCOaoytcD5 VnPUBLUvu5YPNZueClT8pZruekV8OOvRW5yI4yTIEnoVp6mmR7KNYEoA3NVF/YaVO+9n wzqw== X-Gm-Message-State: AO0yUKX7xq7JjStV7GhKMz0hFI3WcLs4SURjIt3yvg8x0pGy0YVxooAt O/5td8RyO3INBVWPENfW2njzVA9NUrw= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a63:7356:0:b0:4fc:a80e:e6ec with SMTP id d22-20020a637356000000b004fca80ee6ecmr8808019pgn.5.1678484572922; Fri, 10 Mar 2023 13:42:52 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 13:42:22 -0800 In-Reply-To: <20230310214232.806108-1-seanjc@google.com> Mime-Version: 1.0 References: <20230310214232.806108-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230310214232.806108-9-seanjc@google.com> Subject: [PATCH v2 08/18] x86/reboot: Assert that IRQs are disabled when turning off virtualization From: Sean Christopherson To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Sean Christopherson , Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Andrew Cooper , Kai Huang , Chao Gao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760019803898584750?= X-GMAIL-MSGID: =?utf-8?q?1760019803898584750?= Assert that IRQs are disabled when turning off virtualization in an emergency. KVM enables hardware via on_each_cpu(), i.e. could re-enable hardware if a pending IPI were delivered after disabling virtualization. Remove a misleading comment from emergency_reboot_disable_virtualization() about "just" needing to guarantee the CPU is stable (see above). Signed-off-by: Sean Christopherson --- arch/x86/kernel/reboot.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index dd7def3d4144..f0d405bc718e 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c @@ -561,6 +561,13 @@ void cpu_emergency_disable_virtualization(void) { cpu_emergency_virt_cb *callback; + /* + * IRQs must be disabled as KVM enables virtualization in hardware via + * function call IPIs, i.e. IRQs need to be disabled to guarantee + * virtualization stays disabled. + */ + lockdep_assert_irqs_disabled(); + rcu_read_lock(); callback = rcu_dereference(cpu_emergency_virt_callback); if (callback) @@ -570,7 +577,6 @@ void cpu_emergency_disable_virtualization(void) static void emergency_reboot_disable_virtualization(void) { - /* Just make sure we won't change CPUs while doing this */ local_irq_disable(); /* From patchwork Fri Mar 10 21:42:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67761 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1121523wrd; Fri, 10 Mar 2023 14:06:40 -0800 (PST) X-Google-Smtp-Source: AK7set8edLiAumQQN+RTNfsq7b8pQgeMHniLWZvYVI4lnMIqPMywpw7sTChZu98sUW8VgtkZiRgO X-Received: by 2002:a05:6a21:6d9a:b0:be:a9c7:5d12 with SMTP id wl26-20020a056a216d9a00b000bea9c75d12mr30106879pzb.18.1678486000354; Fri, 10 Mar 2023 14:06:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678486000; cv=none; d=google.com; s=arc-20160816; b=aD/XLHchh3FZDM9HrFoXcq4vSI5HYi5lU+dDdMrrK9nvGWGsDRma2pCRMyZfUoOyJ3 h1dJXSjehDpjhZnpzXW8JHP+7e92OCdx16XD5g8xwTdSpqmesLDx79APUlTuJO6GLJlb XCixZSDUQuODcr5kEFOJ3ijnWBqjHOM1Pk6Lxh3yi5Ehh2STgY0w0LNj6wwgFPTD6iLN MnWn4X/McoWjoXPkfvj8dKjnxLfEN8ZG2ZmODpY70RMWs3CS4YMjaG15OdO/YjQ7swzR ON9x6d/wM09OMyZhl2gsPl/fCMlgYJASs3kM/QQZwBnwnqTecYzB3A2jE1wvXlVzVEpx Ho8A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=4wFJBbDcDIknYvP9PkVIkSgktI2hIe9TbO9oei+TFB8=; b=IHB4LrIE8ONHHtF2/4j0c4wBSmyxsnYcI+iAPqjdhAyIyZftIWb/mA75fytDOQZpS3 53V6qyhAL2kOTnXpaDdn/qp71JMepq6dZjykcxXbDFHK37GF9PbnVQEgGOXsFCbqX4lm MRQr1rz8Wzw57SxdxiT6khVyoFwhKAjq3Xm0m/Nus4WZ+Ew3AtQbHiPCsmSHflvj6Dv8 myiwtjRRzoWvv5Tyn/PWOE/4pZKJc8VgdL5IAC9CSNisC58g7cI0ani6Lj3E04u0ve1j 0x5nCUuy5soafiIWNMnP5cQgpx+bo8PexEsjYgwOf4FeI40Uveg6L29pF+XKtM2aiSZa jsvg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b="i+JQY/cI"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w141-20020a627b93000000b005a8d85904e1si569216pfc.361.2023.03.10.14.06.25; Fri, 10 Mar 2023 14:06:40 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b="i+JQY/cI"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232007AbjCJVnw (ORCPT + 99 others); Fri, 10 Mar 2023 16:43:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58396 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232003AbjCJVnU (ORCPT ); Fri, 10 Mar 2023 16:43:20 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1FDFB13F6BA for ; Fri, 10 Mar 2023 13:42:56 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id x64-20020a25ce43000000b00ae6d5855d78so7084629ybe.12 for ; Fri, 10 Mar 2023 13:42:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678484575; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=4wFJBbDcDIknYvP9PkVIkSgktI2hIe9TbO9oei+TFB8=; b=i+JQY/cIPm1ONBBu2vV2F1Z236I/PD9d+Aj/AOkXUu69DFE1aUVEaCP945YiAOGsR1 KMADHV1bu3vvetWTbijcdZf4xFCxrDPqO9FVCv9Ig+GZd+rKebfskzjYKJ16dEbB6gLW LeJlzI21BJzSSNZLl3btrR4lvKYww+gX3hlkmVBaKnjUz2/uAt/gnzV57D3Qtu8X4Z6s X8jAtxiuZL+guarwCViDUEa2uGgc7vx58h/MAcIizqlNLZs5uK9ihabv5F3yVzes/P22 WM0UwQcsnPgu1DkUV8XhvVUxp6LNZ1jYuOqSqwyQC8ix+6/szkAO6ExwuU1A0nmHKVwk fNdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678484575; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=4wFJBbDcDIknYvP9PkVIkSgktI2hIe9TbO9oei+TFB8=; b=ltox51fmZKo+oSMgs0uIr5c+/KijFUb+zzelKiHZ71B82/uww2iPiURF9Yug3tU5j1 iGtNhhyNQT901jfFNEzL1DUK24+JjZHOe/NH9xcJOf48yt5k/JtfBu0otadidK9K41j9 sPjEAQPDZDAUEVYhzQ408GIodIv05hQx8EHvWg72OflfW5TrK7wzvRy/N1I8QxIpxg1M I8jdKwKQkhxO3SUKgy3979lo6tcqergO1ThHUrhLxbpwusQTQyn6+BC2h9inp0LmVmhS uBkWUO5ehIGSEdPbBD2n5Ma0QgInTIdRj2zI3Fuob3Oq4RgeNQFbW+SMMKODf5+0Akoh F+BA== X-Gm-Message-State: AO0yUKXRV2h3nVIb8RB8ogO2XiV+Dbc/QSqMVgOA63TcVuORgjBWTVPy kNLuk7xZeYWaE1V2eowEtnfM2QVzF9g= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a81:ae62:0:b0:53c:6fda:b469 with SMTP id g34-20020a81ae62000000b0053c6fdab469mr17681347ywk.0.1678484574891; Fri, 10 Mar 2023 13:42:54 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 13:42:23 -0800 In-Reply-To: <20230310214232.806108-1-seanjc@google.com> Mime-Version: 1.0 References: <20230310214232.806108-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230310214232.806108-10-seanjc@google.com> Subject: [PATCH v2 09/18] x86/virt: KVM: Open code cpu_has_vmx() in KVM VMX From: Sean Christopherson To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Sean Christopherson , Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Andrew Cooper , Kai Huang , Chao Gao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760020136080384625?= X-GMAIL-MSGID: =?utf-8?q?1760020136080384625?= Fold the raw CPUID check for VMX into kvm_is_vmx_supported(), its sole user. Keep the check even though KVM also checks X86_FEATURE_VMX, as the intent is to provide a unique error message if VMX is unsupported by hardware, whereas X86_FEATURE_VMX may be clear due to firmware and/or kernel actions. No functional change intended. Signed-off-by: Sean Christopherson --- arch/x86/include/asm/virtext.h | 10 ---------- arch/x86/kvm/vmx/vmx.c | 2 +- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/arch/x86/include/asm/virtext.h b/arch/x86/include/asm/virtext.h index aaed66249ccf..b1171a5ad452 100644 --- a/arch/x86/include/asm/virtext.h +++ b/arch/x86/include/asm/virtext.h @@ -22,14 +22,6 @@ /* * VMX functions: */ - -static inline int cpu_has_vmx(void) -{ - unsigned long ecx = cpuid_ecx(1); - return test_bit(5, &ecx); /* CPUID.1:ECX.VMX[bit 5] -> VT */ -} - - /** * cpu_vmxoff() - Disable VMX on the current CPU * @@ -61,8 +53,6 @@ static inline int cpu_vmx_enabled(void) } /** Disable VMX if it is enabled on the current CPU - * - * You shouldn't call this if cpu_has_vmx() returns 0. */ static inline void __cpu_emergency_vmxoff(void) { diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 9e196b9fe183..58856e196536 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -2747,7 +2747,7 @@ static bool kvm_is_vmx_supported(void) { int cpu = raw_smp_processor_id(); - if (!cpu_has_vmx()) { + if (!(cpuid_ecx(1) & feature_bit(VMX))) { pr_err("VMX not supported by CPU %d\n", cpu); return false; } From patchwork Fri Mar 10 21:42:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67737 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1115937wrd; Fri, 10 Mar 2023 13:51:35 -0800 (PST) X-Google-Smtp-Source: AK7set+ls2YUIsR/i5qIOouoECS18MUYPRQs/pBx0vsH1fOmVvQo84qfXXO2CYuHc0VuauNQef5i X-Received: by 2002:a17:902:e546:b0:19a:7a02:7954 with SMTP id n6-20020a170902e54600b0019a7a027954mr32566401plf.24.1678485095201; Fri, 10 Mar 2023 13:51:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678485095; cv=none; d=google.com; s=arc-20160816; b=nIND/OXiGHOll9dpWRC8sarIWAtdB/Id0ILzq7vQz/FtlXNubTTZEXA80OIbJlPlL7 4/jszalxRR4oidrTHD+5kQXrl+rkXT/+YZl8arijoyadGsMJQbfvMDxr4ZQNdBRydJFC U147ZrOeR6FxheQqboS9QAsf4s6oMUtEjdz2bgd0YhF0aogpqId6g+oWK1nOVcMOGLEQ ZZa42MaIsUIfM9K1liXxdMuReXIvqzyS2cZKZaZugHmpYXragy7w1bC8k8bukdKGypMC unq/c9Zt5SnPKSpFPwnugi2t5fjvdDZLdg9aRlucMe3knLaucj/XJlfINwgJB3zfBNVj zEyg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=ObFwdAJXxZK7rEHoG6WjsQKHfeCapBjVn8O6HDAvvM4=; b=iyZGJjp83d0djyVtlwCUd2eITDZTyfIBaOyoN7bIoBCh6UPHyokdbQtdfw59rb6IV2 4TMxwvQiqEEXgd6lR266urCbi5R4jsMcav66gogtmmwFPtPaV0CfWdlxCm59UgC8z/LY skzYelWPrE6fTe4oqcNiyk06mty8RNtQ0i/yzp+My3TmAnjasl0qghss5+oG4oXhsstT 6WoztQtOz0YSliCbngqaVZ6cZn536YnEtNsuWeLc6c55WHrlaytgJ/MPzh2AxUvTlNlB db0fjPU/hZMvgc9MTIHrcLaqgcKk+BM9c5yM72z0R1tgilAQx8fYS4pAoApDPCy59cTk QImg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b="LGYv/Q37"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p16-20020a170902ebd000b0019e910fa8c2si756649plg.545.2023.03.10.13.50.52; Fri, 10 Mar 2023 13:51:35 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b="LGYv/Q37"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232052AbjCJVn4 (ORCPT + 99 others); Fri, 10 Mar 2023 16:43:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59158 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232013AbjCJVnW (ORCPT ); Fri, 10 Mar 2023 16:43:22 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C0F8283C0 for ; Fri, 10 Mar 2023 13:42:57 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id w192-20020a25dfc9000000b009fe14931caaso7052601ybg.7 for ; Fri, 10 Mar 2023 13:42:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678484576; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=ObFwdAJXxZK7rEHoG6WjsQKHfeCapBjVn8O6HDAvvM4=; b=LGYv/Q37hV8YEO/RbuPb2tdeN7C7LhLnu7b24waVyo/wWGkQeypCLzdLu6xNaBtVQy 0CtifyH945IYv/viuODdnDbTopfZ0dVolkgZbmExnsVID68qFv9BcdkBxCCKuJZwiA6y zjOrQNeUzO0zfO9vqChD9SORUCIj8/6fW/j0r08D2SRJIodqs+gslJkgj39qYDThUbGQ r3pqKvYjnSO+wdEfF5hppP5Q9VfepL31E63oxtp+TAfmnlUryBAvIqVFb2yQoPcbkcj4 fsKcpPCbH5vxrsssZykmf4vyCbu/WdrkP+sJS1eumuJl/0Rj3e5TKH0iAHhfoJbhLu2V O3UQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678484576; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ObFwdAJXxZK7rEHoG6WjsQKHfeCapBjVn8O6HDAvvM4=; b=dwryvUbQ6NeMX0hvGsh+nb5Vc6L2LxeRMsIhUKDq+weRSm3n38MWcIrY51gt8FnUSc AvUWtufCV2j9h9GYqZ4pvwT0jaNi/4EpdqS62UNXVDJdmgqsUZNm/mCV8yks1wYQo82m 6qkF/MjRLgvOtcNsO0Z9jIduM33lNbfB925LLoEoJJMs8VWGfFdpba5uZCluMtZRiEX2 wuYIzfWq4TTqpgZ2ctGRbb7qNyHx8oJQM5LbOfYTefkLZd71LphnqnuVvGm3oWnVw9oG iwYGXtgTU6j8NFeuSv0qxwaj92qJEt+/200IrGJWsPo0ou4YpW3QOvok/gGsE8ofOL1p 33GA== X-Gm-Message-State: AO0yUKWri8Iyg5TX1xWfaq3+iQwbhSIVGIm0yNyA2plvMcrMF/lTJUp9 5JFkilOVVbr7ab/HplUgOpKBoedk2Z0= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a5b:191:0:b0:a6f:b921:cded with SMTP id r17-20020a5b0191000000b00a6fb921cdedmr13339721ybl.2.1678484576759; Fri, 10 Mar 2023 13:42:56 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 13:42:24 -0800 In-Reply-To: <20230310214232.806108-1-seanjc@google.com> Mime-Version: 1.0 References: <20230310214232.806108-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230310214232.806108-11-seanjc@google.com> Subject: [PATCH v2 10/18] x86/virt: KVM: Move VMXOFF helpers into KVM VMX From: Sean Christopherson To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Sean Christopherson , Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Andrew Cooper , Kai Huang , Chao Gao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760019186926152567?= X-GMAIL-MSGID: =?utf-8?q?1760019186926152567?= Now that VMX is disabled in emergencies via the virt callbacks, move the VMXOFF helpers into KVM, the only remaining user. No functional change intended. Signed-off-by: Sean Christopherson --- arch/x86/include/asm/virtext.h | 42 ---------------------------------- arch/x86/kvm/vmx/vmx.c | 29 ++++++++++++++++++++--- 2 files changed, 26 insertions(+), 45 deletions(-) diff --git a/arch/x86/include/asm/virtext.h b/arch/x86/include/asm/virtext.h index b1171a5ad452..a27801f2bc71 100644 --- a/arch/x86/include/asm/virtext.h +++ b/arch/x86/include/asm/virtext.h @@ -19,48 +19,6 @@ #include #include -/* - * VMX functions: - */ -/** - * cpu_vmxoff() - Disable VMX on the current CPU - * - * Disable VMX and clear CR4.VMXE (even if VMXOFF faults) - * - * Note, VMXOFF causes a #UD if the CPU is !post-VMXON, but it's impossible to - * atomically track post-VMXON state, e.g. this may be called in NMI context. - * Eat all faults as all other faults on VMXOFF faults are mode related, i.e. - * faults are guaranteed to be due to the !post-VMXON check unless the CPU is - * magically in RM, VM86, compat mode, or at CPL>0. - */ -static inline int cpu_vmxoff(void) -{ - asm_volatile_goto("1: vmxoff\n\t" - _ASM_EXTABLE(1b, %l[fault]) - ::: "cc", "memory" : fault); - - cr4_clear_bits(X86_CR4_VMXE); - return 0; - -fault: - cr4_clear_bits(X86_CR4_VMXE); - return -EIO; -} - -static inline int cpu_vmx_enabled(void) -{ - return __read_cr4() & X86_CR4_VMXE; -} - -/** Disable VMX if it is enabled on the current CPU - */ -static inline void __cpu_emergency_vmxoff(void) -{ - if (cpu_vmx_enabled()) - cpu_vmxoff(); -} - - /* * SVM functions: */ diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 58856e196536..158853ab0d1b 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -47,7 +47,6 @@ #include #include #include -#include #include #include "capabilities.h" @@ -743,6 +742,29 @@ static int vmx_set_guest_uret_msr(struct vcpu_vmx *vmx, return ret; } +/* + * Disable VMX and clear CR4.VMXE (even if VMXOFF faults) + * + * Note, VMXOFF causes a #UD if the CPU is !post-VMXON, but it's impossible to + * atomically track post-VMXON state, e.g. this may be called in NMI context. + * Eat all faults as all other faults on VMXOFF faults are mode related, i.e. + * faults are guaranteed to be due to the !post-VMXON check unless the CPU is + * magically in RM, VM86, compat mode, or at CPL>0. + */ +static int kvm_cpu_vmxoff(void) +{ + asm_volatile_goto("1: vmxoff\n\t" + _ASM_EXTABLE(1b, %l[fault]) + ::: "cc", "memory" : fault); + + cr4_clear_bits(X86_CR4_VMXE); + return 0; + +fault: + cr4_clear_bits(X86_CR4_VMXE); + return -EIO; +} + static void vmx_emergency_disable(void) { int cpu = raw_smp_processor_id(); @@ -752,7 +774,8 @@ static void vmx_emergency_disable(void) loaded_vmcss_on_cpu_link) vmcs_clear(v->vmcs); - __cpu_emergency_vmxoff(); + if (__read_cr4() & X86_CR4_VMXE) + kvm_cpu_vmxoff(); } static void __loaded_vmcs_clear(void *arg) @@ -2848,7 +2871,7 @@ static void vmx_hardware_disable(void) { vmclear_local_loaded_vmcss(); - if (cpu_vmxoff()) + if (kvm_cpu_vmxoff()) kvm_spurious_fault(); hv_reset_evmcs(); From patchwork Fri Mar 10 21:42:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67730 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1114314wrd; Fri, 10 Mar 2023 13:46:50 -0800 (PST) X-Google-Smtp-Source: AK7set9D/REkOohXDLenAaNl9hJISOkrgfA50lf2/5iE2dJpPC//kbL1nxvGkSQCaD9+KpenFhR9 X-Received: by 2002:a17:90b:1805:b0:22b:f622:56ae with SMTP id lw5-20020a17090b180500b0022bf62256aemr28087281pjb.23.1678484810564; Fri, 10 Mar 2023 13:46:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678484810; cv=none; d=google.com; s=arc-20160816; b=HNjhr+kQFvJqr0EaonirfOjykcTaqYInMcqDPrL0mtHJPTBnH7SK3yJpVbPrsekN7J U/9Nc1vlVQSuQjmMb8eLzc2OBcRKXxUO3W1ffm8jNW+0w4rXxxV4LDFDjmYqWW9PjdP+ 0Vz5IkAry6iqc8XeskgWFgO6GBOJHYAxrgsD2Wlu4rQiM/dvgHPCo+jMXEutkLUJFNOT zJGISbeHSHasnV1x6t1bjS6djGpkgTGNHe/DCnGBDTU9NxF8rS01fu4c/dSFUDNbVdY5 u78lwcEv5sD2ueY8D4yIWwUkupGbxGB7xUjp3TOF3g5c/8VDtBTH/AGeOdEFLJg88fHL yh0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=UHhz2SM3hbXDmjQ5GG0MGaymCbgCzXDenHPbdfsOnbY=; b=hseCxqFvqzWrkJJ0ki0fKMFou8oL4cVr37Tw6qfFiNqhQhqQpwRXxMokaytGav/Two 1jxVjwKftCx84OfMHtjc37hD+g9wEMltaZ1QIKg2dEZMEU9ipLkvJWqY6uf4sjqGtY7e leLCPqz+R45urr1XWfgoy3rs2Md6Jby+PJzgGvgAOWFR+/fmgLwhLMrlsN8dCUu9v4g9 TRjk6ska56obW2aICSuPWm5zVWTsFjdK/DcrsF9UPNDVTyCSHeNTUeBbPPE6tWPdFR0C bgs8+H91V8V5F2sLHogMpTBn9BTqtNoWXhO0W+Rxm9sEvyDJmbcjbYOs1knH1tVqeZaL Jfqw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=NWakKGjF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id lw13-20020a17090b180d00b002301345a517si816876pjb.17.2023.03.10.13.46.35; Fri, 10 Mar 2023 13:46:50 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=NWakKGjF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232022AbjCJVoO (ORCPT + 99 others); Fri, 10 Mar 2023 16:44:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60598 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232032AbjCJVn1 (ORCPT ); Fri, 10 Mar 2023 16:43:27 -0500 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E155F1C7C0 for ; Fri, 10 Mar 2023 13:42:59 -0800 (PST) Received: by mail-pj1-x104a.google.com with SMTP id p9-20020a17090a930900b00237a7f862dfso4919327pjo.2 for ; Fri, 10 Mar 2023 13:42:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678484578; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=UHhz2SM3hbXDmjQ5GG0MGaymCbgCzXDenHPbdfsOnbY=; b=NWakKGjFu0EWsnYX1psS20AQF/gXe7rJoA2vL0aZFBZE8kyu4Pfz2kqG7+uwqbRd7v /sLXLqryy7U3CpVacKtj7cOrZ3t17rkW2kmB4gA0Q0NRAM1sLwMe6oZIq70lIk/5IlId lBJUMAiteSgScEUAdSK8tGIlFi1H+uYck9Lmlry6TWsBq1++7a4S2ruZ60UE/wmb/SPJ jVTBf3Hbh3AH6BBNsA4U+S2kjWfNHtWMcK9XB6gFeBeRVG3kN8qX12S2vg6wGRiNJeED GM9LohJe3fa8cqPIX95tWRWXhpFYBUdRKHUiAIrqnLFcFbD3MT0758sbdAOYDa4LBoYs m2Mw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678484578; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=UHhz2SM3hbXDmjQ5GG0MGaymCbgCzXDenHPbdfsOnbY=; b=D3Hom8YjLlZPfavPa6kdQwy6cJpvxj7DaQhPukdgYejJd/ZF49OAeYjOFafmcQPkkb OaVeVSZMnReJyJrHpIpM+gXoRVT2eybBPDXYZZUbSOaw1fxHNIRnHDtleqwG3G+KEUX2 Ns7pg9Zt+mmpBiOnUbPJdbwSSUHhRPD/9jhyNztDtTLojW/mumLQiPV7rvNrMqF/WDj4 CiPumzKrROgLADD0XAGn1DylrChruFefvvk0bFhxIEeTB1b7zq6ae5PJKJE1OtEUngE0 3V0fFFvwbxXuNuOiHybMaK6sEtdDFfM5c0EehN7nwFWQiQ83smH13mSPwPNhOnoPPZto MNuA== X-Gm-Message-State: AO0yUKWLU0PkUfxRhnmS4dOvWRlj4hy15oISKoaTkdLrdNAhm4s4MN1w vwD6SQ/QZkajwEYqqsoluGMj+0If3QU= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90a:7bc6:b0:22c:2048:794e with SMTP id d6-20020a17090a7bc600b0022c2048794emr9891329pjl.7.1678484578692; Fri, 10 Mar 2023 13:42:58 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 13:42:25 -0800 In-Reply-To: <20230310214232.806108-1-seanjc@google.com> Mime-Version: 1.0 References: <20230310214232.806108-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230310214232.806108-12-seanjc@google.com> Subject: [PATCH v2 11/18] KVM: SVM: Make KVM_AMD depend on CPU_SUP_AMD or CPU_SUP_HYGON From: Sean Christopherson To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Sean Christopherson , Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Andrew Cooper , Kai Huang , Chao Gao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760018888765400621?= X-GMAIL-MSGID: =?utf-8?q?1760018888765400621?= Make building KVM SVM support depend on support for AMD or Hygon. KVM already effectively restricts SVM support to AMD and Hygon by virtue of the vendor string checks in cpu_has_svm(), and KVM VMX supports depends on one of its three known vendors (Intel, Centaur, or Zhaoxin). Add the CPU_SUP_HYGON clause even though CPU_SUP_HYGON selects CPU_SUP_AMD to document that KVM SVM support isn't just for AMD CPUs, and to prevent breakage should Hygon support ever become a standalone thing. Signed-off-by: Sean Christopherson --- arch/x86/kvm/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig index 8e578311ca9d..0d403e9b6a47 100644 --- a/arch/x86/kvm/Kconfig +++ b/arch/x86/kvm/Kconfig @@ -102,7 +102,7 @@ config X86_SGX_KVM config KVM_AMD tristate "KVM for AMD processors support" - depends on KVM + depends on KVM && (CPU_SUP_AMD || CPU_SUP_HYGON) help Provides support for KVM on AMD processors equipped with the AMD-V (SVM) extensions. From patchwork Fri Mar 10 21:42:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67758 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1121351wrd; Fri, 10 Mar 2023 14:06:16 -0800 (PST) X-Google-Smtp-Source: AK7set+I02zoYxn1yKML2mF3fJZRmMjH0T0VYXhE06D3KgH4FnSscc+IQgItHeNgNVJ7gw/UfPV5 X-Received: by 2002:aa7:9d11:0:b0:602:7c0:3afe with SMTP id k17-20020aa79d11000000b0060207c03afemr24078767pfp.26.1678485976286; Fri, 10 Mar 2023 14:06:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678485976; cv=none; d=google.com; s=arc-20160816; b=Uvys0O1QzF6HCupSvrCWxRijypzfFYHgmFRlobgiSzcdELpt5lIPgdCtnp1EbMn9TG lZy0unJ57/zC6kLvpXOyYOA20icGH2p8Naec1BVAE/EEch/XdUr8fgPmVAkfq1RxI8nk OsW++4vlof9L6O+nMIs77MEqGiTYQ+8VwkyPaEV+PMQ5yZ7M/ip2oiq7wuJljWz2SBwO BztzBj14Pc3RYFyLwmhF2pGPyl6IZ0OssML+q+aicO30ZbUGfxwbGeKTrGPWdiFj25Qk 9LqHGRcKLJYC8imqsVml2id7Qb0TuC3A77TNxQwb5a3B/2BAGXJwMQ6Lty7aaJuHTqaq eQtA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=O58/NX1IZ5N1NsjCSGJf7yl9B5xM2yhJshLYbTitfTw=; b=VsNYI41xfBzWP6DdJB4orTq1u6y0Q+tNHBwmnrUMj38fgBgtAJRNFsURNtpfZg02Lw sP94fMLQ8gbRpNcJjN5dkGV2PkPNNF8KijQmmrALYzK+vLmOkGoFy5HJpF5VrW4qPmk+ pKMZm0ZotGGFT+p4PnmlW1Iwp4hBQ2C6KvNkVznHQfxWjnAX4Y8rR+I1Ib7QEBKR/w1d YN66eVjd5q+lha6WzRoHpRiDHC5Kzegs/Dc7PKei0a1TIPPTfTMqPkgVkKRBJQIOn1Ss FDIYfNWLq+poT4nPfz0BCWawf0xiJeS7SodllnwUBqEU3T0yc2YtTZvHRRnGhUxhKfxg alYw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=ePEeLMGO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p14-20020aa79e8e000000b005935dae4234si605290pfq.306.2023.03.10.14.06.02; Fri, 10 Mar 2023 14:06:16 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=ePEeLMGO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232009AbjCJVo3 (ORCPT + 99 others); Fri, 10 Mar 2023 16:44:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60208 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231623AbjCJVnu (ORCPT ); Fri, 10 Mar 2023 16:43:50 -0500 Received: from mail-pl1-x649.google.com (mail-pl1-x649.google.com [IPv6:2607:f8b0:4864:20::649]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 853372E82E for ; Fri, 10 Mar 2023 13:43:11 -0800 (PST) Received: by mail-pl1-x649.google.com with SMTP id p10-20020a170902e74a00b0019ec1acba17so3444727plf.0 for ; Fri, 10 Mar 2023 13:43:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678484580; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=O58/NX1IZ5N1NsjCSGJf7yl9B5xM2yhJshLYbTitfTw=; b=ePEeLMGOuIYsC67LI0QfBPXgJubkE/M9f8ZKhDvPBktm//0MigobdfesQdehm+HoIF 4k7Q3bKwvt4tdL0bpEstVgMdYaxqxFitCqcT8J76JdedPjiP9uHj8At1j2Ep1bt+Qyss 1Y0V1Yw52nFYMpBt+LAtY15BwdEk4PljV3VOvdGy3uJqoBF69H3D0f9I2ocnJ0d52EVG oDg2W/79S92oQL08l/DdZG+9/MjLj6wNEP+wMwKX85bWLniR63oOFp4S7QZBRJR360Xb n/tY2XUTdNDY9ZWkrRyfL8CsOVWQHwl6hgT1bhDFQZmWMokic4FqhoXv6e9RbeEtLW4f pARQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678484580; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=O58/NX1IZ5N1NsjCSGJf7yl9B5xM2yhJshLYbTitfTw=; b=OGGHP6ZuA1H7Hnvzo4P0FgN5SBPvYlLAf9PD1JRF6Gy46RH3o7JVPxMNjOgyFl5seM 2Q+JCUWJW7RRyrseA7+tBW6RIjnzYxN3yTT3RBHeTcX64Vi30KObx0f3zhf76JFooxHf Tqc0eFxPG/zVnBx1OTujUiL7Mu4luLIMyS+qzIjJBZIf/iu+CD5w/Z4yd9Gb2MSo5VcY QbohRacHf8UZUTNYINSaRPJs6xkVTgdHhNytWZzHrCKoXlAKuQFQaVkK8OpxXfmgpJYg eS/BpgnW8yzGrmm90mdoR8oLZKirL3X0o+qADWocPlhVhnG1Bwh8QUNpgQaVV7ipblGV ucEQ== X-Gm-Message-State: AO0yUKUTocTh5NSYqtS6oXn7AawTRPNStoQkFTOnxRwmG2dybHZaSSeA juXxZC1vt/79Ndu0B/1rry04RZJ1u9k= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:714b:b0:19f:22b3:508d with SMTP id u11-20020a170902714b00b0019f22b3508dmr187900plm.11.1678484580595; Fri, 10 Mar 2023 13:43:00 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 13:42:26 -0800 In-Reply-To: <20230310214232.806108-1-seanjc@google.com> Mime-Version: 1.0 References: <20230310214232.806108-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230310214232.806108-13-seanjc@google.com> Subject: [PATCH v2 12/18] x86/virt: Drop unnecessary check on extended CPUID level in cpu_has_svm() From: Sean Christopherson To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Sean Christopherson , Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Andrew Cooper , Kai Huang , Chao Gao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760020111007060127?= X-GMAIL-MSGID: =?utf-8?q?1760020111007060127?= Drop the explicit check on the extended CPUID level in cpu_has_svm(), the kernel's cached CPUID info will leave the entire SVM leaf unset if said leaf is not supported by hardware. Prior to using cached information, the check was needed to avoid false positives due to Intel's rather crazy CPUID behavior of returning the values of the maximum supported leaf if the specified leaf is unsupported. Fixes: 682a8108872f ("x86/kvm/svm: Simplify cpu_has_svm()") Signed-off-by: Sean Christopherson --- arch/x86/include/asm/virtext.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/arch/x86/include/asm/virtext.h b/arch/x86/include/asm/virtext.h index a27801f2bc71..be50c414efe4 100644 --- a/arch/x86/include/asm/virtext.h +++ b/arch/x86/include/asm/virtext.h @@ -39,12 +39,6 @@ static inline int cpu_has_svm(const char **msg) return 0; } - if (boot_cpu_data.extended_cpuid_level < SVM_CPUID_FUNC) { - if (msg) - *msg = "can't execute cpuid_8000000a"; - return 0; - } - if (!boot_cpu_has(X86_FEATURE_SVM)) { if (msg) *msg = "svm not available"; From patchwork Fri Mar 10 21:42:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67766 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1122338wrd; Fri, 10 Mar 2023 14:08:36 -0800 (PST) X-Google-Smtp-Source: AK7set9R5dv8vENtF1aI0wplBdcHvLmvN8lk3cdOK+0appwSLjJpJ3VQn8WYfdC0X11wEeDSOLTR X-Received: by 2002:a05:6a21:6da0:b0:c0:defb:d27f with SMTP id wl32-20020a056a216da000b000c0defbd27fmr3450007pzb.6.1678486116551; Fri, 10 Mar 2023 14:08:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678486116; cv=none; d=google.com; s=arc-20160816; b=FPcOJguVMOAfmIoqQ8SUJvxJsSm1yi32dCD2AnX1sCvr5LV/xRO1jwTsToldF1ZV19 sjaS9mZXH2/7gzeZrKzIzZpvyHFLN1eBz86XAt7o6smnXG2fp7e8U0ev5saUi07T2PwP qYNzHRYMC9ZmQCrMbD7TnLe79iZqK6Oq6+j4khpEYOCtDpFem6oNeHdT0O40LitMpQDn RfOxKwmZLZSILfV8drQhogp+GoGaiuTzeHEVTwALZFhqSxR73wTJAcs0FGWCMtcV06mm tmQrw/HxZLnLRhpGCnjCpzEDu75F6gylCrO2ni953bVRWx3egovcsJMzz7nSTjZqdX+k wE7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=rC7W/TqT22prVrI7aB30rmCsROsWsHiXQzcC62nOUVE=; b=niTWW9HtjoieEcORlu7+bZxb0aEe6dOywyLiW75ZyeOXkv5zwxanaVnjLHCrI6z67Y QBEq9tc3wGOrvBC2t02Sq+wMEW74QrkLtraBcB5F/DR1lxOY36MNFXLxceQW4ecyda7M rWOxScsEWTSF0on1KK/4W2tJgtKNqvKJNXfFDLAxmg3p8ublYe9cQ8y5UnmjLWMTC2j6 wW6jO6mROBAUuw4/0TaHC7jww/+xNxk1Uz1XIwSnkH03Hyh0LH4+M2L0HK3/bWOgBFBF awQVAUWBrnwxlstoq7EXiRju8O8lkJ6yDR4SglhXgj21gVsI2DHrAzz1Ff9Yd29m31Ep s+lw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=iECHnkG4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f16-20020a63f110000000b004fc27d3a2f1si704058pgi.797.2023.03.10.14.08.21; Fri, 10 Mar 2023 14:08:36 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=iECHnkG4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231219AbjCJVoc (ORCPT + 99 others); Fri, 10 Mar 2023 16:44:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59152 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232008AbjCJVnw (ORCPT ); Fri, 10 Mar 2023 16:43:52 -0500 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C7B45460AD for ; Fri, 10 Mar 2023 13:43:12 -0800 (PST) Received: by mail-pj1-x1049.google.com with SMTP id l10-20020a17090a598a00b0023b28afea55so360308pji.0 for ; Fri, 10 Mar 2023 13:43:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678484582; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=rC7W/TqT22prVrI7aB30rmCsROsWsHiXQzcC62nOUVE=; b=iECHnkG467xDPY1Eiyle7PL8wxFL51+1TZWXikdwu7gxUwWYDClHEPwSxUkrC7y1tw JsHpy7ESprLNxI1z6el5lumWkookOk26kZFLngxJOpaoXmYFvIUxmO2Z3YMTSTMqIQeX mor/+/cf7/r9Ji4q/wqCG2D6rgx2ygg/NGxGn8p+oLZu6E/OQoFCYoLc8DF+RsFDIizT 7SxysKD8Pm2rYQPzLc+XO2OPfqtbAnh+e1RapTgRfkDj0w9c4Akii85ZVOc45tG/Dtyf 7HlzdUFeWE6mVhVKR+epAv0h0Jd8KoihYHJAQ0DRhTYD2jz8Zsh3eE7UZxFE6t6qr3W6 0whQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678484582; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=rC7W/TqT22prVrI7aB30rmCsROsWsHiXQzcC62nOUVE=; b=JJk/VX2YyLj7rYsxiVbeG2rvR37YHJ6oTUCAB7VH35D6v8kRGbg6nIhR0/9aJwKgN1 ll2k4l3xOfMfkiL31HnVmJObJVIjDiNR3UuIxS47Y7b82SwaxImcnGWxJ2Vmug5QXVlR ncyFD0H6R/hK5ZWfHW74K90WL2qYhWQXlI1hzSaDcgmG+VmsnPGSgaVcWI62cVuJzqYy C7SJ/r5P69z44vxmsVyTK9FBMqqV8e2hJtwES/YIaCYKurDkhuSAEqjooxTcSzhBNcz0 8KXOAtb0fTgh2zVDcv+TvdbiCH0y2F7bVrPwTzIDx+FK84INXNNfnlTSr3G8+tPp9t+0 UuxA== X-Gm-Message-State: AO0yUKVXWWCtTd6ojq9UP1aH3Oj/Fq0g04iQIJiVVlyAhHlhb3gaO/VL UhPfVVfJLFRzM970hzEEm6AlP6alIbI= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:efce:b0:19b:5233:51d8 with SMTP id ja14-20020a170902efce00b0019b523351d8mr10727175plb.13.1678484582474; Fri, 10 Mar 2023 13:43:02 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 13:42:27 -0800 In-Reply-To: <20230310214232.806108-1-seanjc@google.com> Mime-Version: 1.0 References: <20230310214232.806108-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230310214232.806108-14-seanjc@google.com> Subject: [PATCH v2 13/18] x86/virt: KVM: Open code cpu_has_svm() into kvm_is_svm_supported() From: Sean Christopherson To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Sean Christopherson , Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Andrew Cooper , Kai Huang , Chao Gao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760020258250042075?= X-GMAIL-MSGID: =?utf-8?q?1760020258250042075?= Fold the guts of cpu_has_svm() into kvm_is_svm_supported(), its sole remaining user. No functional change intended. Signed-off-by: Sean Christopherson --- arch/x86/include/asm/virtext.h | 28 ---------------------------- arch/x86/kvm/svm/svm.c | 11 ++++++++--- 2 files changed, 8 insertions(+), 31 deletions(-) diff --git a/arch/x86/include/asm/virtext.h b/arch/x86/include/asm/virtext.h index be50c414efe4..632575e257d8 100644 --- a/arch/x86/include/asm/virtext.h +++ b/arch/x86/include/asm/virtext.h @@ -22,35 +22,7 @@ /* * SVM functions: */ - -/** Check if the CPU has SVM support - * - * You can use the 'msg' arg to get a message describing the problem, - * if the function returns zero. Simply pass NULL if you are not interested - * on the messages; gcc should take care of not generating code for - * the messages on this case. - */ -static inline int cpu_has_svm(const char **msg) -{ - if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD && - boot_cpu_data.x86_vendor != X86_VENDOR_HYGON) { - if (msg) - *msg = "not amd or hygon"; - return 0; - } - - if (!boot_cpu_has(X86_FEATURE_SVM)) { - if (msg) - *msg = "svm not available"; - return 0; - } - return 1; -} - - /** Disable SVM on the current CPU - * - * You should call this only if cpu_has_svm() returned true. */ static inline void cpu_svm_disable(void) { diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index 541dd978a94b..2934f185960d 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -523,11 +523,16 @@ static void svm_init_osvw(struct kvm_vcpu *vcpu) static bool kvm_is_svm_supported(void) { int cpu = raw_smp_processor_id(); - const char *msg; u64 vm_cr; - if (!cpu_has_svm(&msg)) { - pr_err("SVM not supported by CPU %d, %s\n", cpu, msg); + if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD && + boot_cpu_data.x86_vendor != X86_VENDOR_HYGON) { + pr_err("CPU %d isn't AMD or Hygon\n", cpu); + return false; + } + + if (!boot_cpu_has(X86_FEATURE_SVM)) { + pr_err("SVM not supported by CPU %d\n", cpu); return false; } From patchwork Fri Mar 10 21:42:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67733 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1114431wrd; Fri, 10 Mar 2023 13:47:12 -0800 (PST) X-Google-Smtp-Source: AK7set/m2moK2EqSHSnBcFjwZWMdDYCrcNDLba1t+aG0xksDMBK9neZKaSjAtY3jtabmSkCYdu6c X-Received: by 2002:a17:903:120b:b0:19a:b092:b31a with SMTP id l11-20020a170903120b00b0019ab092b31amr28428701plh.8.1678484832680; Fri, 10 Mar 2023 13:47:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678484832; cv=none; d=google.com; s=arc-20160816; b=VR+a0zsFgyFqmeDc8VrNfSOjQ7VQhuxHlYjq3PdYDL7fCbC1qmo8fibrOBeJG5qkuv xvFrpDY6ouDYO9MqJ/8LH+l4cM3oL7kE+gR4FmKXM4290ThEWHR38cONGBwL6gzhfvBG PeK5zHnlA4/98xVr9RSEOEqvZSlV8JPdwRiFO1eEaZdv7CtKlusWaTJffmHC9cFB72rm cZbrC9YZI8Vf29aNCKgd1iC315s1uY61wye0azaE4BYYpHCeGO20McxQOpFJ02Elxe1Y CVXUUlt4clVW998UWRkh9B3wKLu7x5XS13mENtQEaNjmScHvjS8IaxAWaYP6TjVOY6Tq 4UVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=R1zMC0FqfyEV/0S9ZnbLP+wjU2iwXROZi5JXQooIbHQ=; b=pmx27S1JvCZKmuarxjqyiUgaISQbfO2UsvF15gqniv4BmrDfmajCUgxv7U3d2UjWxI L/GlR8McAuM3I23/YV12iuypwsZ1MSzy22mr6pQpY8dESs0jMmM81IS5O63p/abZ3uh7 MJ3XfUdK5BS0jMJpJ70ijwkNSYNtB0Y96SilNcaZJC/OZO2FQnrNJR5bE67NhxY6APAC qGvKa/YUtVeyQTfd35Naf2vDFCjz8j3KWi6MudEOqwAlno16iA6iFvo22jH3c8xG3pwN bguevfcbk0vqR9jjU7t3aEkImUkgQeiBsnv4U3KAcK5P5ZkpKelNT2/QI9pn6z6qKm6o /Bug== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=qFNLiBFL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c17-20020a170902d49100b0019c92ca0d05si909502plg.340.2023.03.10.13.46.57; Fri, 10 Mar 2023 13:47:12 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=qFNLiBFL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231624AbjCJVom (ORCPT + 99 others); Fri, 10 Mar 2023 16:44:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59232 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231681AbjCJVoH (ORCPT ); Fri, 10 Mar 2023 16:44:07 -0500 Received: from mail-pl1-x649.google.com (mail-pl1-x649.google.com [IPv6:2607:f8b0:4864:20::649]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E419A2B9DF for ; Fri, 10 Mar 2023 13:43:17 -0800 (PST) Received: by mail-pl1-x649.google.com with SMTP id ju20-20020a170903429400b0019ea5ea044aso3500155plb.21 for ; Fri, 10 Mar 2023 13:43:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678484584; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=R1zMC0FqfyEV/0S9ZnbLP+wjU2iwXROZi5JXQooIbHQ=; b=qFNLiBFLLwtMgF+IeChjoCJa+ve1zT5ko/h9MJUHy8G8CX+5NcXD0Y6sTpwQKG+qXP 4NqQn4eVqEyN1HTU7GFiP0F/jBTXTePyXlzK+IWl2IQ6EGzCrtkqnHUUDpWgjSChI0sf lafMTJDPi9IKPx1rvVse3jbOarLoqHrFYV+QEY0OQj5LEG8F18DItVyjpN5xcfAI6RCg lb1AYL8iUu/vqeb6TvGOPRXMRk1NMUUnwF4PPQrqWcmwlrGnqd2UMjgaFilM2hI2dQIa kAQQa4bHO4nfqHbxjuO1rm1hp/ImvvQqskELGWC3DgLpv86gtnF7tdIaG22ZkkjAJjRe 2QFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678484584; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=R1zMC0FqfyEV/0S9ZnbLP+wjU2iwXROZi5JXQooIbHQ=; b=XWOXJcSvywpuCKhHYmUvqdRgh4vg8WGy2v028NXu5PSovWTXeZrYYTUemb7Q1G9CIt eTds4U7O3+U3M7x09Wy0zPfWo+gVE8y+jbTSAKedI/3wvlsPwTSAZfICWjPcFy7MOaaF qedT2UgLPW/tTi+RCOQaJWn25HHtzTHv/z2XucLh5GbiM5pyl3KGDlKwyGdqK5fQzu3X mcIVNNpwW1Ad031Q+60pNzjxUs/ikmcxGgl4yVWTXLrB6u/HA1uThbifZZG9Y5fhqS5F 7t6J28pjq9frEYZ2yeZ7Mr6OX4AWcA0ADn/nh/LvyFXclnDkjRAiuzZJjklkecrsFiUp oL2A== X-Gm-Message-State: AO0yUKUKM3IMAQsuuLOzgIeu1QcvAW9QWG4+4IUD1CIziaveOk2ZxEZc yn3JY2djMiRqA8co1Omj7m+UryfhMVI= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a62:d14a:0:b0:592:5eb2:84ea with SMTP id t10-20020a62d14a000000b005925eb284eamr10759214pfl.4.1678484584488; Fri, 10 Mar 2023 13:43:04 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 13:42:28 -0800 In-Reply-To: <20230310214232.806108-1-seanjc@google.com> Mime-Version: 1.0 References: <20230310214232.806108-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230310214232.806108-15-seanjc@google.com> Subject: [PATCH v2 14/18] KVM: SVM: Check that the current CPU supports SVM in kvm_is_svm_supported() From: Sean Christopherson To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Sean Christopherson , Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Andrew Cooper , Kai Huang , Chao Gao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760018911608579472?= X-GMAIL-MSGID: =?utf-8?q?1760018911608579472?= Check "this" CPU instead of the boot CPU when querying SVM support so that the per-CPU checks done during hardware enabling actually function as intended, i.e. will detect issues where SVM isn't support on all CPUs. Disable migration for the use from svm_init() mostly so that the standard accessors for the per-CPU data can be used without getting yelled at by CONFIG_DEBUG_PREEMPT=y sanity checks. Preventing the "disabled by BIOS" error message from reporting the wrong CPU is largely a bonus, as ensuring a stable CPU during module load is a non-goal for KVM. Link: https://lore.kernel.org/all/ZAdxNgv0M6P63odE@google.com Cc: Kai Huang Cc: Chao Gao Signed-off-by: Sean Christopherson --- arch/x86/kvm/svm/svm.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index 2934f185960d..f04b61c3d9d8 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -520,18 +520,20 @@ static void svm_init_osvw(struct kvm_vcpu *vcpu) vcpu->arch.osvw.status |= 1; } -static bool kvm_is_svm_supported(void) +static bool __kvm_is_svm_supported(void) { - int cpu = raw_smp_processor_id(); + int cpu = smp_processor_id(); + struct cpuinfo_x86 *c = &cpu_data(cpu); + u64 vm_cr; - if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD && - boot_cpu_data.x86_vendor != X86_VENDOR_HYGON) { + if (c->x86_vendor != X86_VENDOR_AMD && + c->x86_vendor != X86_VENDOR_HYGON) { pr_err("CPU %d isn't AMD or Hygon\n", cpu); return false; } - if (!boot_cpu_has(X86_FEATURE_SVM)) { + if (!cpu_has(c, X86_FEATURE_SVM)) { pr_err("SVM not supported by CPU %d\n", cpu); return false; } @@ -550,9 +552,20 @@ static bool kvm_is_svm_supported(void) return true; } +static bool kvm_is_svm_supported(void) +{ + bool supported; + + migrate_disable(); + supported = __kvm_is_svm_supported(); + migrate_enable(); + + return supported; +} + static int svm_check_processor_compat(void) { - if (!kvm_is_svm_supported()) + if (!__kvm_is_svm_supported()) return -EIO; return 0; From patchwork Fri Mar 10 21:42:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67743 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1118362wrd; Fri, 10 Mar 2023 14:00:00 -0800 (PST) X-Google-Smtp-Source: AK7set+CfUtVva9rU1LR2TIQFZzMhq81/+1Rg2Hc99JvPqbpL4onDmWIsVABWOMX50Hd/DjuxGI6 X-Received: by 2002:a17:903:187:b0:19e:6d83:8277 with SMTP id z7-20020a170903018700b0019e6d838277mr32896590plg.51.1678485600722; Fri, 10 Mar 2023 14:00:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678485600; cv=none; d=google.com; s=arc-20160816; b=FvslpPIVjZkITLT+gX4kc2nn8l4IWYcWyGR9Vy69HxmojtNvv8euYgUWW5V3OpVkZs oqdPSd8SSARGpboOnd0pQR7nPpnj1T9g5rHMBRn7oP2GQopFD9aTs9fdIc6qKUir632O swotwrqbT9jmjOHRJEPP67VUqWPWrqD3oVraCbr8ETFGmSHa+8Re4JUfdPrt3m7w6OaL wwyTWb+BM/jjmNOeDbe3U7r1NkOd2DBHQZB4l12ly7MOazE7z3ExKVuYT6cqayuEEb1G AawElxo/Nh4RZKFbiSycOdRgZV8JaMevjqcmXdQlfBXAWswhAXkYixVAT7ZTfLf1iFQl MNDg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=9q/d7g9qox1x40p0EhyhFdiJHeiHo6UfgDgcUMY2me0=; b=LqJUrYbdHPqkULv4dgNBaReQg2ffcDHuCAsjwXtHu7RoLOCHn1prng+ic6bDLPGtcC mXa0x6A2dpMz5Iu7+CeWk45HIvfc6oDdTsM3OlsnJD0nhk69723+MkQ9VRbdY0AFDue7 cCLNdGDTkkRVXrWq1NH47lXzYQyCtZB8zuuFRR+VYI/34eD7a9IyTti/thNegShvWcZX sBqbLWxp47QWQseWDb2rAm8TButjnbJn1dVEqp6zzQz29c924wqqsBaXprNZIBXWQcZh eRkkpi8MuebZoqHcdn2cNmBiFshPG3IQBW9HSatTvscPtiZ76jOar9RSywEdpnK5AImn KI3w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=S+PLcRgF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ju12-20020a170903428c00b0019f24ac1ab4si86744plb.472.2023.03.10.13.59.24; Fri, 10 Mar 2023 14:00:00 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=S+PLcRgF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231904AbjCJVop (ORCPT + 99 others); Fri, 10 Mar 2023 16:44:45 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60514 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231922AbjCJVoM (ORCPT ); Fri, 10 Mar 2023 16:44:12 -0500 Received: from mail-pf1-x44a.google.com (mail-pf1-x44a.google.com [IPv6:2607:f8b0:4864:20::44a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1A1277DD0C for ; Fri, 10 Mar 2023 13:43:21 -0800 (PST) Received: by mail-pf1-x44a.google.com with SMTP id i22-20020aa787d6000000b0061dda189477so3473606pfo.10 for ; Fri, 10 Mar 2023 13:43:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678484586; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=9q/d7g9qox1x40p0EhyhFdiJHeiHo6UfgDgcUMY2me0=; b=S+PLcRgF3wy1MWeNCthYcvbQ8p4zb1869uJGzKPqf8IHd47ghO2mn5LrvcqpZ7PChJ O8ClBe5JTfp9ZzVAdvjjPyTHmpLw5H/P36z9EqCJ97mX3SvEf6t+pZsjn+zSRW8fcfDS Gg7lVgXuJ+Y6Hze0ASXWtX4lj0pA0Ifa+Sq8cq5zGhPCEMb8wB2uJeQsXoW+g1/g9uBV DmT8vsmv5UZFoj3oWqFu8yIUW1ro+zKTDvLvPFiYJSwJ2xlk9FgfRWbvsn40KM92UvCt N/oy/CZtNllQNQjX1j7F/ZeD5wJy16dR6F4GaGAKIdyvlNql+cGt3T0/l0Icy7z23zig WEsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678484586; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=9q/d7g9qox1x40p0EhyhFdiJHeiHo6UfgDgcUMY2me0=; b=UG2veZLoBelvPx8/XUMkzlgYfdhiB17cnRJ6CvyFzxBuljbzjMG47qDUQIRGKaeHNj iUclGOHuBvELQGwcbuiI1evW0/WL3gpArE9GLS9tYWtVfUMw4r4MPWqrf3AKGjpCa/3z VQpE4OYtUmJRsDWJwGDdOPoRp58EuKKZ/UuAOUqwLKKwBg4TzEl++35WxBmPAeTJNIsv TzHp/jzE814kBjya+jMl3DiH1f00KmRYGhc2rPkbkOb27aNyl1x2uHXzvDJqkP0mfYr1 2P9kDzuH17g1DZxQ+XKxIcVazXbnoev+gt/ECZFKq8eJ73/oISxQvbxAwVIpGYVfebTF jStw== X-Gm-Message-State: AO0yUKXe55gltV8Bhg3PFUaI5bmcbZPOgghJhnJ9QHioJhOZvWrs0X85 +ooVWtgWN7RWZHQug4c4TU5ODsTbgZU= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90a:2dcd:b0:237:64dc:5acd with SMTP id q13-20020a17090a2dcd00b0023764dc5acdmr10102509pjm.7.1678484586406; Fri, 10 Mar 2023 13:43:06 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 13:42:29 -0800 In-Reply-To: <20230310214232.806108-1-seanjc@google.com> Mime-Version: 1.0 References: <20230310214232.806108-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230310214232.806108-16-seanjc@google.com> Subject: [PATCH v2 15/18] KVM: VMX: Ensure CPU is stable when probing basic VMX support From: Sean Christopherson To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Sean Christopherson , Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Andrew Cooper , Kai Huang , Chao Gao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760019717273350221?= X-GMAIL-MSGID: =?utf-8?q?1760019717273350221?= Disable migration when probing VMX support during module load to ensure the CPU is stable, mostly to match similar SVM logic, where allowing migration effective requires deliberately writing buggy code. As a bonus, KVM won't report the wrong CPU to userspace if VMX is unsupported, but in practice that is a very, very minor bonus as the only way that reporting the wrong CPU would actually matter is if hardware is broken or if the system is misconfigured, i.e. if KVM gets migrated from a CPU that _does_ support VMX to a CPU that does _not_ support VMX. Signed-off-by: Sean Christopherson --- arch/x86/kvm/vmx/vmx.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 158853ab0d1b..374e3ddbd476 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -2766,9 +2766,9 @@ static int setup_vmcs_config(struct vmcs_config *vmcs_conf, return 0; } -static bool kvm_is_vmx_supported(void) +static bool __kvm_is_vmx_supported(void) { - int cpu = raw_smp_processor_id(); + int cpu = smp_processor_id(); if (!(cpuid_ecx(1) & feature_bit(VMX))) { pr_err("VMX not supported by CPU %d\n", cpu); @@ -2784,13 +2784,24 @@ static bool kvm_is_vmx_supported(void) return true; } +static bool kvm_is_vmx_supported(void) +{ + bool supported; + + migrate_disable(); + supported = __kvm_is_vmx_supported(); + migrate_enable(); + + return supported; +} + static int vmx_check_processor_compat(void) { int cpu = raw_smp_processor_id(); struct vmcs_config vmcs_conf; struct vmx_capability vmx_cap; - if (!kvm_is_vmx_supported()) + if (!__kvm_is_vmx_supported()) return -EIO; if (setup_vmcs_config(&vmcs_conf, &vmx_cap) < 0) { From patchwork Fri Mar 10 21:42:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67732 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1114426wrd; Fri, 10 Mar 2023 13:47:11 -0800 (PST) X-Google-Smtp-Source: AK7set+88qJiIcQH4seIsN/Vytv8TZ5h2xDFI2oHu6E6viH/uFzfwYhF9kbEsalSSf3BQxM4wNKP X-Received: by 2002:a17:90b:3b85:b0:234:8c58:c325 with SMTP id pc5-20020a17090b3b8500b002348c58c325mr26533021pjb.31.1678484831052; Fri, 10 Mar 2023 13:47:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678484831; cv=none; d=google.com; s=arc-20160816; b=XAJXTBpgESSykYDKC+EnoeuFODU2031eVNeauaBMTH0LFhaByDjTu55JwH+UQTzH5Z 9H8JGYl4bKvGrOgoGQf85LdPCi/kxj/B0gWkJy8T1QkYpArWphJv5hDimVOv0+o2lhti oxV1h95HksI6eHjAX17sMLtK2RTm4P+p1J5yiZ02WL0JA401I4gPPioIuZxCxzZpWI0H GFnmj+KZykjx3ewAp0UgFkvFt6BNhqkXlmKKFPoxdIT3xcdw4xj1sHrwT4giQsJ7Zfhr Lsu8djgoc9AQKS7+RSTZ3ZefTzSuK8OS7hYjukuo7AUHjLVFYn4y4MVY/BEuB14n76wH ZG8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=ksXX7w7DOgMSUfWcc6++N7pFfPEmS+/uh5KW2SxRWLg=; b=wHnLKeqPih223TsEPgH6OTB8cPiVnLipKg+Rav2f1FRoe8v5G0aHnomJgoZ5NiSKMz vesbg6AhpnfZvhoTOpzABAeKBVxKS6RNatmNqMlKJFbCBByeYhnFk+6tSRH0s5633DnV Oo8ZWSHjeNTJ+6MEn+KeV3GjRgguI1pyL/9dVb2dpxZmMqs4o05sYIb4d8svOn2daav4 Zk2OkXZHm5BNx4nRdvuLPvpqJreUYVwnIzkqfLtJsXSv+NVwL/SoC6lFdgUQs199kj3w P8KTMQ1VPUnbybAYpp6vx/TucitBgJuVe3nErXuTy/zXQ1mh+RddbjTzG4/+JkTxuTCc LWKg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=CdkmpywE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i10-20020a17090a974a00b002341bdd031fsi730512pjw.69.2023.03.10.13.46.50; Fri, 10 Mar 2023 13:47:11 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=CdkmpywE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231251AbjCJVpJ (ORCPT + 99 others); Fri, 10 Mar 2023 16:45:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59374 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231877AbjCJVoP (ORCPT ); Fri, 10 Mar 2023 16:44:15 -0500 Received: from mail-pl1-x649.google.com (mail-pl1-x649.google.com [IPv6:2607:f8b0:4864:20::649]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7E96A6A2DA for ; Fri, 10 Mar 2023 13:43:24 -0800 (PST) Received: by mail-pl1-x649.google.com with SMTP id q1-20020a170902dac100b0019f1e3ea83dso416565plx.4 for ; Fri, 10 Mar 2023 13:43:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678484588; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=ksXX7w7DOgMSUfWcc6++N7pFfPEmS+/uh5KW2SxRWLg=; b=CdkmpywEjUR3b6EjxKkPa4YvZWHbCoXcmVBs3Hrb87A0RA1IF7R1chC4RjF2JU1UOO T/cPDMvG5as5m9qH6MplauVwoTRVSihJS3LAgYhtKzJX8Z1kYl4K5wiFEuEgOVRLSnGw moRsmkKH4UmV0BGwbRQbwpF+m76vXrmtiVO2m644ebUcqa/l6EUx13O5BGJaHJ+3NFZR T3Zkce7rO2JaWHF2Bk617TTUV2pO00zgP6GgppW8x5bVerYKtHy32JCdD7FgQieizCTs eiPnzyTcqjOSubxVy0dYUkClK8MpTWRqAu9J4BBo4EwRRL8Aw7W1OqcsW5dgcZu+QSuI 2Z+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678484588; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ksXX7w7DOgMSUfWcc6++N7pFfPEmS+/uh5KW2SxRWLg=; b=G13p/S8la+PKYUdfLCcS5S0Wve4S3KNuIcZU2BUcL7ZJH/JQQoESOKTHUJtklNykeC nQATn8lBpdlqy6edua8QprTZYpmB7dSoCeK9wnmxrW6hKvxTqnyyX6piOMaNomcWGvg6 UBso0i7w9u+kvrPH8/BHcW7Lz/qGMDgxjP1G/X0uN+UY/F+5BF6Z2lXbj3Kh4pQ2EEZZ bnyVGc5zR+KNy+Ffm+sLUvejXP1SHHVCOGUy+RCswdwPaa8naEnEwH/EdrWdpiXLv/WX LEw1LhSP/S2oaKfEv3DNTFomVq6nyUlVj2JNgABb63rAnxo6fg2Ld0DI01bVO+VcryBc LA7A== X-Gm-Message-State: AO0yUKXIJeS7oBu5gigdPT4aSuaDTPPJ3Lr5+5t80Xu9HXTzVnZu5B/m 5f+exqu1Y2HmQvrYcaLNiASYuWMzoqA= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:f90b:b0:19f:1ee9:a14 with SMTP id kw11-20020a170902f90b00b0019f1ee90a14mr331047plb.4.1678484588314; Fri, 10 Mar 2023 13:43:08 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 13:42:30 -0800 In-Reply-To: <20230310214232.806108-1-seanjc@google.com> Mime-Version: 1.0 References: <20230310214232.806108-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230310214232.806108-17-seanjc@google.com> Subject: [PATCH v2 16/18] x86/virt: KVM: Move "disable SVM" helper into KVM SVM From: Sean Christopherson To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Sean Christopherson , Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Andrew Cooper , Kai Huang , Chao Gao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760018909913327802?= X-GMAIL-MSGID: =?utf-8?q?1760018909913327802?= Move cpu_svm_disable() into KVM proper now that all hardware virtualization management is routed through KVM. Remove the now-empty virtext.h. No functional change intended. Signed-off-by: Sean Christopherson --- arch/x86/include/asm/virtext.h | 50 ---------------------------------- arch/x86/kvm/svm/svm.c | 28 +++++++++++++++++-- 2 files changed, 25 insertions(+), 53 deletions(-) delete mode 100644 arch/x86/include/asm/virtext.h diff --git a/arch/x86/include/asm/virtext.h b/arch/x86/include/asm/virtext.h deleted file mode 100644 index 632575e257d8..000000000000 --- a/arch/x86/include/asm/virtext.h +++ /dev/null @@ -1,50 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* CPU virtualization extensions handling - * - * This should carry the code for handling CPU virtualization extensions - * that needs to live in the kernel core. - * - * Author: Eduardo Habkost - * - * Copyright (C) 2008, Red Hat Inc. - * - * Contains code from KVM, Copyright (C) 2006 Qumranet, Inc. - */ -#ifndef _ASM_X86_VIRTEX_H -#define _ASM_X86_VIRTEX_H - -#include - -#include -#include -#include - -/* - * SVM functions: - */ -/** Disable SVM on the current CPU - */ -static inline void cpu_svm_disable(void) -{ - uint64_t efer; - - wrmsrl(MSR_VM_HSAVE_PA, 0); - rdmsrl(MSR_EFER, efer); - if (efer & EFER_SVME) { - /* - * Force GIF=1 prior to disabling SVM to ensure INIT and NMI - * aren't blocked, e.g. if a fatal error occurred between CLGI - * and STGI. Note, STGI may #UD if SVM is disabled from NMI - * context between reading EFER and executing STGI. In that - * case, GIF must already be set, otherwise the NMI would have - * been blocked, so just eat the fault. - */ - asm_volatile_goto("1: stgi\n\t" - _ASM_EXTABLE(1b, %l[fault]) - ::: "memory" : fault); -fault: - wrmsrl(MSR_EFER, efer & ~EFER_SVME); - } -} - -#endif /* _ASM_X86_VIRTEX_H */ diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index f04b61c3d9d8..2db03991dcdf 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -41,7 +41,6 @@ #include #include -#include #include "trace.h" #include "svm.h" @@ -584,9 +583,32 @@ void __svm_write_tsc_multiplier(u64 multiplier) preempt_enable(); } +static inline void kvm_cpu_svm_disable(void) +{ + uint64_t efer; + + wrmsrl(MSR_VM_HSAVE_PA, 0); + rdmsrl(MSR_EFER, efer); + if (efer & EFER_SVME) { + /* + * Force GIF=1 prior to disabling SVM to ensure INIT and NMI + * aren't blocked, e.g. if a fatal error occurred between CLGI + * and STGI. Note, STGI may #UD if SVM is disabled from NMI + * context between reading EFER and executing STGI. In that + * case, GIF must already be set, otherwise the NMI would have + * been blocked, so just eat the fault. + */ + asm_volatile_goto("1: stgi\n\t" + _ASM_EXTABLE(1b, %l[fault]) + ::: "memory" : fault); +fault: + wrmsrl(MSR_EFER, efer & ~EFER_SVME); + } +} + static void svm_emergency_disable(void) { - cpu_svm_disable(); + kvm_cpu_svm_disable(); } static void svm_hardware_disable(void) @@ -595,7 +617,7 @@ static void svm_hardware_disable(void) if (tsc_scaling) __svm_write_tsc_multiplier(SVM_TSC_RATIO_DEFAULT); - cpu_svm_disable(); + kvm_cpu_svm_disable(); amd_pmu_disable_virt(); } From patchwork Fri Mar 10 21:42:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67746 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1118573wrd; Fri, 10 Mar 2023 14:00:29 -0800 (PST) X-Google-Smtp-Source: AK7set9gsTeyI1uxTGpx4L2ttzoNoW2b0mg7FR7M3mc8OeEIOGp8h9UqLWwrpgny1O81qprpBp6E X-Received: by 2002:a17:902:c948:b0:19a:a4f3:6d4c with SMTP id i8-20020a170902c94800b0019aa4f36d4cmr31642329pla.67.1678485629501; Fri, 10 Mar 2023 14:00:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678485629; cv=none; d=google.com; s=arc-20160816; b=Pan44QCmPGYqgVoPUEd6J9jihr0jdnj81tr9FwSe3sTFWmG2i1mkY3AH09Pu24LZ4l EU4yQcgdzNBVaPGqNwmGEqe/CpfVf5rGJuh7kFpUAsaWNMLDR1ECsHPKIyaIvLVaqXOW 1cf6U4MHQ8zaHSR5ZDfTbi+b8aMnGYQDT286Yn7s2s2ORazPHvdOfwdObyjIXM77eFKB TaBdhYEWLG2zrIQbDZbmJ28a0RVA/qZLtV+R9/Ay3TYIUrzryRXC9GldTy+TqNdMOHzl k+MF6ux2D70EH3PV50EKnIwLsXOl4rT3GyXnvEUQ+mk1cFojZkUNsG6rPCN4K2Yf4cH8 LcTg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=nch/U2KS5FYfJuFemOwyNE1+WKPHRvL9RTK7YAmLi2g=; b=KeicmpaTda2BoyYZ0jlvxYCcN3dQsfnLltZmBoeyLFVbuy50cQSoay64AR7x9JxAiq wUVhD7gWnB3Uypcdkw16TukJ1J7j29Cpbx0Mk9N03+FDhU0tkKCbZJIayHirxGrhve9i Vl9vcNsSjQZfCn5Z9quGWghbw5EhRQG6XN51JuQzr5cQlZO9e64fmPQqfQuhAoKc1hyP +lXITIpOSuv0RUgL9dXFqRExmBDrpeAXWlkX3pk+RfHgJmhg5zEsE+wTv3PAdUcZcAVK idnviQsRiicOIY8iC1JTQy0vjuRWd2w9J2R+55ylz4LL2yfhwayJXcwX+391SkynEGfz UZWA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=rWCVVA7p; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e3-20020a170902784300b0019aa6734f13si880872pln.80.2023.03.10.14.00.15; Fri, 10 Mar 2023 14:00:29 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=rWCVVA7p; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231343AbjCJVpN (ORCPT + 99 others); Fri, 10 Mar 2023 16:45:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59066 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231982AbjCJVoW (ORCPT ); Fri, 10 Mar 2023 16:44:22 -0500 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D3C69A7A8E for ; Fri, 10 Mar 2023 13:43:27 -0800 (PST) Received: by mail-pj1-x1049.google.com with SMTP id v15-20020a17090a458f00b0023816b2f381so3266831pjg.2 for ; Fri, 10 Mar 2023 13:43:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678484590; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=nch/U2KS5FYfJuFemOwyNE1+WKPHRvL9RTK7YAmLi2g=; b=rWCVVA7pRjFLMF9SHUa16e6ftWp6oeXy7xKmhb5ke8JQx0keQK3FAIuZwTqlpT2TJQ ma1SoP6r2/cpfSgdBJlDCHv2DLZFkEd0LB3buYUYQYpt92ZLEdc7uY217ngjkDZBmPLR C37FPNfg42SARQNuXn9jj2Fc0GLhyUWsWVX4nBSeTkdrAOyRow7uU0LFH8Tw5ontkPBQ ENJMWBCDdEuvAfGGA0y3Wgt8xW+Sa6Enlxqdxd5VsdEC/l7DlwkAO14s9KPrBb18zNI+ O5xfkaVHnpGmzmEeuIJWXxQuHqrXw2+ehJ+e2dA/o9blRyEE6ZnCckIn0VLJN1ClN+g+ J3ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678484590; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=nch/U2KS5FYfJuFemOwyNE1+WKPHRvL9RTK7YAmLi2g=; b=OSF0DQYGECCyOW14U6fcURsAkwE3pSMmVT8qpt25Npre6Kygh8fmQsW/mPdwGH9UW9 whFZTA3qsChyYD2Hj7UifLFhMBGxHFjjSEDiBmQDT5XivP/CgQGnWr3mpUGleJB2/pGO BdM0t68uxcqbURkxvXCr/b2E+xtAVNtYyv4/E8Pu6fpHKgvZUs434onKfuljPiBK7mBo jEM8u5hRDF0LQ7pHrcI+6uQwHzDXuVqsnn10LtuQ/7AQtTN29Ad2tFZciMUWVUfQaK/i hDu9tvuu2H2BcmhkbudZgr/h4GAnD7Y5G9nn1bBYRb43fC1PtkFsUNQYIRqgdikC0UM0 M/sQ== X-Gm-Message-State: AO0yUKUr/8YtqdKw3FNeQvH2jxkz9s475vysot1Kk2eMDYkBoiiq/Yvl I7Rg68KVdIIbwxsuqbWoP5Sj+gB+y0o= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a63:44a:0:b0:4f0:2691:a0ee with SMTP id 71-20020a63044a000000b004f02691a0eemr1163603pge.0.1678484590253; Fri, 10 Mar 2023 13:43:10 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 13:42:31 -0800 In-Reply-To: <20230310214232.806108-1-seanjc@google.com> Mime-Version: 1.0 References: <20230310214232.806108-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230310214232.806108-18-seanjc@google.com> Subject: [PATCH v2 17/18] KVM: x86: Force kvm_rebooting=true during emergency reboot/crash From: Sean Christopherson To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Sean Christopherson , Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Andrew Cooper , Kai Huang , Chao Gao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760019747623848999?= X-GMAIL-MSGID: =?utf-8?q?1760019747623848999?= Set kvm_rebooting when virtualization is disabled in an emergency so that KVM eats faults on virtualization instructions even if kvm_reboot() isn't reached. Signed-off-by: Sean Christopherson --- arch/x86/kvm/svm/svm.c | 2 ++ arch/x86/kvm/vmx/vmx.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index 2db03991dcdf..30f7840151be 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -608,6 +608,8 @@ static inline void kvm_cpu_svm_disable(void) static void svm_emergency_disable(void) { + kvm_rebooting = true; + kvm_cpu_svm_disable(); } diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 374e3ddbd476..8626010f5d54 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -770,6 +770,8 @@ static void vmx_emergency_disable(void) int cpu = raw_smp_processor_id(); struct loaded_vmcs *v; + kvm_rebooting = true; + list_for_each_entry(v, &per_cpu(loaded_vmcss_on_cpu, cpu), loaded_vmcss_on_cpu_link) vmcs_clear(v->vmcs); From patchwork Fri Mar 10 21:42:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 67767 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1122332wrd; Fri, 10 Mar 2023 14:08:36 -0800 (PST) X-Google-Smtp-Source: AK7set/d0dL2wyqOe9vuHa63OgLU8QN39b+1DFSCwx5ylCR/nZQ1T5dQ1qIHjBjIDhpyZnYHaZxi X-Received: by 2002:a17:90a:e7c5:b0:229:9aac:abb6 with SMTP id kb5-20020a17090ae7c500b002299aacabb6mr6531457pjb.47.1678486115813; Fri, 10 Mar 2023 14:08:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678486115; cv=none; d=google.com; s=arc-20160816; b=NrrJWoN0yCWZWMqlzvQ515yjqvBtsucV/sAJ7L/a74t03laky1cdi9YgovQKWUhgMU q3X7WrodV477zjEtEqNH8vdo54jrkZJtQMPzQaA7LRllO/w45nV5OKEYMwsAl7jOH15A IlSmyloY/pY0539HE4psGJ+cUtSdFhFT6GSvwmpnKiVw4pZkKRorr9okSFVg42rydZA6 O0J721aIe5jyAb6ZPMVQEEWjvCugOoMIfmlDmbSuAWZwjsdLdc18CeDBLj+diuoCdED+ BQXh7rj5hw7LEDqV/lDauEBgMS+fiUZmFZTs5lCL3+JTTEikjpd4sezSIZJUzf2K3hG1 Z+Fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=qBcz2mERBbm0KpMlPQ5X2eESMX5T/tz8It36IggkYIA=; b=sFUhCbLF7ZzleYxDtT9G8i3XxQIrTiRO3FUxnbR35KdwtSb1Tw5slPu/e0RCT1L6r8 9phaCiOfQ4W7nunna0Hpkey4TRcGN+i8WYYWwmTkNFIvm7VZlXayqDD6fex/8llYVlUh 39QVZzU8yLyC7K1GBsvBW24S2aq+VBMcO3dnw1hIl8ogkqzETUtzMgPgeulrC3pjemhy Pa6nImx5BZk+mfmprn+srXP1dKGBrkF6IQYOFHukWeupCuNbmAWwQSYIQufZNcTv+P4k CnRZiWRol/lDsufqr3D0nC4qoBNS/Xrom/c2z/z9WHRd7Ft+qAGAtNwXffMiptSH/DTf V/xw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=UEkYJ+O3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id y124-20020a633282000000b00502d60b07fasi763676pgy.127.2023.03.10.14.08.22; Fri, 10 Mar 2023 14:08:35 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=UEkYJ+O3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231715AbjCJVpP (ORCPT + 99 others); Fri, 10 Mar 2023 16:45:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59102 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231992AbjCJVoY (ORCPT ); Fri, 10 Mar 2023 16:44:24 -0500 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F14C5D332A for ; Fri, 10 Mar 2023 13:43:30 -0800 (PST) Received: by mail-pj1-x1049.google.com with SMTP id ip3-20020a17090b314300b00237c16adf30so4908613pjb.5 for ; Fri, 10 Mar 2023 13:43:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678484592; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=qBcz2mERBbm0KpMlPQ5X2eESMX5T/tz8It36IggkYIA=; b=UEkYJ+O3FYHxietZ/9hAIbIUniSp/D7b6gTZnFmpwt1cBGPLj+kXoryW0lD96tZQgz m8Yb/jQogzJSm2E+TseAdhxD3HjqaK22W/PC3jPBvSM74PPG7Vrc41OG5fJ58gZ4z6bK db1+jL5vBqa1CEAzNSijqkX1/bUAYY4RpYhsOIcS0W5cZDBXijQ6rl5Pm8byrieIRV/w nYjv0LL2gp6muNmL2ltR/9l4nY8VjbYslT24BRnOLbdcY6oaGb6rs+SymF/oAV8IV5Xi BVjIxtnCgQRlbXdnUYaBEfaeuHopSMyHbuorSLBPuiA632srVjIZa83WsFi+DWNhkhsp 03KA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678484592; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=qBcz2mERBbm0KpMlPQ5X2eESMX5T/tz8It36IggkYIA=; b=MFSRNZYOvH3S1JvY5FB5P6drkt0Di3H+EJHOZ4+kyOod5VV5BxfbYX5gd2/9qvdtYK GjOYhS2AGrmh5BSlh9cTDr/TyYyFu2CYibceeGh/W+OFIfp6z6jNtklqpICbUclxtLkV zDkLsX21RVGKqDy/eU9ABeVSePAEiQhamnfvT64zm7JE+7QaezDzaS0n4JbUrx4z7I3l DrScQIDWY2iSeYQVZ0WEFjSw2t89jARO0pJ68gAKkH11Jx+kMwxH62OhrPGxKuMuB+6Y dt23Kamqhg1B+/NFPI6ZgSZ/HJBR340mnaa4EbaN2Ze+Y02IbHAhswfN8hBaaGhljd8K 0TUA== X-Gm-Message-State: AO0yUKUQ/sZeakEiqGuckvyevC07qMfTpJkVhL9fDzin57eJ4yfYzz+l SePV/vgSa7x8T90xEaGv7zqqAaxis90= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a62:dbc5:0:b0:5df:9809:621f with SMTP id f188-20020a62dbc5000000b005df9809621fmr11079354pfg.0.1678484592298; Fri, 10 Mar 2023 13:43:12 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 10 Mar 2023 13:42:32 -0800 In-Reply-To: <20230310214232.806108-1-seanjc@google.com> Mime-Version: 1.0 References: <20230310214232.806108-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc1.284.g88254d51c5-goog Message-ID: <20230310214232.806108-19-seanjc@google.com> Subject: [PATCH v2 18/18] KVM: SVM: Use "standard" stgi() helper when disabling SVM From: Sean Christopherson To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Sean Christopherson , Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Andrew Cooper , Kai Huang , Chao Gao X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760020257242455710?= X-GMAIL-MSGID: =?utf-8?q?1760020257242455710?= Now that kvm_rebooting is guaranteed to be true prior to disabling SVM in an emergency, use the existing stgi() helper instead of open coding STGI. In effect, eat faults on STGI if and only if kvm_rebooting==true. Signed-off-by: Sean Christopherson --- arch/x86/kvm/svm/svm.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index 30f7840151be..420b35770f0a 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -591,17 +591,10 @@ static inline void kvm_cpu_svm_disable(void) rdmsrl(MSR_EFER, efer); if (efer & EFER_SVME) { /* - * Force GIF=1 prior to disabling SVM to ensure INIT and NMI - * aren't blocked, e.g. if a fatal error occurred between CLGI - * and STGI. Note, STGI may #UD if SVM is disabled from NMI - * context between reading EFER and executing STGI. In that - * case, GIF must already be set, otherwise the NMI would have - * been blocked, so just eat the fault. + * Force GIF=1 prior to disabling SVM, e.g. to ensure INIT and + * NMI aren't blocked. */ - asm_volatile_goto("1: stgi\n\t" - _ASM_EXTABLE(1b, %l[fault]) - ::: "memory" : fault); -fault: + stgi(); wrmsrl(MSR_EFER, efer & ~EFER_SVME); } }