Received: by 2002:a05:6a10:a841:0:0:0:0 with SMTP id d1csp4838269pxy; Tue, 27 Apr 2021 13:57:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx3Xydj42bnvDinqtwkMvgeC4GjT+B+Kn++qa3unbLxLRtNE/ayr2yubwhHcJX6g1lYMJxM X-Received: by 2002:a05:6a00:1687:b029:253:f417:4dba with SMTP id k7-20020a056a001687b0290253f4174dbamr24816972pfc.5.1619557037099; Tue, 27 Apr 2021 13:57:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1619557037; cv=none; d=google.com; s=arc-20160816; b=B+Ym/Fwuj6k662WfGLdvmBCVGo7LpMSzvzXJoMr6w4Jz7dzjtcPfbuwXs98Wxe4b2B 9PCnnnDCCvSNX1Q8XR+1qrlCjP4lfTVBCp9tg3Au59B6yE8C2ErPrDCgbjQc1P7hiZJX SEmEIuA5HKpHTZi6kBAmxHKnCViW90dmv9WPr34/ati+5nB2Ub8RqR5DbOZIgfD1MPcR dUmX0wCf+YXG0bqDdK4QkQZZLuRe5JL9t53/356x+H04c/ZOX+yJKKxMX6Zf+0OvMWjg qeSfwuGc1I47dyQEQqhinEb7mChbBA60ovg/5KCulA0cQF3U0IYJwdVPYMPkDbcrhKMv CDAg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-filter; bh=3GvVKs98S/mI0qIXyqkLp0F4ZBwpHP8zV+oE4wjTNHA=; b=ZZeLrkpbrxCPFiowctYtjoB8xq3dMAIr6wyIn6HkeAqlmQri0/XXlqbdC7p4lfnPxc OhZqnoEzEYiGwvbdF8K0t2/SDqHk+mWA/5LV1dWYGSweBqJNFJvFDEHtWtRMvinNnjoR EUshVtO/mxFAGZ7GYkShPglifSMXDtM/+sy7xLurhK8o3HjY8JxQjQ9kcMhH8ogKBnkm pwgjwkYnuAf3mM9lNinQnQUe8HgGXc7By+KG/Jk/ATfGmdkQegt3wiBSmfzrZxTxr5d8 NnBZH7Fr+HQzMmjQTesFeAPTAYpgRt+cka31uL0Jhre9LXrz4FREN0cYhuaZFvoDsoy5 EFHg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.microsoft.com header.s=default header.b=rvI2Ija0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id iq22si4319510pjb.25.2021.04.27.13.57.05; Tue, 27 Apr 2021 13:57:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.microsoft.com header.s=default header.b=rvI2Ija0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239222AbhD0U4E (ORCPT + 99 others); Tue, 27 Apr 2021 16:56:04 -0400 Received: from linux.microsoft.com ([13.77.154.182]:35628 "EHLO linux.microsoft.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239049AbhD0Uzu (ORCPT ); Tue, 27 Apr 2021 16:55:50 -0400 Received: from viremana-dev.fwjladdvyuiujdukmejncen4mf.xx.internal.cloudapp.net (unknown [13.66.132.26]) by linux.microsoft.com (Postfix) with ESMTPSA id 2FBA220B8004; Tue, 27 Apr 2021 13:55:06 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 2FBA220B8004 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1619556906; bh=3GvVKs98S/mI0qIXyqkLp0F4ZBwpHP8zV+oE4wjTNHA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rvI2Ija06dEh47Zj52gAW9Ewy9dr8xcuAaZyJHSa7prieZwcwWwK/aMiPHMdNn9ha 16V2I1ct5jHooC42CAXZ79+r0+fUtCqnCaEDtAWatz25cURd/r6oxao9thwBxWTUlz cxCQkkgB8LIlbdJCykGQ+gbfWuOHACIzPeI+dzeo= From: Vineeth Pillai To: Lan Tianyu , Michael Kelley , Paolo Bonzini , Sean Christopherson , Vitaly Kuznetsov , Tom Lendacky , Wanpeng Li , Jim Mattson , Joerg Roedel , Wei Liu , Stephen Hemminger , Haiyang Zhang Cc: Vineeth Pillai , "H. Peter Anvin" , Thomas Gleixner , Ingo Molnar , Borislav Petkov , "K. Y. Srinivasan" , x86@kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hyperv@vger.kernel.org Subject: [PATCH v4 4/7] KVM: SVM: Software reserved fields Date: Tue, 27 Apr 2021 20:54:53 +0000 Message-Id: X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SVM added support for certain reserved fields to be used by software or hypervisor. Add the following reserved fields: - VMCB offset 0x3e0 - 0x3ff - Clean bit 31 - SVM intercept exit code 0xf0000000 Later patches will make use of this for supporting Hyper-V nested virtualization enhancements. Signed-off-by: Vineeth Pillai --- arch/x86/include/asm/svm.h | 9 +++++++-- arch/x86/include/uapi/asm/svm.h | 3 +++ arch/x86/kvm/svm/svm.h | 17 +++++++++++++++-- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/arch/x86/include/asm/svm.h b/arch/x86/include/asm/svm.h index 1c561945b426..8dac318bd6f9 100644 --- a/arch/x86/include/asm/svm.h +++ b/arch/x86/include/asm/svm.h @@ -156,6 +156,12 @@ struct __attribute__ ((__packed__)) vmcb_control_area { u64 avic_physical_id; /* Offset 0xf8 */ u8 reserved_7[8]; u64 vmsa_pa; /* Used for an SEV-ES guest */ + u8 reserved_8[720]; + /* + * Offset 0x3e0, 32 bytes reserved + * for use by hypervisor/software. + */ + u8 reserved_sw[32]; }; @@ -312,7 +318,7 @@ struct ghcb { #define EXPECTED_VMCB_SAVE_AREA_SIZE 1032 -#define EXPECTED_VMCB_CONTROL_AREA_SIZE 272 +#define EXPECTED_VMCB_CONTROL_AREA_SIZE 1024 #define EXPECTED_GHCB_SIZE PAGE_SIZE static inline void __unused_size_checks(void) @@ -324,7 +330,6 @@ static inline void __unused_size_checks(void) struct vmcb { struct vmcb_control_area control; - u8 reserved_control[1024 - sizeof(struct vmcb_control_area)]; struct vmcb_save_area save; } __packed; diff --git a/arch/x86/include/uapi/asm/svm.h b/arch/x86/include/uapi/asm/svm.h index 554f75fe013c..efa969325ede 100644 --- a/arch/x86/include/uapi/asm/svm.h +++ b/arch/x86/include/uapi/asm/svm.h @@ -110,6 +110,9 @@ #define SVM_VMGEXIT_GET_AP_JUMP_TABLE 1 #define SVM_VMGEXIT_UNSUPPORTED_EVENT 0x8000ffff +/* Exit code reserved for hypervisor/software use */ +#define SVM_EXIT_SW 0xf0000000 + #define SVM_EXIT_ERR -1 #define SVM_EXIT_REASONS \ diff --git a/arch/x86/kvm/svm/svm.h b/arch/x86/kvm/svm/svm.h index 39e071fdab0c..4e073b88c8cb 100644 --- a/arch/x86/kvm/svm/svm.h +++ b/arch/x86/kvm/svm/svm.h @@ -33,6 +33,11 @@ static const u32 host_save_user_msrs[] = { extern u32 msrpm_offsets[MSRPM_OFFSETS] __read_mostly; extern bool npt_enabled; +/* + * Clean bits in VMCB. + * VMCB_ALL_CLEAN_MASK might also need to + * be updated if this enum is modified. + */ enum { VMCB_INTERCEPTS, /* Intercept vectors, TSC offset, pause filter count */ @@ -50,9 +55,17 @@ enum { * AVIC PHYSICAL_TABLE pointer, * AVIC LOGICAL_TABLE pointer */ - VMCB_DIRTY_MAX, + VMCB_SW = 31, /* Reserved for hypervisor/software use */ }; +#define VMCB_ALL_CLEAN_MASK ( \ + (1U << VMCB_INTERCEPTS) | (1U << VMCB_PERM_MAP) | \ + (1U << VMCB_ASID) | (1U << VMCB_INTR) | \ + (1U << VMCB_NPT) | (1U << VMCB_CR) | (1U << VMCB_DR) | \ + (1U << VMCB_DT) | (1U << VMCB_SEG) | (1U << VMCB_CR2) | \ + (1U << VMCB_LBR) | (1U << VMCB_AVIC) | \ + (1U << VMCB_SW)) + /* TPR and CR2 are always written before VMRUN */ #define VMCB_ALWAYS_DIRTY_MASK ((1U << VMCB_INTR) | (1U << VMCB_CR2)) @@ -230,7 +243,7 @@ static inline void vmcb_mark_all_dirty(struct vmcb *vmcb) static inline void vmcb_mark_all_clean(struct vmcb *vmcb) { - vmcb->control.clean = ((1 << VMCB_DIRTY_MAX) - 1) + vmcb->control.clean = VMCB_ALL_CLEAN_MASK & ~VMCB_ALWAYS_DIRTY_MASK; } -- 2.25.1