Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp4269420ybz; Tue, 28 Apr 2020 08:29:18 -0700 (PDT) X-Google-Smtp-Source: APiQypLUiLZS7KFSnhk5d3OCcRa0VgpQfeKIiY6QvOxV4MHaKUcT1oXq0jZXVhkUuQydB0bwuv8+ X-Received: by 2002:a17:906:3492:: with SMTP id g18mr23975909ejb.112.1588087758362; Tue, 28 Apr 2020 08:29:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588087758; cv=none; d=google.com; s=arc-20160816; b=zHTd8CcWwnFimUsWhWwuflRUKFAO9PXJRKVfepP/rbI1qceB5TDA+NVGT1q/xCr7oF +wDGwfHfkdhLVEk4Ya1sxtzOcWOJddGRcCuHW3F3fBk2hvWZ8HBYtvLPGeEye/d4NZ/D DgQYlGX6A7AqLeekPeH/e3uhLBeFWukIYOwylxH7ovcD65JkOVCC4aroKBS4bscdJNbO 5GzsI74scyMThND7BO1HmPw2D0mv4h4vPkStzQLkhpThs+LCadeYrVsiM5u3hsG+DgSx j/NCLU4p9t/uVVvlrHZg7+svry1XrMGuEDHW+yB9Ftsdn1kmHbSfkIt4WoK+LFaHZ6mP L3PA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=G3f4WUPTuAmumrHzM3xMkESLndRA0O4IscywR2BJvQ4=; b=LFvGzRVLQDJ9JD+EKvNIO0161bjCHLr5vTI9eimBS/d0I7AkBJ2wxAXENmhNZmhskJ +YJW+egQJndFTcRFWz/mNmJ2/DnMqD4iD6f02FhRcnmw4zMkzS6+rRGSchR23XTJdVxp cLk+DJXNjiT6C8N/wRJmn88E4o4KtFE1kWPCZFvGqZcctI/Ay4BMVsx269mvTTe2lday TvTNiKmys79KlJm7U4m/64XppdjyoUEWIsDmkAC0SPnpmOD6I4E+HzgqdlbJVb/tFnQI XS+E5laymV75+RkUHQrv+XnZ7iTzb/wUM/fbevwLvx23b/jE4meX28TFE3RyrzrYSWyR 0KCg== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=8bytes.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id k6si1674797edx.457.2020.04.28.08.28.44; Tue, 28 Apr 2020 08:29:18 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=8bytes.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728641AbgD1PY5 (ORCPT + 99 others); Tue, 28 Apr 2020 11:24:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41590 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1727875AbgD1PRq (ORCPT ); Tue, 28 Apr 2020 11:17:46 -0400 Received: from theia.8bytes.org (8bytes.org [IPv6:2a01:238:4383:600:38bc:a715:4b6d:a889]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A6EA1C03C1AB; Tue, 28 Apr 2020 08:17:46 -0700 (PDT) Received: by theia.8bytes.org (Postfix, from userid 1000) id 8AC1029C; Tue, 28 Apr 2020 17:17:42 +0200 (CEST) From: Joerg Roedel To: x86@kernel.org Cc: hpa@zytor.com, Andy Lutomirski , Dave Hansen , Peter Zijlstra , Thomas Hellstrom , Jiri Slaby , Dan Williams , Tom Lendacky , Juergen Gross , Kees Cook , David Rientjes , Cfir Cohen , Erdem Aktas , Masami Hiramatsu , Mike Stunes , Joerg Roedel , Joerg Roedel , linux-kernel@vger.kernel.org, kvm@vger.kernel.org, virtualization@lists.linux-foundation.org Subject: [PATCH v3 02/75] KVM: SVM: Add GHCB Accessor functions Date: Tue, 28 Apr 2020 17:16:12 +0200 Message-Id: <20200428151725.31091-3-joro@8bytes.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200428151725.31091-1-joro@8bytes.org> References: <20200428151725.31091-1-joro@8bytes.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Joerg Roedel Building a correct GHCB for the hypervisor requires setting valid bits in the GHCB. Simplify that process by providing accessor functions to set values and to update the valid bitmap. Signed-off-by: Joerg Roedel --- arch/x86/include/asm/svm.h | 61 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/arch/x86/include/asm/svm.h b/arch/x86/include/asm/svm.h index f36288c659b5..e4e9f6bacfaa 100644 --- a/arch/x86/include/asm/svm.h +++ b/arch/x86/include/asm/svm.h @@ -333,4 +333,65 @@ struct __attribute__ ((__packed__)) vmcb { #define SVM_CR0_SELECTIVE_MASK (X86_CR0_TS | X86_CR0_MP) +/* GHCB Accessor functions */ + +#define DEFINE_GHCB_INDICES(field) \ + u16 idx = offsetof(struct vmcb_save_area, field) / 8; \ + u16 byte_idx = idx / 8; \ + u16 bit_idx = idx % 8; \ + BUILD_BUG_ON(byte_idx > ARRAY_SIZE(ghcb->save.valid_bitmap)); + +#define GHCB_SET_VALID(ghcb, field) \ + { \ + DEFINE_GHCB_INDICES(field) \ + (ghcb)->save.valid_bitmap[byte_idx] |= BIT(bit_idx); \ + } + +#define DEFINE_GHCB_SETTER(field) \ + static inline void \ + ghcb_set_##field(struct ghcb *ghcb, u64 value) \ + { \ + GHCB_SET_VALID(ghcb, field) \ + (ghcb)->save.field = value; \ + } + +#define DEFINE_GHCB_ACCESSORS(field) \ + static inline bool ghcb_is_valid_##field(const struct ghcb *ghcb) \ + { \ + DEFINE_GHCB_INDICES(field) \ + return !!((ghcb)->save.valid_bitmap[byte_idx] \ + & BIT(bit_idx)); \ + } \ + \ + static inline void \ + ghcb_set_##field(struct ghcb *ghcb, u64 value) \ + { \ + GHCB_SET_VALID(ghcb, field) \ + (ghcb)->save.field = value; \ + } + +DEFINE_GHCB_ACCESSORS(cpl) +DEFINE_GHCB_ACCESSORS(rip) +DEFINE_GHCB_ACCESSORS(rsp) +DEFINE_GHCB_ACCESSORS(rax) +DEFINE_GHCB_ACCESSORS(rcx) +DEFINE_GHCB_ACCESSORS(rdx) +DEFINE_GHCB_ACCESSORS(rbx) +DEFINE_GHCB_ACCESSORS(rbp) +DEFINE_GHCB_ACCESSORS(rsi) +DEFINE_GHCB_ACCESSORS(rdi) +DEFINE_GHCB_ACCESSORS(r8) +DEFINE_GHCB_ACCESSORS(r9) +DEFINE_GHCB_ACCESSORS(r10) +DEFINE_GHCB_ACCESSORS(r11) +DEFINE_GHCB_ACCESSORS(r12) +DEFINE_GHCB_ACCESSORS(r13) +DEFINE_GHCB_ACCESSORS(r14) +DEFINE_GHCB_ACCESSORS(r15) +DEFINE_GHCB_ACCESSORS(sw_exit_code) +DEFINE_GHCB_ACCESSORS(sw_exit_info_1) +DEFINE_GHCB_ACCESSORS(sw_exit_info_2) +DEFINE_GHCB_ACCESSORS(sw_scratch) +DEFINE_GHCB_ACCESSORS(xcr0) + #endif -- 2.17.1