From patchwork Thu Dec 22 23:04:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vishal Annapurve X-Patchwork-Id: 35989 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:e747:0:0:0:0:0 with SMTP id c7csp33382wrn; Thu, 22 Dec 2022 15:08:15 -0800 (PST) X-Google-Smtp-Source: AMrXdXuRClhAVMEVo3nXpl461KzhofNi47qKHVdbT4gshYnwYR4G3VumDM9uICMf9EAJx3rkVJ4D X-Received: by 2002:a17:907:8c81:b0:7c1:962e:cf28 with SMTP id td1-20020a1709078c8100b007c1962ecf28mr6177910ejc.23.1671750495249; Thu, 22 Dec 2022 15:08:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671750495; cv=none; d=google.com; s=arc-20160816; b=IAZcCBI+3T2aMKvrerKnth6i4Ach/MFB1QhFFsqZoNwAk+uHUjHUDPSZHbd4jAJbTZ jvd0G94tp/4jgv9xA4MHG+J4H8IC17dHWhaVfNcxtd18lww7WNJaeB9bh5vhH+lf3xhP R54DR8+UHrUZg4lQWTXBb9ArrgMI336cccgRIk/BFEH43Nuqr5gPmIivFhQEL+qi9J93 sfN8vEt8QaDpBfeNAe5Z1R5V5zOsgmIl47UW/3BVJcNpkpc/5MMr6885BAHyExd+fVxL hGRC4QSWKOhdTGBkKKtB6dYfZFDIJ9uRhwSOOYzCOgBFss+ILIojOr8foQB83qHsWGWc H3jw== 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:message-id:references :mime-version:in-reply-to:date:dkim-signature; bh=4AO35zZT0Yff42sOPrRxNuOogU4VodqUrhlKgNxVvKA=; b=wnOHPLNFrKGl0Vc0RlreABXfzICMEpysnOlpFNal7gL8wAcbqzOqjOjjjz1XxbUlQv qDyW+nEjb62kwRwquNEp93+oZC+IC8HuOWT3O3PqJ+ik/mL3O/seMoupUJL5iMnqxlN4 MahRq3o7MtIhaMR4/puOxzpdL61NxUEJmXT3r1WjdV31DQz3SlqjdFUFoplBdhrYoj9k c7Y+IYTI18zTReo5ilV7EnAH27uCvyFMOdnPGskj4NCaUqakvYZD6kX8+qXuCNx4wrDi 5sen6QQXnVn/cauFicvS5GQZnKje/za52Vm3OCXEftMHNbVSEX8hlvkMjx8JQQVo1wOy mF/w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=aJF1ndtc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id be5-20020a1709070a4500b007c1479b6a89si1125517ejc.823.2022.12.22.15.07.51; Thu, 22 Dec 2022 15:08:15 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=aJF1ndtc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S235474AbiLVXFY (ORCPT + 99 others); Thu, 22 Dec 2022 18:05:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49946 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230362AbiLVXFN (ORCPT ); Thu, 22 Dec 2022 18:05:13 -0500 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 7C19527176 for ; Thu, 22 Dec 2022 15:05:12 -0800 (PST) Received: by mail-pj1-x104a.google.com with SMTP id o18-20020a17090aac1200b00219ca917708so3852310pjq.8 for ; Thu, 22 Dec 2022 15:05:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=4AO35zZT0Yff42sOPrRxNuOogU4VodqUrhlKgNxVvKA=; b=aJF1ndtciA5/VQ0vui9aGcpiql44z/hN7BE9pna2NVdLJ7XJ8NjpnYM+v/LXYEGHyi AQU/QBurR8cFL3MlJ3lSM48jPc3XlMEdi4UTE8QuhkGu5Utmj7mfO/KD7rxo6BgRR9lz UY96xna912+UOVd1cuJOerNskvzrOBbgLedCEsZwAg3a0gRczRiKvlSHOH7D5nQpbab6 GG6i3hvw5rgYd923nxkvPybjrUk8BTiKEv9FlmamZ0eP9Rnyb3hLDWyo74/bq4f7DfrY Nj1Hf7fEmRVBqskTAoqlh65Xc0rcYJ2hAXQndD3GdLe61gRga/BUv4Gcgqv0B2lpIa89 TztQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=4AO35zZT0Yff42sOPrRxNuOogU4VodqUrhlKgNxVvKA=; b=SoipdIOiKygg/1D5ZJeWXr0dZHQvWEGtCKHfhP0fThii31FV/cCI1UCTyOI43Cfyi9 NbPPY6MVHouQF2Gd1SXso547/iESf8WzxcHHn6b/nWKxOahxfPqcHFKKSJRrAx1WD+71 FIPcYM+hwUcvRxlQVfZkoJsrsSasTirKcWFtNcWk8HGoHkRim/44cla9UnHFZZVW+s08 nxVXemzTP/kB4crzH5RKXzJpnc5Q2fLNCkezVBYvUzc7JzNjtJ4dI3o9PR5jFN1HWu3G ckkC8wymxns2pruu/TFuZ3REI3X3L/U9LJ3faw5kyNBEqyNjQcKOP/t4BGfzT1kgyeQk Gn3A== X-Gm-Message-State: AFqh2kqbAjtU34KIhgYYQ3/stmAyfng93Y0DHuLJLjsdPGRGPrQNzzca +0XR5+0XaHQZzY0obV2JfdkH/o43Pj23z/sL X-Received: from vannapurve2.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:41f8]) (user=vannapurve job=sendgmr) by 2002:aa7:81d4:0:b0:577:5678:bc80 with SMTP id c20-20020aa781d4000000b005775678bc80mr535664pfn.62.1671750311936; Thu, 22 Dec 2022 15:05:11 -0800 (PST) Date: Thu, 22 Dec 2022 23:04:58 +0000 In-Reply-To: <20221222230458.3828342-1-vannapurve@google.com> Mime-Version: 1.0 References: <20221222230458.3828342-1-vannapurve@google.com> X-Mailer: git-send-email 2.39.0.314.g84b9a713c41-goog Message-ID: <20221222230458.3828342-3-vannapurve@google.com> Subject: [V3 PATCH 2/2] KVM: selftests: x86: Add native hypercall support From: Vishal Annapurve To: x86@kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: pbonzini@redhat.com, shuah@kernel.org, bgardon@google.com, seanjc@google.com, oupton@google.com, peterx@redhat.com, vkuznets@redhat.com, dmatlack@google.com, pgonda@google.com, andrew.jones@linux.dev, Vishal Annapurve X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1752957447048136031?= X-GMAIL-MSGID: =?utf-8?q?1752957447048136031?= Add an API to execute hypercall as per the cpu type by checking the underlying CPU. KVM emulates vmcall/vmmcall instruction by modifying guest memory contents with hypercall instruction as per the cpu type. Confidential VMs need to execute hypercall instruction without it being emulated by KVM as KVM can not modify guest memory contents. Signed-off-by: Vishal Annapurve --- .../selftests/kvm/include/x86_64/processor.h | 3 +++ .../selftests/kvm/lib/x86_64/processor.c | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/tools/testing/selftests/kvm/include/x86_64/processor.h b/tools/testing/selftests/kvm/include/x86_64/processor.h index 4d5dd9a467e1..3617f83bb2e5 100644 --- a/tools/testing/selftests/kvm/include/x86_64/processor.h +++ b/tools/testing/selftests/kvm/include/x86_64/processor.h @@ -1039,6 +1039,9 @@ uint64_t *vm_get_page_table_entry(struct kvm_vm *vm, uint64_t vaddr); uint64_t kvm_hypercall(uint64_t nr, uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3); +uint64_t kvm_native_hypercall(uint64_t nr, uint64_t a0, uint64_t a1, uint64_t a2, + uint64_t a3); + void __vm_xsave_require_permission(int bit, const char *name); #define vm_xsave_require_permission(perm) \ diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/testing/selftests/kvm/lib/x86_64/processor.c index 1e93bb3cb058..429e55f2609f 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -1202,6 +1202,24 @@ uint64_t kvm_hypercall(uint64_t nr, uint64_t a0, uint64_t a1, uint64_t a2, return r; } +uint64_t kvm_native_hypercall(uint64_t nr, uint64_t a0, uint64_t a1, uint64_t a2, + uint64_t a3) +{ + uint64_t r; + + if (is_amd_cpu()) { + asm volatile("vmmcall" + : "=a"(r) + : "a"(nr), "b"(a0), "c"(a1), "d"(a2), "S"(a3)); + } else { + asm volatile("vmcall" + : "=a"(r) + : "a"(nr), "b"(a0), "c"(a1), "d"(a2), "S"(a3)); + } + + return r; +} + const struct kvm_cpuid2 *kvm_get_supported_hv_cpuid(void) { static struct kvm_cpuid2 *cpuid;