Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp1772980pxb; Mon, 11 Oct 2021 12:48:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxs10AArdq6jePTkXj9vtr4G3+OGTId7UTuSOdxMk8zyrdusxe3UcyVtXQF1/K1C63Is21d X-Received: by 2002:a05:6402:26d3:: with SMTP id x19mr14018554edd.291.1633981727665; Mon, 11 Oct 2021 12:48:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633981727; cv=none; d=google.com; s=arc-20160816; b=UBEPdtQx3khuwHBKDsembOT1Dv+wdw+JLg5n2q7SC5i6v/txg+rKrp+hJQDf5Dhe6V QM9iyCZzzKbEwNp8vuaTb2CgMcl815/U19kZFv1ynBpy4IAKfwv4APEOBAioldNrN147 Jm0CVBR7jBE+Y8PdI2yf23tdRPytp5DPjqeQEA5/lIkAjbDiu8sh+X7f2UbaPfD/4tJa rpaWDVLGy4jMbRc8pano5xi5Val9tgSGZPW/si/0svc7h7kkKTegyBYikkPu1pPWR+mL CNVpo+QgPr9RhHdPDVfrQlEeG4kRcIg0/BySxmJpsrj/QY6uE1+c/oXptCU2O0b0Ygd3 1TFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:mime-version:message-id:date :dkim-signature; bh=USWZuA42U/QdDhA/fHCg+4AfqImFzDShWDW5TcIgstE=; b=v95g+jqh0FTI1MMuACq8SJZ9b9lGVOvQ6CM9jT5bK/bAXBfBnefbzyzvIQUqzXYZYD kPtYhZfqTDEuZb7fxGQmLEj5Js2aNmUEfe+97q4aIdj1jqA3lW1E407FIwNNmRJXgQgt Oy+xrSpk24mQCYaANUzNxkkrOWsc7U86o4HWgXb1TIFBDiwpoK7okB31TvTz4xGdOTRw g5X1822GO1+C8H20yjn20BbkMY4eNsJqRR2fPh0kW5ayQubLzE1zaFnprhw2hQxECKQE IsESmaLjvI01ejeZcdXx+x2MnqJu1P15+8kHsWfGAJPQ84EWSyX2hPXpFYN9lOjzj/ui ih3w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=PCX8tqSJ; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 9si14135402ejo.527.2021.10.11.12.48.23; Mon, 11 Oct 2021 12:48:47 -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=@google.com header.s=20210112 header.b=PCX8tqSJ; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234632AbhJKTsj (ORCPT + 99 others); Mon, 11 Oct 2021 15:48:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33004 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232027AbhJKTsi (ORCPT ); Mon, 11 Oct 2021 15:48:38 -0400 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 81FAAC06161C for ; Mon, 11 Oct 2021 12:46:38 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id oo5-20020a17090b1c8500b0019e585e8f6fso145478pjb.9 for ; Mon, 11 Oct 2021 12:46:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:message-id:mime-version:subject:from:to:cc; bh=USWZuA42U/QdDhA/fHCg+4AfqImFzDShWDW5TcIgstE=; b=PCX8tqSJqlHZW7ppIUhhl82m02ww06ipMjlcSukzw60eV1DC1JFfZQov3EUVtrMhqv i1c2DYrjg47zjo5j+H9DiOJZODHnj8N7B/6Oo1xHWclDDN4kMbpFztxwjWnRkEbL8Ldz 8ipDeS/dl3mw/yMWqVn3IVuq3YfqqQTpBXUjXPub2KIOjKVm3FrzSalu+TttA8/eu+Xr su+lz03b1G9qad3VqcJkqmHI3ZGyFkMfHRWljnP+Xso5pY6b2JyDE9yKFH95HuRdf28L fi5ULDDclY4Y0z9slsgXJTUlBEi+mEHuopc78C9s4S1W/CC9EzdzTU/budtAiCcTmQbS ugvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=USWZuA42U/QdDhA/fHCg+4AfqImFzDShWDW5TcIgstE=; b=xKWtuavqlgXaEHQmitF9qi3fkP7oHUDaDFC89rXszMVWVB258CskXnN/KSJrs8IxwH 7GDp7bUeJB8Js1420uIb5FdFpaUSGNbgpmwYW8GqjNoSiWDZKOXczS+XF5HLNuvujAR6 ZCbx0XldNuZ+k25II69E28zIov9FSvoyq8F77O50w5MEhKo5tbgu351CIRsS1lh6VGS2 R3+TpDb+61u9A+A7VcJ6+oFrZ2ZEd0IW01wcCjeHkFPQwEZrU5S9gdxHBQVUFhyVW2NT lhuN/1InrbJajnDHfrhbg4mlsh6MLSTLh2K8CJYIGK5fqQNwerra/IKZavB4I9VcjX7W wZdA== X-Gm-Message-State: AOAM5303IXns1UEAxNBI/7StknDuBGBz01VN3YVnfGQxcUzNZjOVaPSa 9M/GkfbVIl6YdciVujiYGyYAbT5et7Xp X-Received: from vipinsh.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:36b0]) (user=vipinsh job=sendgmr) by 2002:a17:90a:8b89:: with SMTP id z9mr1042346pjn.89.1633981597843; Mon, 11 Oct 2021 12:46:37 -0700 (PDT) Date: Mon, 11 Oct 2021 19:46:15 +0000 Message-Id: <20211011194615.2955791-1-vipinsh@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.33.0.882.g93a45727a2-goog Subject: [PATCH] KVM: VMX: Add a wrapper for reading INVPCID/INVEPT/INVVPID type From: Vipin Sharma To: pbonzini@redhat.com, seanjc@google.com, dmatlack@google.com Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Vipin Sharma Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add a common helper function to read invalidation type specified by a trapped INVPCID/INVEPT/INVVPID instruction. Add a symbol constant for max INVPCID type. No functional change intended. Signed-off-by: Vipin Sharma --- arch/x86/include/asm/invpcid.h | 1 + arch/x86/kvm/vmx/nested.c | 4 ++-- arch/x86/kvm/vmx/vmx.c | 4 ++-- arch/x86/kvm/vmx/vmx.h | 12 ++++++++++++ 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/arch/x86/include/asm/invpcid.h b/arch/x86/include/asm/invpcid.h index 734482afbf81..b5ac26784c1b 100644 --- a/arch/x86/include/asm/invpcid.h +++ b/arch/x86/include/asm/invpcid.h @@ -21,6 +21,7 @@ static inline void __invpcid(unsigned long pcid, unsigned long addr, #define INVPCID_TYPE_SINGLE_CTXT 1 #define INVPCID_TYPE_ALL_INCL_GLOBAL 2 #define INVPCID_TYPE_ALL_NON_GLOBAL 3 +#define INVPCID_TYPE_MAX 3 /* Flush all mappings for a given pcid and addr, not including globals. */ static inline void invpcid_flush_one(unsigned long pcid, diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c index af1bbb73430a..f0605a99e0fc 100644 --- a/arch/x86/kvm/vmx/nested.c +++ b/arch/x86/kvm/vmx/nested.c @@ -5392,7 +5392,7 @@ static int handle_invept(struct kvm_vcpu *vcpu) return 1; vmx_instruction_info = vmcs_read32(VMX_INSTRUCTION_INFO); - type = kvm_register_read(vcpu, (vmx_instruction_info >> 28) & 0xf); + type = vmx_read_invalidation_type(vcpu, vmx_instruction_info); types = (vmx->nested.msrs.ept_caps >> VMX_EPT_EXTENT_SHIFT) & 6; @@ -5472,7 +5472,7 @@ static int handle_invvpid(struct kvm_vcpu *vcpu) return 1; vmx_instruction_info = vmcs_read32(VMX_INSTRUCTION_INFO); - type = kvm_register_read(vcpu, (vmx_instruction_info >> 28) & 0xf); + type = vmx_read_invalidation_type(vcpu, vmx_instruction_info); types = (vmx->nested.msrs.vpid_caps & VMX_VPID_EXTENT_SUPPORTED_MASK) >> 8; diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 1c8b2b6e7ed9..77f72a41dde3 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -5502,9 +5502,9 @@ static int handle_invpcid(struct kvm_vcpu *vcpu) } vmx_instruction_info = vmcs_read32(VMX_INSTRUCTION_INFO); - type = kvm_register_read(vcpu, (vmx_instruction_info >> 28) & 0xf); + type = vmx_read_invalidation_type(vcpu, vmx_instruction_info); - if (type > 3) { + if (type > INVPCID_TYPE_MAX) { kvm_inject_gp(vcpu, 0); return 1; } diff --git a/arch/x86/kvm/vmx/vmx.h b/arch/x86/kvm/vmx/vmx.h index 592217fd7d92..eeafcce57df7 100644 --- a/arch/x86/kvm/vmx/vmx.h +++ b/arch/x86/kvm/vmx/vmx.h @@ -522,4 +522,16 @@ static inline bool vmx_guest_state_valid(struct kvm_vcpu *vcpu) void dump_vmcs(struct kvm_vcpu *vcpu); +/* + * When handling a VM-exit for one of INVPCID, INVEPT or INVVPID, read the type + * of invalidation specified by the instruction. + */ +static inline unsigned long vmx_read_invalidation_type(struct kvm_vcpu *vcpu, + u32 vmx_instr_info) +{ + u32 vmx_instr_reg2 = (vmx_instr_info >> 28) & 0xf; + + return kvm_register_read(vcpu, vmx_instr_reg2); +} + #endif /* __KVM_X86_VMX_H */ -- 2.33.0.882.g93a45727a2-goog