Received: by 2002:a05:6358:a55:b0:ec:fcf4:3ecf with SMTP id 21csp3447540rwb; Fri, 20 Jan 2023 16:39:32 -0800 (PST) X-Google-Smtp-Source: AMrXdXvKlTjkg3g+hdXRyU2wsaWTd77yX8UU1LWTSEPRKIWI49kY0/gVt2HoC2W2mmxCeCUgXilb X-Received: by 2002:a05:6a21:1646:b0:ac:29b4:11bc with SMTP id no6-20020a056a21164600b000ac29b411bcmr16316940pzb.21.1674261572066; Fri, 20 Jan 2023 16:39:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674261572; cv=none; d=google.com; s=arc-20160816; b=VcKc2OKXiJmx+OTRi7rNT1jcySvB0TOScaFi56XamVXKioVFeLCf4HvXjFO8k2esZ/ 9pWtur3S+QTRX2N2vRIuCV4tL6m56ebe7+0i72qSxmh/WXq/YWpNO4p/CmtY+JlCcPYz QFmEjh7EUQcNpzdFCHGA23BBXN0k1kCI2QfLKF8kmyCI+pO/zBxFByTFynxjIfUka5Pd bFYUt5G4/xZLZl22xZPQUyx4b3HQD3q5ZB0+Faf+eWV6F8nISyBNmVx4RC2j6wUqOrK8 5+g6mNtNifx7cqyaQCV+pvXerOQmb5uan1QDVHiLwVZw3yRvfWD9K/cy9l6pA5UdVsJN ZM2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:from:subject :message-id:mime-version:date:dkim-signature; bh=O13XsMhe3FapLxKaNj8MRbQZ1Bo+zuL+Id74AOAL1Xo=; b=uXMSD7xBDS38cufzJBK2vzBB3DJkG1vI+riOHkXDrs6nAn73YbFPeRruRpYZ5U7fEM nuPBOUpykUJhTLfmcciaPyQdv0N4BEPI5nCigxgxMJF3gn3kMxlzE4+38hxYAUs8qz7M 94+PLsRkJargJsQY2u8FC+wgcfLXE5/0nTIgH2haZZ2HFLKrxOjunr01VxHg0cTltaNq NS6uYkUfYBJtl9jCsmvUblsMTnwHAgDShbipar8iqF/SxkA0jzAmW2k+Rq9fN+ug7lvp W7yfBTtrz+jrZbkuVZmU5G1W1tXu8lMi1y2vgTkHBawcIMUH16xBHBCBamUiOxjfdhrn ZQaQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=SaD8EG+w; 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 Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 131-20020a630789000000b004cab626358csi22762401pgh.485.2023.01.20.16.39.25; Fri, 20 Jan 2023 16:39:32 -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=SaD8EG+w; 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 S229715AbjAUAQI (ORCPT + 50 others); Fri, 20 Jan 2023 19:16:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51390 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229609AbjAUAQG (ORCPT ); Fri, 20 Jan 2023 19:16:06 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 21C8E8B753 for ; Fri, 20 Jan 2023 16:16:05 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id a4-20020a5b0004000000b006fdc6aaec4fso7502373ybp.20 for ; Fri, 20 Jan 2023 16:16:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=content-transfer-encoding:cc:to:from:subject:message-id :mime-version:date:from:to:cc:subject:date:message-id:reply-to; bh=O13XsMhe3FapLxKaNj8MRbQZ1Bo+zuL+Id74AOAL1Xo=; b=SaD8EG+wEFG08JNVIdCa38YUS+n1ExpCtEFt1+gN0wwtDDRTyXRmnHNuANZfM6N3h6 4IBqtaEOfPwcxWrnKGiStt3TMn2aujOR3KxkOBg8jZaJhNfMBmiBIYCrgFNLQaqWwjJp M/GsqFEo8Dg61tRNkM13z0QFeGlQ9NDSsT5gqrArdWnABP9PxItopjLJk9otjMWepxIY rw9hv2fRwV9vPaLfEVQi9HdrILpDDU+R3WGikfHOjxkzMSxE2a4URQDw4My4PFe77Wuj N9/J+QdqUzn+aBKIXrisE+SWDBFNmxhVzfAw+z+wq9W1ITK+GtC3u+t4VJN+6DPYVtcF 4JEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:from:subject:message-id :mime-version:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=O13XsMhe3FapLxKaNj8MRbQZ1Bo+zuL+Id74AOAL1Xo=; b=0k+B9Thf77I0wXV5hNnIFlL0vUyY9urYwudl5VWRHcGIb1SOTIxtAj5HmzG/57Csh7 I4H9/Psklw/JADu3VrWWu3w66wp9KPqJ3C0KJ6PnanQXNKt4pndloV9EiJoeS+meC+3I Rekbz/5qqb2bY2vCRqJkns4kqKsYOBjL7NgJ5gpmFrZZaSwjS+WCDpE1MtcpehtvWf9N 8IhvTkTYGQSZnIOoWksdNOE7CgQ7IN3nL48Wpz7z0aJiHyJDlVcSei+oNkBpw5fXPrl5 0IYBobbgCDSvVZ/tUrPHe7yX5XEbDLF2K5l5iTkuDuNRjfBoie4vmGQUzxpZYeizmhed pfng== X-Gm-Message-State: AFqh2kphm9YMoRJY+z7g8r2X3jNueIXRO4qmwQPp7cEggm3KXT/gbYtZ ddc/be+vLbrLl3rJVHVbDr8OCs04HAY3uq80VA== X-Received: from ackerleytng-cloudtop-sg.c.googlers.com ([fda3:e722:ac3:cc00:4f:4b78:c0a8:b30]) (user=ackerleytng job=sendgmr) by 2002:a05:690c:31c:b0:4fa:7af6:5321 with SMTP id bg28-20020a05690c031c00b004fa7af65321mr1035841ywb.451.1674260164370; Fri, 20 Jan 2023 16:16:04 -0800 (PST) Date: Sat, 21 Jan 2023 00:15:11 +0000 Mime-Version: 1.0 X-Mailer: git-send-email 2.39.0.246.g2a6d74b583-goog Message-ID: <20230121001542.2472357-1-ackerleytng@google.com> Subject: [RFC PATCH v3 00/31] TDX KVM selftests From: Ackerley Tng To: linux-kselftest@vger.kernel.org Cc: pbonzini@redhat.com, seanjc@google.com, isaku.yamahata@intel.com, sagis@google.com, erdemaktas@google.com, afranji@google.com, runanwang@google.com, shuah@kernel.org, drjones@redhat.com, maz@kernel.org, bgardon@google.com, jmattson@google.com, dmatlack@google.com, peterx@redhat.com, oupton@google.com, ricarkol@google.com, yang.zhong@intel.com, wei.w.wang@intel.com, xiaoyao.li@intel.com, pgonda@google.com, marcorr@google.com, eesposit@redhat.com, borntraeger@de.ibm.com, eric.auger@redhat.com, wangyanan55@huawei.com, aaronlewis@google.com, vkuznets@redhat.com, pshier@google.com, axelrasmussen@google.com, zhenzhong.duan@intel.com, maciej.szmigiero@oracle.com, like.xu@linux.intel.com, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Ackerley Tng Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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,URIBL_BLOCKED,USER_IN_DEF_DKIM_WL autolearn=ham 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 Hello, This is v3 of the patch series for TDX selftests. It has been updated for Intel=E2=80=99s V10 of the TDX host patches which w= as proposed in https://lkml.org/lkml/2022/8/8/877 The tree can be found at https://github.com/googleprodkernel/linux-cc/tree/tdx-selftests-rfc-v3/ Changes from RFC v2: Selftest setup now builds upon the KVM selftest framework when setting up the guest for testing. We now use the KVM selftest framework to build the guest page tables and load the ELF binary into guest memory. Inlining of the entire guest image is no longer required and that allows us to cleanly separate code into different compilation units and be able to use proper assembly instead of inline assembly (addresses Sean=E2=80=99s comment). To achieve this, we take a dependency on the SEV VM tests: https://lore.kernel.org/lkml/20221018205845.770121-1-pgonda@google.com/T/. = Those patches provide functions for the host to allocate and track protected memory in the guest. In RFCv3, TDX selftest code is organized into: + headers in tools/testing/selftests/kvm/include/x86_64/tdx/ + common code in tools/testing/selftests/kvm/lib/x86_64/tdx/ + selftests in tools/testing/selftests/kvm/x86_64/tdx_* RFCv3 also adds additional selftests for UPM. Dependencies + Peter=E2=80=99s patches, which provide functions for the host to allocate and track protected memory in the guest. https://lore.kernel.org/lkml/20221018205845.770121-1-pgonda@google= .com/T/ + Peter=E2=80=99s patches depend on Sean=E2=80=99s patches: + https://lore.kernel.org/linux-arm-kernel/20220825232522.3997340-1-sea= njc@google.com/T/ + https://lore.kernel.org/lkml/20221006004512.666529-1-seanjc@google.co= m/T/ + Proposed fixes for these these issues mentioned on the mailing list + https://lore.kernel.org/lkml/36cde6d6-128d-884e-1447-09b08bb5de3d@int= el.com/ + https://lore.kernel.org/lkml/diqzedtubs0d.fsf@google.com/ + https://lore.kernel.org/lkml/67b782ee-c95c-d6bc-3cca-cdfe75f4bf6a@int= el.com/ + https://lore.kernel.org/lkml/diqzcz7cd983.fsf@ackerleytng-cloudtop-sg= .c.googlers.com/ + https://lore.kernel.org/linux-mm/20221116205025.1510291-1-ackerleytng= @google.com/ Further work for this patch series/TODOs + Sean=E2=80=99s comments for the non-confidential UPM selftests patch seri= es at https://lore.kernel.org/lkml/Y8dC8WDwEmYixJqt@google.com/T/#u apply here as well + Add ucall support for TDX selftests I would also like to acknowledge the following people, who helped review or test patches in RFCv1 and RFCv2: + Sean Christopherson + Zhenzhong Duan + Peter Gonda + Andrew Jones + Maxim Levitsky + Xiaoyao Li + David Matlack + Marc Orr + Isaku Yamahata Links to earlier patch series + RFC v1: https://lore.kernel.org/lkml/20210726183816.1343022-1-erdemaktas@= google.com/T/#u + RFC v2: https://lore.kernel.org/lkml/20220830222000.709028-1-sagis@google= .com/T/#u Ackerley Tng (14): KVM: selftests: Add function to allow one-to-one GVA to GPA mappings KVM: selftests: Expose function that sets up sregs based on VM's mode KVM: selftests: Store initial stack address in struct kvm_vcpu KVM: selftests: Refactor steps in vCPU descriptor table initialization KVM: selftests: TDX: Use KVM_TDX_CAPABILITIES to validate TDs' attribute configuration KVM: selftests: Require GCC to realign stacks on function entry KVM: selftests: Add functions to allow mapping as shared KVM: selftests: Add support for restricted memory KVM: selftests: TDX: Update load_td_memory_region for VM memory backed by restricted memfd KVM: selftests: Expose _vm_vaddr_alloc KVM: selftests: TDX: Add support for TDG.MEM.PAGE.ACCEPT KVM: selftests: TDX: Add support for TDG.VP.VEINFO.GET KVM: selftests: TDX: Add TDX UPM selftest KVM: selftests: TDX: Add TDX UPM selftests for implicit conversion Erdem Aktas (4): KVM: selftests: Add support for creating non-default type VMs KVM: selftests: Add helper functions to create TDX VMs KVM: selftests: TDX: Add TDX lifecycle test KVM: selftests: TDX: Adding test case for TDX port IO Roger Wang (1): KVM: selftests: TDX: Add TDG.VP.INFO test Ryan Afranji (2): KVM: selftests: TDX: Verify the behavior when host consumes a TD private memory KVM: selftests: TDX: Add shared memory test Sagi Shahar (10): KVM: selftests: TDX: Add report_fatal_error test KVM: selftests: TDX: Add basic TDX CPUID test KVM: selftests: TDX: Add basic get_td_vmcall_info test KVM: selftests: TDX: Add TDX IO writes test KVM: selftests: TDX: Add TDX IO reads test KVM: selftests: TDX: Add TDX MSR read/write tests KVM: selftests: TDX: Add TDX HLT exit test KVM: selftests: TDX: Add TDX MMIO reads test KVM: selftests: TDX: Add TDX MMIO writes test KVM: selftests: TDX: Add TDX CPUID TDVMCALL test tools/testing/selftests/kvm/.gitignore | 3 + tools/testing/selftests/kvm/Makefile | 10 +- .../selftests/kvm/include/kvm_util_base.h | 43 +- .../testing/selftests/kvm/include/test_util.h | 2 + .../selftests/kvm/include/x86_64/processor.h | 4 + .../kvm/include/x86_64/tdx/td_boot.h | 82 + .../kvm/include/x86_64/tdx/td_boot_asm.h | 16 + .../selftests/kvm/include/x86_64/tdx/tdcall.h | 59 + .../selftests/kvm/include/x86_64/tdx/tdx.h | 65 + .../kvm/include/x86_64/tdx/tdx_util.h | 19 + .../kvm/include/x86_64/tdx/test_util.h | 164 ++ tools/testing/selftests/kvm/lib/kvm_util.c | 123 +- tools/testing/selftests/kvm/lib/test_util.c | 7 + .../selftests/kvm/lib/x86_64/processor.c | 77 +- tools/testing/selftests/kvm/lib/x86_64/sev.c | 2 +- .../selftests/kvm/lib/x86_64/tdx/td_boot.S | 101 ++ .../selftests/kvm/lib/x86_64/tdx/tdcall.S | 158 ++ .../selftests/kvm/lib/x86_64/tdx/tdx.c | 231 +++ .../selftests/kvm/lib/x86_64/tdx/tdx_util.c | 562 +++++++ .../selftests/kvm/lib/x86_64/tdx/test_util.c | 101 ++ .../kvm/x86_64/tdx_shared_mem_test.c | 137 ++ .../selftests/kvm/x86_64/tdx_upm_test.c | 460 ++++++ .../selftests/kvm/x86_64/tdx_vm_tests.c | 1329 +++++++++++++++++ 23 files changed, 3709 insertions(+), 46 deletions(-) create mode 100644 tools/testing/selftests/kvm/include/x86_64/tdx/td_boot.= h create mode 100644 tools/testing/selftests/kvm/include/x86_64/tdx/td_boot_= asm.h create mode 100644 tools/testing/selftests/kvm/include/x86_64/tdx/tdcall.h create mode 100644 tools/testing/selftests/kvm/include/x86_64/tdx/tdx.h create mode 100644 tools/testing/selftests/kvm/include/x86_64/tdx/tdx_util= .h create mode 100644 tools/testing/selftests/kvm/include/x86_64/tdx/test_uti= l.h create mode 100644 tools/testing/selftests/kvm/lib/x86_64/tdx/td_boot.S create mode 100644 tools/testing/selftests/kvm/lib/x86_64/tdx/tdcall.S create mode 100644 tools/testing/selftests/kvm/lib/x86_64/tdx/tdx.c create mode 100644 tools/testing/selftests/kvm/lib/x86_64/tdx/tdx_util.c create mode 100644 tools/testing/selftests/kvm/lib/x86_64/tdx/test_util.c create mode 100644 tools/testing/selftests/kvm/x86_64/tdx_shared_mem_test.= c create mode 100644 tools/testing/selftests/kvm/x86_64/tdx_upm_test.c create mode 100644 tools/testing/selftests/kvm/x86_64/tdx_vm_tests.c -- 2.39.0.246.g2a6d74b583-goog