From patchwork Fri Jul 21 20:18:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 124114 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9010:0:b0:3e4:2afc:c1 with SMTP id l16csp476844vqg; Fri, 21 Jul 2023 14:33:28 -0700 (PDT) X-Google-Smtp-Source: APBJJlHpYpo/3V+PnF9vMx4peO2chqpZGhuSpFdI2+G3SwgQWIqFDG86fgATlZTnUgCCeDxYC5dh X-Received: by 2002:a05:6a00:22d3:b0:684:aa3e:7bf3 with SMTP id f19-20020a056a0022d300b00684aa3e7bf3mr1677455pfj.31.1689975208026; Fri, 21 Jul 2023 14:33:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689975208; cv=none; d=google.com; s=arc-20160816; b=lDWOoSwkY7OuV8RzpBjq0z9zXuGr+DSYjf71wAQOI7gkLT9TdQVxfKKWtjtexvKVWP SK8X/+D4zcLJLKSkZCdR7IKihN2Ss1R0KVtF28LJzdrLn8QpdHJgd3emY63VmZMFRPsE Q+YXrxR9aoS118+s5pyZMwscIvXqsuaQdog25Jrs6QRErPZ3ovY3ja2r6GES8VhOk50X khxe5NEYiPwvNA+sby4LVLvmjVF8U4j/eMCfJSIR20zRo0g3P9xd6voNFlUnj5z7ugv7 PQgIe6HCtNFVZTmpKJfn5lsC3Ep5vOPnH8ZoGdQYj0JLjFclfS9Hsoui+4r7nl0oY32V Il5Q== 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=wPlbfa+N8zgfbkJ5TFjNvfC430Np593GRATA+kV4uv8=; fh=GitwJflddDxrBBVhnTGEzIZYOBTU7RKSqL+OyCDv/0M=; b=fuQ+r1zHSnUeEkHxN2Xnb/nYirGx+WrdoHkReaF8VXpl/yJyEG3ZYlXg3tObLxFzQA Zr2IDs4O6v6TJUNlAhO/d5h+VBP2ntFxi3ir8gpG+lFayAoAEGkMksdgCKA2Pebr6Kfx iOWFwkVYH33anBkPtKWoMRjtFsiOPwMyTOfUG4n/I9W6c5t52bzmth+IerjQzeLexYsE vGSmtaYguNnPhIkMAh4Kn/yt70KeZxNVNroL23KGqN5VfVX70oYmNSGzbRcKwPyo90+t TSxkzQsr0hCE2Rbse5BSyE3gGQHtoOuZcOqlUgtyGXifHINO6sHGuAYPL8ooiwAvXppZ nCOQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=YMYRUHzU; 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 j5-20020a056a00174500b0067de347ee12si3906138pfc.164.2023.07.21.14.33.14; Fri, 21 Jul 2023 14:33:28 -0700 (PDT) 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=20221208 header.b=YMYRUHzU; 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 S231435AbjGUUU1 (ORCPT + 99 others); Fri, 21 Jul 2023 16:20:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39180 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230460AbjGUUUE (ORCPT ); Fri, 21 Jul 2023 16:20:04 -0400 Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2B680422D for ; Fri, 21 Jul 2023 13:19:35 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-5734d919156so26637607b3.3 for ; Fri, 21 Jul 2023 13:19:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1689970774; x=1690575574; 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=wPlbfa+N8zgfbkJ5TFjNvfC430Np593GRATA+kV4uv8=; b=YMYRUHzUDCVMuYn52ynlOKvBnRXOyiLr1dfgtoseNBOu4bDGsTucDMvLpEpL1MqmUe 4GSO5jlD2I9GxnBXQQRXoK5LwMCPEGlozlc4vlePKaqf3bhgsDxPjj+cBfWd7xupVa2/ i0NHbQtd24teDqosxIhfXN30cvUCTA5BSKtrqljErAnCSidWLnVSreSjcp9t3cgs8/8f j1Q2DQWnzLCp1MpXEbmnFdAh1ipvd0bngkKlEdgjYWvm70IfbIeCjdTuzIFN9rQlcRMX LZJ/W3WzKqojxqlMu8WlcWnJ0ILoNtfwLgJUzJKLYFQ7bJ52u6OwVjmUKa7/uN93JeuR y32A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689970774; x=1690575574; 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=wPlbfa+N8zgfbkJ5TFjNvfC430Np593GRATA+kV4uv8=; b=eQYFBcWsRet42VEw/ul8L+f8mxIANPU9eEG3NTrERtSixg4Ztg9gjrNVoegI1ibwuB TxQl/TbXi45cVRK95qEnwhgGcBcCPFI3x2fIMaimQbB95QGTk6PifbGiV4/E7TLmxDDw KeUzR1A2ewJQzBGXnFG6Y9uVrgkPFdThwdu0k9l4IRIV5Q9tLVWYYmsMU6D8byzI9uCx TzXOVblKklRAwq08T9wopTY/6z8cVhSFBx24jyPpYIrNWZGrb2gYzR83ZYjCs/y+PTis jvKmMXCL+6KkUXwNmG4KDHCvaD3uQZYwEkTx8FVpmiR4fqJ4BGVeuPIm9BrIu7v86ufa yd6g== X-Gm-Message-State: ABy/qLZx6X6EORU5PV4tOwdeM2O93jEMdUPTylL0PiJ8jrFS3cO3UVdG zAXpEG4SM1fX2HO30BpDYrf48ESvIyU= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a81:ad55:0:b0:583:6f04:4267 with SMTP id l21-20020a81ad55000000b005836f044267mr10407ywk.8.1689970774670; Fri, 21 Jul 2023 13:19:34 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 21 Jul 2023 13:18:55 -0700 In-Reply-To: <20230721201859.2307736-1-seanjc@google.com> Mime-Version: 1.0 References: <20230721201859.2307736-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230721201859.2307736-16-seanjc@google.com> Subject: [PATCH v4 15/19] 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_BLOCKED,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, 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: INBOX X-GMAIL-THRID: 1772067444016373233 X-GMAIL-MSGID: 1772067444016373233 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. Reviewed-by: Kai Huang 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 6f4fcd82fa6e..0e1f3856a9be 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -2737,9 +2737,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); @@ -2755,13 +2755,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) {