From nobody Sun Feb 8 07:07:19 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B3C41C7EE43 for ; Wed, 7 Jun 2023 20:35:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234125AbjFGUfz (ORCPT ); Wed, 7 Jun 2023 16:35:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33800 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234023AbjFGUfh (ORCPT ); Wed, 7 Jun 2023 16:35:37 -0400 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 E41D22134 for ; Wed, 7 Jun 2023 13:35:24 -0700 (PDT) Received: by mail-pf1-x44a.google.com with SMTP id d2e1a72fcca58-65a971d7337so733243b3a.1 for ; Wed, 07 Jun 2023 13:35:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1686170124; x=1688762124; 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=QKGNbuIRPOc0oEQDRY93/M6VINL0VW78jDwrnuqOT30=; b=ZCeDl8WSn650uNgAj+yEDQmfaZ8xkSCJMfbmlFPsuMX9pm89i/I/pi7VVwPhnkTS4M +KLDrmheKokh5oF82ijLJqNzIsvdWTs3bkCjpqfjy/ecWcNa/OsRUkLjSl0slVtyKd2h XS/aN4FY/t46GNIw/i5GqD7EehEdCdJxYZOp6ARkzbQ2k0AAWZJCjm4EqVpbKb27CWfh 1xx7X0C99xkGysIVUeq58EH2sygyCUztrR/HPQfuwJfvuJ2lKuVKhyc1ZiIhgTAPv6Fi bahA3y7GrwPLiVFYnk++lTRlPXmgRGx/2HqcAtaZURFDoqr+/TQe1GgqMHYNaa0V1xaZ occA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686170124; x=1688762124; 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=QKGNbuIRPOc0oEQDRY93/M6VINL0VW78jDwrnuqOT30=; b=PuuR6mseXGPu+tvXOw3o+Wn6FSC3HCZey9kZOryjtDPx81yCHtljgtLqCtuxItghYG 58FlJWslnXjE0Cqi+RptQfpSXFsaSBmW2AMr4ZBzUGmxOeoDK6r3zj9sh00Ev7bUE861 j0eX8xdW53AiVPToLtJgawWpDyR9maDiyjibT7w5MrMi5rvUYep2Pz215H5oTtkKeCG+ QuIAEyOAVFIj28o/wnsFJr/+hskGLCZDlApsh8lFETMFG9exH7/nkSFzN3XM/ezwhG6c 7PsTeYkooyNoBzSLTWk3qAg2yjX/A53SZm076C2he7CIruw0XrLbU4xyERoxXcuw1zJQ 1REw== X-Gm-Message-State: AC+VfDxC6lt0SqzE0CYsfI28DZXR1mylVmEOHRY6tnR/rUfxUIbnagVm yx2Y8tz2qFNdzUE7G95frQxSbd4D3Js= X-Google-Smtp-Source: ACHHUZ4A0Z9xGdm6L3FJIci3sFzmb3bRk8w3wgJgiZF3+B0m1nQOodqHUV+/T4EDQzeMRYR0FT2D3k7Voa8= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a05:6a00:10:b0:662:129b:6a54 with SMTP id h16-20020a056a00001000b00662129b6a54mr45259pfk.1.1686170124101; Wed, 07 Jun 2023 13:35:24 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 7 Jun 2023 13:35:17 -0700 In-Reply-To: <20230607203519.1570167-1-seanjc@google.com> Mime-Version: 1.0 References: <20230607203519.1570167-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.162.gfafddb0af9-goog Message-ID: <20230607203519.1570167-2-seanjc@google.com> Subject: [PATCH 1/3] KVM: SVM: Fix dead KVM_BUG() code in LBR MSR virtualization From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Michal Luczaj , Yuan Yao Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Refactor KVM's handling of LBR MSRs on SVM to avoid a second layer of case statements, and thus eliminate a dead KVM_BUG() call, which (a) will never be hit in the current code base and (b) if a future commit breaks things, will never fire as KVM passes "false" instead "true" or '1' for the KVM_BUG() condition. Reported-by: Michal Luczaj Cc: Yuan Yao Signed-off-by: Sean Christopherson --- arch/x86/kvm/svm/svm.c | 45 +++++++++++++++--------------------------- 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index e265834fe859..b7d145571f75 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -947,43 +947,22 @@ static void svm_disable_lbrv(struct kvm_vcpu *vcpu) svm_copy_lbrs(svm->vmcb01.ptr, svm->vmcb); } =20 -static int svm_get_lbr_msr(struct vcpu_svm *svm, u32 index) +static struct vmcb *svm_get_lbr_vmcb(struct vcpu_svm *svm) { /* - * If the LBR virtualization is disabled, the LBR msrs are always - * kept in the vmcb01 to avoid copying them on nested guest entries. - * - * If nested, and the LBR virtualization is enabled/disabled, the msrs - * are moved between the vmcb01 and vmcb02 as needed. + * If LBR virtualization is disabled, the LBR MSRs are always kept in + * vmcb01. If LBR virtualization is enabled and L1 is running VMs of + * its own, the MSRs are moved between vmcb01 and vmcb02 as needed. */ - struct vmcb *vmcb =3D - (svm->vmcb->control.virt_ext & LBR_CTL_ENABLE_MASK) ? - svm->vmcb : svm->vmcb01.ptr; - - switch (index) { - case MSR_IA32_DEBUGCTLMSR: - return vmcb->save.dbgctl; - case MSR_IA32_LASTBRANCHFROMIP: - return vmcb->save.br_from; - case MSR_IA32_LASTBRANCHTOIP: - return vmcb->save.br_to; - case MSR_IA32_LASTINTFROMIP: - return vmcb->save.last_excp_from; - case MSR_IA32_LASTINTTOIP: - return vmcb->save.last_excp_to; - default: - KVM_BUG(false, svm->vcpu.kvm, - "%s: Unknown MSR 0x%x", __func__, index); - return 0; - } + return svm->vmcb->control.virt_ext & LBR_CTL_ENABLE_MASK ? svm->vmcb : + svm->vmcb01.ptr; } =20 void svm_update_lbrv(struct kvm_vcpu *vcpu) { struct vcpu_svm *svm =3D to_svm(vcpu); =20 - bool enable_lbrv =3D svm_get_lbr_msr(svm, MSR_IA32_DEBUGCTLMSR) & - DEBUGCTLMSR_LBR; + bool enable_lbrv =3D svm_get_lbr_vmcb(svm)->save.dbgctl & DEBUGCTLMSR_LBR; =20 bool current_enable_lbrv =3D !!(svm->vmcb->control.virt_ext & LBR_CTL_ENABLE_MASK); @@ -2795,11 +2774,19 @@ static int svm_get_msr(struct kvm_vcpu *vcpu, struc= t msr_data *msr_info) msr_info->data =3D svm->tsc_aux; break; case MSR_IA32_DEBUGCTLMSR: + msr_info->data =3D svm_get_lbr_vmcb(svm)->save.dbgctl; + break; case MSR_IA32_LASTBRANCHFROMIP: + msr_info->data =3D svm_get_lbr_vmcb(svm)->save.br_from; + break; case MSR_IA32_LASTBRANCHTOIP: + msr_info->data =3D svm_get_lbr_vmcb(svm)->save.br_to; + break; case MSR_IA32_LASTINTFROMIP: + msr_info->data =3D svm_get_lbr_vmcb(svm)->save.last_excp_from; + break; case MSR_IA32_LASTINTTOIP: - msr_info->data =3D svm_get_lbr_msr(svm, msr_info->index); + msr_info->data =3D svm_get_lbr_vmcb(svm)->save.last_excp_to; break; case MSR_VM_HSAVE_PA: msr_info->data =3D svm->nested.hsave_msr; --=20 2.41.0.162.gfafddb0af9-goog From nobody Sun Feb 8 07:07:19 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9D373C7EE23 for ; Wed, 7 Jun 2023 20:36:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233998AbjFGUgE (ORCPT ); Wed, 7 Jun 2023 16:36:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34594 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234051AbjFGUfk (ORCPT ); Wed, 7 Jun 2023 16:35:40 -0400 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 85C8C2703 for ; Wed, 7 Jun 2023 13:35:26 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id 98e67ed59e1d1-2564b3494baso2840929a91.1 for ; Wed, 07 Jun 2023 13:35:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1686170126; x=1688762126; 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=DquDErYwSPFQFhe20Zbr/7qCAnoddW9Z0B+S6Q5Fhio=; b=FWGwOMWthgPc7UaDciIlmjesryq0AK5GA+YXJcOdu9psUB2gPqYflrXJurDw3MfrmF xp0Z49eUO7QsMN3rNY0J1alAZYZVNzeP+Mu3QTZzSGz5fInRhB2bRA5IN7ibxTkvMdRO 0/Nxq+wibrs8faMQnqw7EmBrIRJSQDsulrVe1AkJ4Ceo58bipREb9vDr8AEuGoNE45y+ z01xOaiLmbXcd/KkH+qG8k2EmLGEo2cwH08QFZhwMckgO8uuNQbWIhSRFvTMcursA1IB 9d0mbPQsrJLjrc3trMUHYnTwkmGUaAwMlkrnfd7O147NByHy+8b4Fn89fdgNSE2izsDZ Edbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686170126; x=1688762126; 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=DquDErYwSPFQFhe20Zbr/7qCAnoddW9Z0B+S6Q5Fhio=; b=FMvQzp9h4vmy6Sjt2ebspU2TGyNVrr3yULyBsScDotDZ0Xc9nbrktG9BpUgy4T/lov zy6dgixowR4/G2uKtZFtf1MHdZkcc6iBm0cMPqDv6vM4C0JawJpO5AFsXqUDvGtMUHH1 3allGtIxvpmWpxD1oRxVJIyyasOOlGRa+Xx5BM9OKmN4VOFQiCJWxs8Pa7Qbz5G/K52G xkDhpylKHymtNo9oUO/WKc+s4XVq/MizzYAekgbFYXeTVEhtWcakjceAi3UD+5s2xIJl q7QEwyCMOXw3am2rE0hHcTa4F3grGrC4tP98SKkTid1DaywWupotKf0wlYrJaOYMbOwA LCoA== X-Gm-Message-State: AC+VfDzp1OQFvIJIdY5m2QkCKlCDoLa5JWZCKwThrRsj6SUoMiKrFSAN i6oFA5SDKM2knBclBRC1G6MtGNT+B6E= X-Google-Smtp-Source: ACHHUZ4Bu6Z4iuKJGZ/XdfxdMPwtpbxA9+mAfD76YKLnzNWMnhs0o+MBIjCmUylppJXZ4F8X9XT+FHSQJDM= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90b:907:b0:253:56ee:2172 with SMTP id bo7-20020a17090b090700b0025356ee2172mr1643711pjb.6.1686170125989; Wed, 07 Jun 2023 13:35:25 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 7 Jun 2023 13:35:18 -0700 In-Reply-To: <20230607203519.1570167-1-seanjc@google.com> Mime-Version: 1.0 References: <20230607203519.1570167-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.162.gfafddb0af9-goog Message-ID: <20230607203519.1570167-3-seanjc@google.com> Subject: [PATCH 2/3] KVM: SVM: Clean up handling of LBR virtualization enabled From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Michal Luczaj , Yuan Yao Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Clean up the enable_lbrv computation in svm_update_lbrv() to consolidate the logic for computing enable_lbrv into a single statement, and to remove the coding style violations (lack of curly braces on nested if). No functional change intended. Signed-off-by: Sean Christopherson --- arch/x86/kvm/svm/svm.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index b7d145571f75..db97eca6c1ae 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -961,15 +961,10 @@ static struct vmcb *svm_get_lbr_vmcb(struct vcpu_svm = *svm) void svm_update_lbrv(struct kvm_vcpu *vcpu) { struct vcpu_svm *svm =3D to_svm(vcpu); - - bool enable_lbrv =3D svm_get_lbr_vmcb(svm)->save.dbgctl & DEBUGCTLMSR_LBR; - - bool current_enable_lbrv =3D !!(svm->vmcb->control.virt_ext & - LBR_CTL_ENABLE_MASK); - - if (unlikely(is_guest_mode(vcpu) && svm->lbrv_enabled)) - if (unlikely(svm->nested.ctl.virt_ext & LBR_CTL_ENABLE_MASK)) - enable_lbrv =3D true; + bool current_enable_lbrv =3D svm->vmcb->control.virt_ext & LBR_CTL_ENABLE= _MASK; + bool enable_lbrv =3D (svm_get_lbr_vmcb(svm)->save.dbgctl & DEBUGCTLMSR_LB= R) || + (is_guest_mode(vcpu) && svm->lbrv_enabled && + (svm->nested.ctl.virt_ext & LBR_CTL_ENABLE_MASK)); =20 if (enable_lbrv =3D=3D current_enable_lbrv) return; --=20 2.41.0.162.gfafddb0af9-goog From nobody Sun Feb 8 07:07:19 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4CE70C7EE25 for ; Wed, 7 Jun 2023 20:36:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233840AbjFGUgA (ORCPT ); Wed, 7 Jun 2023 16:36:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33794 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234064AbjFGUfn (ORCPT ); Wed, 7 Jun 2023 16:35:43 -0400 Received: from mail-pg1-x549.google.com (mail-pg1-x549.google.com [IPv6:2607:f8b0:4864:20::549]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 41393269E for ; Wed, 7 Jun 2023 13:35:28 -0700 (PDT) Received: by mail-pg1-x549.google.com with SMTP id 41be03b00d2f7-5428d1915acso645596a12.0 for ; Wed, 07 Jun 2023 13:35:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1686170128; x=1688762128; 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=jgGL3J+y4YYi/bcB6j3OZN64JX2gA8WjmgGOG10ljEs=; b=FtBRDqEhDT9q55n0xQR6Rf5ieQVZhE5Cnn1NvZJ/TW8wF2Xyb/C4lAicVY8vUnhIZD zPBOufIPplRK+DIZYdrQOiMeEqGn4V6di7knmWJpsclovsxrV3RFThS1t7e4tDAQp1y6 HGEVhQ+nPGLIquEqvsomGP/LYHdgnPMONWxL3P8HWN/96ixdKk6p3lNk3mdc35g+rOC9 fubFNxCLRgEoBBguaAQiaKRSmcWPm3jJvKDLz7sCO+kiX64y6H4TYjtGVqqBDhED3Wrn jBcTblIf5gIIukhkejMk2chPPJBVy/svUYv+fo6l8m0qpRfVkPx3+LO44CpRDKsFyzqW e9CA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686170128; x=1688762128; 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=jgGL3J+y4YYi/bcB6j3OZN64JX2gA8WjmgGOG10ljEs=; b=PJanm6DhGPgF/pIM9bogpsw+12P2ARo+3EmDhhE/K++bd98zLw+Cop4R01qfugAwGQ ruvr9vbrMDW8boImx7DW4ruHLwO6Cgqb73qxywqG+r6clLtbFNRQI9YX0/71xzaN4m2M UAYSJIq8wrpBixocGAta6F5gfhozqqZJ9iWiNRuSNmN4i4mPAkL1/ezgv4wqmVSzi4Gl 3wCKbB4z7UTH+LMbwMaWECcrQrMLLpqUuWqlEvmknin8ZBmqsTUS1fXresDJlXZKeDUR nieT6ARd2G5uUv3CF67i820zGPpu0DKV1tgeKPtZl+Eca+a3BWFs0yEqRAVdZrDaaDx4 wFZA== X-Gm-Message-State: AC+VfDzr/aGroruayV+oUShFKo7+pk2WP8PPFm4zJu9ig1/uuVUzEnMT /qN6p+pIJ9Ulwy2Vuy0ffUokoLKnVwk= X-Google-Smtp-Source: ACHHUZ5M9Mnni96gdicl/P/GXr4xEvyfmHJT1HLOEDpoaRo1Anwb1LGOQI0fXiOkt2NBM9HRSDswbjgkXOw= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a65:6c0e:0:b0:53f:9a37:c199 with SMTP id y14-20020a656c0e000000b0053f9a37c199mr33964pgu.1.1686170127719; Wed, 07 Jun 2023 13:35:27 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 7 Jun 2023 13:35:19 -0700 In-Reply-To: <20230607203519.1570167-1-seanjc@google.com> Mime-Version: 1.0 References: <20230607203519.1570167-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.162.gfafddb0af9-goog Message-ID: <20230607203519.1570167-4-seanjc@google.com> Subject: [PATCH 3/3] KVM: SVM: Use svm_get_lbr_vmcb() helper to handle writes to DEBUGCTL From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Michal Luczaj , Yuan Yao Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the recently introduced svm_get_lbr_vmcb() instead an open coded equivalent to retrieve the target VMCB when emulating writes to MSR_IA32_DEBUGCTLMSR. No functional change intended. Signed-off-by: Sean Christopherson --- arch/x86/kvm/svm/svm.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index db97eca6c1ae..b700de261ce8 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -3012,13 +3012,8 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct= msr_data *msr) if (data & DEBUGCTL_RESERVED_BITS) return 1; =20 - if (svm->vmcb->control.virt_ext & LBR_CTL_ENABLE_MASK) - svm->vmcb->save.dbgctl =3D data; - else - svm->vmcb01.ptr->save.dbgctl =3D data; - + svm_get_lbr_vmcb(svm)->save.dbgctl =3D data; svm_update_lbrv(vcpu); - break; case MSR_VM_HSAVE_PA: /* --=20 2.41.0.162.gfafddb0af9-goog