From nobody Wed Dec 31 06:36:36 2025 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 DFDA4C4332F for ; Tue, 7 Nov 2023 20:20:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343552AbjKGUU7 (ORCPT ); Tue, 7 Nov 2023 15:20:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45460 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235268AbjKGUUj (ORCPT ); Tue, 7 Nov 2023 15:20:39 -0500 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 EF6BB1706 for ; Tue, 7 Nov 2023 12:20:27 -0800 (PST) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-5a7af53bde4so82825007b3.0 for ; Tue, 07 Nov 2023 12:20:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1699388427; x=1699993227; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=zwz/DX5/0PSQdls3zWf864vgsuhHF2nqgARPPlW8Wak=; b=3Gcygnai67kT+WqcXgt+oLUEvz+kxgU/nq8W+5br6jDrCHgNCl2rEIVka1LTq/633i 8k3jSY2D2QFP2RICc/MT+sfx/VlL6STXYxx/z00oKapA+lOGlObf/PwqXDZ0RT/GR/xP iijlp5/pLylLfkp7k52m/zOaS/rkFlo+8OZM/KgigLqCCBXTY7fR/m4E+wn24S2Sv9cw eoBNzEvSBiKPBeee8nYC5m8HIXo2TkTYkTL3Gg67FDBB+TOmJWxaIplIB0yJbHMKUYEo Cy2bTaPCtsmWrtwT2+Y8vtioDbnCOo7Oja5sdsjEg1lYOa9J8ZWNvN79/Xc3L5U8Hx4v tD6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699388427; x=1699993227; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=zwz/DX5/0PSQdls3zWf864vgsuhHF2nqgARPPlW8Wak=; b=MUh1etG3oqsdpEwO0SdOWnPK1CGT2cAZt6dLYPHNMB/IBZDIkWFIXFoGHmGwmr8hqX yNQRrPveTwa/aQ+54vR6q0UGYNTErb8WaBgwfplGAK1g6lqT0wtBQQbK9eVbRSPy7KUh CzVXRTDwZjlRx7aCGEBENN2MjkzhuuqjkAWxV49jo+0Ch2f2ReSdWMG+lMuenC5s9mTh fXfu92ifw1MudA2QYEZeJGmSImsnbPOR/nOH2J4otC6EDWEnGiG2p8/MZ1HcPEpJB+pP f81o+ggCMb4nHwbvc8VWwMFowiayZsrB0ZbNpSIilvzpctwe2p9CsJbcWOzCtpQ/nvq4 bw9w== X-Gm-Message-State: AOJu0YwObEddu495tlzHmKgaOz9bE47LlYida9t/Xdg7vDzORKQAPxD3 8O/GO73UmXKHerDJKZIOFIee8z78up2zwA== X-Google-Smtp-Source: AGHT+IE6r0sMd4kiFjw74n4jFrPY3A6ZLSngl/1kFEoTU04Ea3WGhGaUk1oh3I8bkSM8wWmAUocFK/sAzUMi/w== X-Received: from aghulati-dev.c.googlers.com ([fda3:e722:ac3:cc00:2b:ff92:c0a8:18bb]) (user=aghulati job=sendgmr) by 2002:a81:4ec2:0:b0:5a8:3f07:ddd6 with SMTP id c185-20020a814ec2000000b005a83f07ddd6mr284468ywb.6.1699388427125; Tue, 07 Nov 2023 12:20:27 -0800 (PST) Date: Tue, 7 Nov 2023 20:19:55 +0000 In-Reply-To: <20231107202002.667900-1-aghulati@google.com> Mime-Version: 1.0 References: <20231107202002.667900-1-aghulati@google.com> X-Mailer: git-send-email 2.42.0.869.gea05f2083d-goog Message-ID: <20231107202002.667900-8-aghulati@google.com> Subject: [RFC PATCH 07/14] KVM: SVM: Move shared SVM data structures into VAC From: Anish Ghulati To: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Sean Christopherson , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, hpa@zytor.com, Vitaly Kuznetsov , peterz@infradead.org, paulmck@kernel.org, Mark Rutland Cc: Anish Ghulati , Venkatesh Srinivas Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move svm_cpu_data into VAC. TODO: Explain why this data should be shared between KVMs and should be made global by moving it into VAC. Signed-off-by: Venkatesh Srinivas Signed-off-by: Anish Ghulati --- arch/x86/kvm/svm/svm.c | 9 ++++++++- arch/x86/kvm/svm/svm.h | 16 +--------------- arch/x86/kvm/svm/vac.c | 5 +++++ arch/x86/kvm/svm/vac.h | 23 +++++++++++++++++++++++ 4 files changed, 37 insertions(+), 16 deletions(-) create mode 100644 arch/x86/kvm/svm/vac.h diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index f0a5cc43c023..d53808d8ec37 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -234,7 +234,14 @@ static u8 rsm_ins_bytes[] =3D "\x0f\xaa"; =20 static unsigned long iopm_base; =20 -DEFINE_PER_CPU(struct svm_cpu_data, svm_data); +struct kvm_ldttss_desc { + u16 limit0; + u16 base0; + unsigned base1:8, type:5, dpl:2, p:1; + unsigned limit1:4, zero0:3, g:1, base2:8; + u32 base3; + u32 zero1; +} __attribute__((packed)); =20 /* * Only MSR_TSC_AUX is switched via the user return hook. EFER is switche= d via diff --git a/arch/x86/kvm/svm/svm.h b/arch/x86/kvm/svm/svm.h index 436632706848..7fc652b1b92d 100644 --- a/arch/x86/kvm/svm/svm.h +++ b/arch/x86/kvm/svm/svm.h @@ -24,6 +24,7 @@ =20 #include "cpuid.h" #include "kvm_cache_regs.h" +#include "vac.h" =20 #define __sme_page_pa(x) __sme_set(page_to_pfn(x) << PAGE_SHIFT) =20 @@ -291,21 +292,6 @@ struct vcpu_svm { bool guest_gif; }; =20 -struct svm_cpu_data { - u64 asid_generation; - u32 max_asid; - u32 next_asid; - u32 min_asid; - - struct page *save_area; - unsigned long save_area_pa; - - struct vmcb *current_vmcb; - - /* index =3D sev_asid, value =3D vmcb pointer */ - struct vmcb **sev_vmcbs; -}; - DECLARE_PER_CPU(struct svm_cpu_data, svm_data); =20 void recalc_intercepts(struct vcpu_svm *svm); diff --git a/arch/x86/kvm/svm/vac.c b/arch/x86/kvm/svm/vac.c index 4aabf16d2fc0..3e79279c6b34 100644 --- a/arch/x86/kvm/svm/vac.c +++ b/arch/x86/kvm/svm/vac.c @@ -1,2 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only =20 +#include + +#include "vac.h" + +DEFINE_PER_CPU(struct svm_cpu_data, svm_data); diff --git a/arch/x86/kvm/svm/vac.h b/arch/x86/kvm/svm/vac.h new file mode 100644 index 000000000000..2d42e4472703 --- /dev/null +++ b/arch/x86/kvm/svm/vac.h @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: GPL-2.0-only +// +#ifndef ARCH_X86_KVM_SVM_VAC_H +#define ARCH_X86_KVM_SVM_VAC_H + +#include "../vac.h" + +struct svm_cpu_data { + u64 asid_generation; + u32 max_asid; + u32 next_asid; + u32 min_asid; + + struct page *save_area; + unsigned long save_area_pa; + + struct vmcb *current_vmcb; + + /* index =3D sev_asid, value =3D vmcb pointer */ + struct vmcb **sev_vmcbs; +}; + +#endif // ARCH_X86_KVM_SVM_VAC_H --=20 2.42.0.869.gea05f2083d-goog