From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AFE93C433E6 for ; Fri, 22 Jan 2021 23:55:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7847123B52 for ; Fri, 22 Jan 2021 23:55:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726709AbhAVXy7 (ORCPT ); Fri, 22 Jan 2021 18:54:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60828 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726440AbhAVXwd (ORCPT ); Fri, 22 Jan 2021 18:52:33 -0500 Received: from mail-qt1-x849.google.com (mail-qt1-x849.google.com [IPv6:2607:f8b0:4864:20::849]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AA444C0617A7 for ; Fri, 22 Jan 2021 15:51:03 -0800 (PST) Received: by mail-qt1-x849.google.com with SMTP id b23so4682132qto.23 for ; Fri, 22 Jan 2021 15:51:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=sender:reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=vis1EBkMtVJzC1inZD1OMmTzA1+2z+PuDDfmwsUE9QI=; b=gDr4O4h28mPFdd+ZZdK1XAb3VtFI+oGGvNONZW582anW+VjJLm42e5NuH5SNAM45xb Pj9GLYb/xlP/Vj9f2Jw2ONUaJ+4JQERAh/7T5+vz2zNiqxY/sALKVM5CusVcxFyDT3/y LJqUEbg/n90iEGiuD4cUAkLqG8fOTCMWnb4Nx7XcJeoETZNF1ccdqT20ry6bo0sfAyFa ElKDo1nIx3dOtuq5aoATXw7LhDKeDTz99ZtBAfBk/vkkzvWcv9qiT2Gyo9uqkehBZ/ek SxYt0lbmaFMdPNVN8UlOKNfhL3e2sIy1dqSR/vuX8D1fh0Gsa4yUItxzKpNhJrDJEP3R 0SMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=vis1EBkMtVJzC1inZD1OMmTzA1+2z+PuDDfmwsUE9QI=; b=msSnimPphgluDE3Lxl7SE1Izy+P3vzMF616CJUkwZkp9bLxHbifexEiKY5ujGRo6ix y09a2pQ/WMk2/VbbGu6iqojlZkBIzxjtCQl4QaiksPV8Oma1doenGbPyXNtoVP1ORxFD kL7iiS9M4wCFKAohCwtO6NPGf/OIg51wrXj82gHWFK1lL0Mx2PnN0h/31HjHsPMHezmV lBuKARRE1bPz+oMH+Zb7jc1LGcysHYXUdIhOBiIhKMbze6aKUvgl4PRwkdnKg+uy8BmX 3AP25RIKwXv/S25k2wbd6qs9l9rCOV18Xwh3wJ6kQF+jRthq1xKCkIFPpWd4zDZFQLwf l3jA== X-Gm-Message-State: AOAM533GuDugwdMEH0SXVOsgTr96RLczNaCqwLFh0k2d18mIyHnuE7fS 0YQpCAiMmBbX46G3CHSQW/a4qk1uHxU= X-Google-Smtp-Source: ABdhPJzBBbroBZ04dz4g477SZCi+wa0A1PU9Lb5Y7vFKnW6C2/fcCrXdQgs559dhJ2QuE1HbvLewaiGMCPI= Sender: "seanjc via sendgmr" X-Received: from seanjc798194.pdx.corp.google.com ([2620:15c:f:10:1ea0:b8ff:fe73:50f5]) (user=seanjc job=sendgmr) by 2002:ad4:4ae2:: with SMTP id cp2mr7070738qvb.50.1611359462829; Fri, 22 Jan 2021 15:51:02 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 22 Jan 2021 15:50:48 -0800 In-Reply-To: <20210122235049.3107620-1-seanjc@google.com> Message-Id: <20210122235049.3107620-3-seanjc@google.com> Mime-Version: 1.0 References: <20210122235049.3107620-1-seanjc@google.com> X-Mailer: git-send-email 2.30.0.280.ga3ce27912f-goog Subject: [PATCH 2/3] KVM: x86: Revert "KVM: x86: Mark GPRs dirty when written" From: Sean Christopherson To: Paolo Bonzini Cc: Sean Christopherson , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Brijesh Singh , Tom Lendacky Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Revert the dirty/available tracking of GPRs now that KVM copies the GPRs to the GHCB on any post-VMGEXIT VMRUN, even if a GPR is not dirty. Per commit de3cd117ed2f ("KVM: x86: Omit caching logic for always-available GPRs"), tracking for GPRs noticeably impacts KVM's code footprint. This reverts commit 1c04d8c986567c27c56c05205dceadc92efb14ff. Signed-off-by: Sean Christopherson --- arch/x86/kvm/kvm_cache_regs.h | 51 +++++++++++++++++------------------ 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/arch/x86/kvm/kvm_cache_regs.h b/arch/x86/kvm/kvm_cache_regs.h index f15bc16de07c..a889563ad02d 100644 --- a/arch/x86/kvm/kvm_cache_regs.h +++ b/arch/x86/kvm/kvm_cache_regs.h @@ -9,31 +9,6 @@ (X86_CR4_PVI | X86_CR4_DE | X86_CR4_PCE | X86_CR4_OSFXSR \ | X86_CR4_OSXMMEXCPT | X86_CR4_PGE | X86_CR4_TSD | X86_CR4_FSGSBASE) -static inline bool kvm_register_is_available(struct kvm_vcpu *vcpu, - enum kvm_reg reg) -{ - return test_bit(reg, (unsigned long *)&vcpu->arch.regs_avail); -} - -static inline bool kvm_register_is_dirty(struct kvm_vcpu *vcpu, - enum kvm_reg reg) -{ - return test_bit(reg, (unsigned long *)&vcpu->arch.regs_dirty); -} - -static inline void kvm_register_mark_available(struct kvm_vcpu *vcpu, - enum kvm_reg reg) -{ - __set_bit(reg, (unsigned long *)&vcpu->arch.regs_avail); -} - -static inline void kvm_register_mark_dirty(struct kvm_vcpu *vcpu, - enum kvm_reg reg) -{ - __set_bit(reg, (unsigned long *)&vcpu->arch.regs_avail); - __set_bit(reg, (unsigned long *)&vcpu->arch.regs_dirty); -} - #define BUILD_KVM_GPR_ACCESSORS(lname, uname) \ static __always_inline unsigned long kvm_##lname##_read(struct kvm_vcpu *vcpu)\ { \ @@ -43,7 +18,6 @@ static __always_inline void kvm_##lname##_write(struct kvm_vcpu *vcpu, \ unsigned long val) \ { \ vcpu->arch.regs[VCPU_REGS_##uname] = val; \ - kvm_register_mark_dirty(vcpu, VCPU_REGS_##uname); \ } BUILD_KVM_GPR_ACCESSORS(rax, RAX) BUILD_KVM_GPR_ACCESSORS(rbx, RBX) @@ -63,6 +37,31 @@ BUILD_KVM_GPR_ACCESSORS(r14, R14) BUILD_KVM_GPR_ACCESSORS(r15, R15) #endif +static inline bool kvm_register_is_available(struct kvm_vcpu *vcpu, + enum kvm_reg reg) +{ + return test_bit(reg, (unsigned long *)&vcpu->arch.regs_avail); +} + +static inline bool kvm_register_is_dirty(struct kvm_vcpu *vcpu, + enum kvm_reg reg) +{ + return test_bit(reg, (unsigned long *)&vcpu->arch.regs_dirty); +} + +static inline void kvm_register_mark_available(struct kvm_vcpu *vcpu, + enum kvm_reg reg) +{ + __set_bit(reg, (unsigned long *)&vcpu->arch.regs_avail); +} + +static inline void kvm_register_mark_dirty(struct kvm_vcpu *vcpu, + enum kvm_reg reg) +{ + __set_bit(reg, (unsigned long *)&vcpu->arch.regs_avail); + __set_bit(reg, (unsigned long *)&vcpu->arch.regs_dirty); +} + static inline unsigned long kvm_register_read(struct kvm_vcpu *vcpu, int reg) { if (WARN_ON_ONCE((unsigned int)reg >= NR_VCPU_REGS)) -- 2.30.0.280.ga3ce27912f-goog