Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp2028279pxa; Mon, 3 Aug 2020 05:47:18 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz7TE1jZdlbRNIkQtziF0hUvU6FleI/0W4lwYGn2WP5S0cFFsDzKUXS/XX7KmOjPzIjq92w X-Received: by 2002:a17:907:2067:: with SMTP id qp7mr15311813ejb.378.1596458838130; Mon, 03 Aug 2020 05:47:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596458838; cv=none; d=google.com; s=arc-20160816; b=d1Ak/QHIxV0RGSLhJBEaPyPnyUsw6AgODG6Xcev+WPAezvmSsBv5LDO8W80NCYY6Ev zjb6kfLW/V5i+t13d3p8tjO0fUiIIYS1aLMBTnqVG28cwxzAbDhGjsUwGFBu7mrdiVra PNIvulopP5pq+pr6RmVzUPOGZ0qsO0dt0UdWWf3Z/BILs6Jo8HpuCzE/skiusrqIf243 RQZy3nwE2iLDQtBFi4FQr9yTgBCBE6maZnx1kuc+t1gkv+pSSMbJKzetQ8ZXOzCf0Hbm 6idlJzXj3H+BjMHoWtecPCczhQIDVoyB/giuqNOJsIdgZGOWV33DsT/wbgv2M4z0TilS Uyhw== 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=BQQsdR+L/Ezgnk17UcYj44btZx1TjLNqwq38KlVMyCI=; b=l9UgXz+qiclJLawoYVSF2QUpO1oCbXQnZnl1W7QlniT0CzVVu9474GZ1oMBMMQ2TLr Tk0spbTvQ3/KsyJrw12+ZoUXznfg1lDYg47L2795S6x1A8qkQ7HLJ0dLlJty8X5goIhl j8SVEF8RYM/jzv1Gio5FhsCXpcnHCHvuMp1PDtjXPv/VXMRQH0I9n1QYlGo85xr5cqa7 v6uOgn+DH8yUMcH0A21eT6yVhy2OXgaDMyo2jTEvFkyx5TLzR5QzZW37EfNd/6bQQmkm snOhzxaZcQlLtG0k/64VjHo7aSz4AWzN8tQXNA0R4uNxa1GJGP0o5BeuPW98HpC4nX2s r0og== 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 du22si3098727ejc.24.2020.08.03.05.46.55; Mon, 03 Aug 2020 05:47: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 S1726622AbgHCMpf (ORCPT + 99 others); Mon, 3 Aug 2020 08:45:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42464 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728545AbgHCM11 (ORCPT ); Mon, 3 Aug 2020 08:27:27 -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 4A74EC061757; Mon, 3 Aug 2020 05:27:27 -0700 (PDT) Received: by theia.8bytes.org (Postfix, from userid 1000) id 60C869A9; Mon, 3 Aug 2020 14:27:24 +0200 (CEST) From: Joerg Roedel To: Paolo Bonzini Cc: Sean Christopherson , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , Tom Lendacky , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Joerg Roedel Subject: [PATCH v3 3/4] KVM: SVM: Add GHCB Accessor functions Date: Mon, 3 Aug 2020 14:27:07 +0200 Message-Id: <20200803122708.5942-4-joro@8bytes.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200803122708.5942-1-joro@8bytes.org> References: <20200803122708.5942-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 and to check the valid bitmap in KVM. Signed-off-by: Joerg Roedel --- arch/x86/include/asm/svm.h | 43 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/arch/x86/include/asm/svm.h b/arch/x86/include/asm/svm.h index 9a3e0b802716..71a308f1fbc8 100644 --- a/arch/x86/include/asm/svm.h +++ b/arch/x86/include/asm/svm.h @@ -341,4 +341,47 @@ struct __attribute__ ((__packed__)) vmcb { #define SVM_CR0_SELECTIVE_MASK (X86_CR0_TS | X86_CR0_MP) +/* GHCB Accessor functions */ + +#define GHCB_BITMAP_IDX(field) \ + (offsetof(struct vmcb_save_area, field) / sizeof(u64)) + +#define DEFINE_GHCB_ACCESSORS(field) \ + static inline bool ghcb_##field##_is_valid(const struct ghcb *ghcb) \ + { \ + return test_bit(GHCB_BITMAP_IDX(field), \ + (unsigned long *)&(ghcb)->save.valid_bitmap); \ + } \ + \ + static inline void ghcb_set_##field(struct ghcb *ghcb, u64 value) \ + { \ + __set_bit(GHCB_BITMAP_IDX(field), \ + (unsigned long *)&(ghcb)->save.valid_bitmap); \ + 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