From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7B859C4332F for ; Tue, 12 Dec 2023 20:47:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A523D6B0386; Tue, 12 Dec 2023 15:47:34 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id A03B76B0388; Tue, 12 Dec 2023 15:47:34 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 87ACC6B0389; Tue, 12 Dec 2023 15:47:34 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 72F756B0386 for ; Tue, 12 Dec 2023 15:47:34 -0500 (EST) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 425A81209F7 for ; Tue, 12 Dec 2023 20:47:34 +0000 (UTC) X-FDA: 81559352028.25.4930E91 Received: from mail-yw1-f202.google.com (mail-yw1-f202.google.com [209.85.128.202]) by imf14.hostedemail.com (Postfix) with ESMTP id 74949100007 for ; Tue, 12 Dec 2023 20:47:32 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=XrZTHOY9; spf=pass (imf14.hostedemail.com: domain of 348Z4ZQUKCIY2kqs2qyyqvo.mywvsx47-wwu5kmu.y1q@flex--sagis.bounces.google.com designates 209.85.128.202 as permitted sender) smtp.mailfrom=348Z4ZQUKCIY2kqs2qyyqvo.mywvsx47-wwu5kmu.y1q@flex--sagis.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1702414052; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=mgr9hweDYRXBGfxKvpySsIK8PkryOfdG9AXrBZT3Fps=; b=humoCUTLOpsFibSYyOdyngYuQooKv3uWpeCCRfTgvaGMJJqha8V3p0vdIpHiPF47PE9P0H yPDOnM1xHrTxqCrgBsL7fFfMV2T8VVlXElQ2xUIv4Xl07xlmhXX0KWMXNZ2o8E3izzpcg7 zBrd4NiMRaMb5n0exqiHhWzxLAuuFQ4= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=XrZTHOY9; spf=pass (imf14.hostedemail.com: domain of 348Z4ZQUKCIY2kqs2qyyqvo.mywvsx47-wwu5kmu.y1q@flex--sagis.bounces.google.com designates 209.85.128.202 as permitted sender) smtp.mailfrom=348Z4ZQUKCIY2kqs2qyyqvo.mywvsx47-wwu5kmu.y1q@flex--sagis.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1702414052; a=rsa-sha256; cv=none; b=grEGGHwgg4hDEjvrDfn0M7S+93UbypaG3UBUYwvcUiQ/ZOKYeuxppEY/6WoviTcVPDnS22 x7YPVoXuaTupv9v37Ry6X6iH2gSh5kgXGZD+lVMI2cmGXCDUoAE4MDyeWU4yi0/u6W2SBf 9h5j4qO/UY+SO9Da0uLsde9ukRy1ZhQ= Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-5caf61210e3so69329327b3.0 for ; Tue, 12 Dec 2023 12:47:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1702414051; x=1703018851; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=mgr9hweDYRXBGfxKvpySsIK8PkryOfdG9AXrBZT3Fps=; b=XrZTHOY9rn3koOp4XdnofH7MMZtkOYgNGiFQSzD9ifcB+Nv85q6/Ym8DRnt/QKFZLT W00ckw9NPopOO1SZ2drgLZ4aOBVtt3JN3TJKd1n1HlZ8fYZAUIGOmyHr+LNIRz6Qc1wI +BwsWrmC3FWFN1+v5kYEL4qv7k7WHwBRm/Kxnv57qNOVUknUkTwTR0WhdfjpmehSlm+N wLvIIQBB9CWl3v/hyMVqMlv0lvNHjunS5TjkNrWE4aGXjPNQRKgrL6ZxGxAGgzYteVEP ABiw7OueobcAzGGymL555UHeaokedqEWxW4AornrTXKrfYjdDU46OWm864p2kL4yu2VF 7ysw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702414051; x=1703018851; 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=mgr9hweDYRXBGfxKvpySsIK8PkryOfdG9AXrBZT3Fps=; b=iLLXPSytpFeroNmkzFLUKlaTyYjK6geB3LBoYtNr9fpCyX6DQjvBlJPbG0iI6jr5i/ uF7GYxPV3ufQkPf3VbKiH9lW3YIgtfWbu6cVteYkr7d5Ovnue/drSzeOk2N1ZOPsBSlH cS/2BXaTthUQjJMnAsTWJv4/ZHHTWYJQlM7iVb+P7kaPpPo98U3RDlmrdrEHxS7fsPT/ 4Zrh/0lUcgeVQRb5neNlBLA9tjdSp4FCR8ZCJdC9TOv42EbEQ3Y8DwJ7QGGQCssFTGQw G+dZYW6L1CQ8pDKEPjh/OVjEh5Q3xVQXRUId5FWHxhw4W63ZHzMbXIDlNhmldxQbOcco HDLg== X-Gm-Message-State: AOJu0YxeRahwl+5BCIo0xgHnQ3PkqnDakjKEEiGGSAoUugzXQaNGIvhz hg2XIfQJgjqvD7QNhiX/r9SVwa2jhw== X-Google-Smtp-Source: AGHT+IFa6/BElmwp62s37oh5bb6TTi74TXb4OER5yGDKiFW8lPfpShKreGwImjiGSMuYBWqXsZdh2473vw== X-Received: from sagi.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:241b]) (user=sagis job=sendgmr) by 2002:a05:690c:3506:b0:5d9:447a:43e8 with SMTP id fq6-20020a05690c350600b005d9447a43e8mr67267ywb.5.1702414051607; Tue, 12 Dec 2023 12:47:31 -0800 (PST) Date: Tue, 12 Dec 2023 12:46:33 -0800 In-Reply-To: <20231212204647.2170650-1-sagis@google.com> Mime-Version: 1.0 References: <20231212204647.2170650-1-sagis@google.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog Message-ID: <20231212204647.2170650-19-sagis@google.com> Subject: [RFC PATCH v5 18/29] KVM: selftests: TDX: Add TDX MMIO writes test From: Sagi Shahar To: linux-kselftest@vger.kernel.org, Ackerley Tng , Ryan Afranji , Erdem Aktas , Sagi Shahar , Isaku Yamahata Cc: Sean Christopherson , Paolo Bonzini , Shuah Khan , Peter Gonda , Haibo Xu , Chao Peng , Vishal Annapurve , Roger Wang , Vipin Sharma , jmattson@google.com, dmatlack@google.com, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-mm@kvack.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 74949100007 X-Rspam-User: X-Stat-Signature: tmhdjkfruttiezd51nzz45zpam6rpz8p X-Rspamd-Server: rspam01 X-HE-Tag: 1702414052-944882 X-HE-Meta: U2FsdGVkX18h6z7ANSuKthMynWdtd2i9Ljj6fF9+uexV/Xxp3BL0AMg2g6cfC5/WnpDoXu1OFcpKgiePDvG7MIL3XMPQz78Fg64HsfJo38OrWCBovUQZIupsBbwU7cnN4jModByAc4tUXX2SlRMb7jaXS4RZgCbnMQNXGPjTDlZoqk6cCWLFnDLOiIUBhlv7hdUCFILl4QxsY5sBy3oc6XszbdrbxhAJfqT7Jvz/zEXAGKCzvVEnSliD44Y5DsDgB2RTaRH5P6IwSFQoAULLabpJHuOcPzP1ZaQGLnfdL8/810SwUJ2t/TIJc7Xc8Q9pu+3UsSGqV+3RgWgawVndhTiB8mlJpYTny6ZvI/pnsZyNRhNsG6FO2ngR2r2jLygNGeo/p5coNMG7NlP1r4mIqd/6r3Ctilbahph2/CNQ9oie1rFX4UNzjpnKqxVpTGWtZw30Wv3J9jvv2Cp8qOaAF+bIFRpTOvSpsEQugErqMohbBxPmi03ceJiiDiq/XfkD6RwtmZNqaO3U+ygwCEqs0QhN6PiDNEkO6d/apvp2286Pd0baMynKS31ngKapfYwWG0E1PWOPgRbZSvsEwTx7WNa26HyPNVWmj+AVWVsy8D1LAvaR73FXWwdz3GORI7KgRhe4qEgX7HdEcf0Q3INUriHgvVHB30TivAKjZs8N1F6Qc/6qRxZSPk8ZezuEr+Zn6mW8PmSniXSOraj2nvjHot9nnQqS7qmO9A693sH5Xi1sDMVil2kMDf+SLE9rYFEApx9dAA4QKWFz6U2E2QqOXuOF+vmJqaI5PPh7DHuMUytuWqCocjBcx6FQ1CFg1fRQskw3hsEEnu72P1ei8wMGnGHdOlDE97u4ULtOl4MmLY5CQpEDNTTHxXfBNkl67F1Y1rpfvAKonO4eBlOpxYxbvWzegRPU9t+ii1ds5VgArI4VEJT7xFwTiqYizTQ1bEeR/pCERLdAmQYGXCer1yb dSAVzCT0 wHx9LTSuhDI0/ltbm1YK+qicDYJpLuoSTx9cnWzwAy7GIYp55BTBbIpOLkTGfQ6BK2DB0+BFT3ba/dkMFoJIjMsIrdz+HRLIuFXZpQqepoIqXsQQPpJoD8qaFwhCp9PkeFBx52rB2ba517bFxLlU03OTYZ2XznMQHp2cluVZ26ZEoc68sAtF/qOU+7S76CIzG1PGfXCPG7XIPVR/tfh20vPosolDidYVhVZrpc1+ER8OwetlIUaOmWQakAawPU10h0p9ZUPiDGHxQCcGPOfbG/mp9WVVh3rgSPG+yLfbogcAyeraFwZTj9NqWVLDzvp1IEe2MrSmrGlhQYCXo5jsIU+yS5Awrke2LvAMdr6VF0g8W9Gx9IaPSucpPwcRhTbAl1ItFlHTDLxBfMXSeqbiotmRg5IGdJqe14iPQ2XLdpaJZi+rI+JITGi5FeH/MhxwENo7nTg8oSkiCOIQtP9gU+emH5hB4tDUqBRX9qMBItSPFuDFeeQzNvZblrfdJ5dUQOvXqfWOMWY5XJVRELt2eyV3B5+nN6DYV3x74+95zYU2qjX5pVNv8sqzzkPxelfdy7M880lKn22dNioHw0a3HiRRKupMlZWF3Rj23 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: The test verifies MMIO writes of various sizes from the guest to the host. Signed-off-by: Sagi Shahar Signed-off-by: Ackerley Tng Signed-off-by: Ryan Afranji --- .../selftests/kvm/include/x86_64/tdx/tdx.h | 2 + .../selftests/kvm/lib/x86_64/tdx/tdx.c | 14 +++ .../selftests/kvm/x86_64/tdx_vm_tests.c | 85 +++++++++++++++++++ 3 files changed, 101 insertions(+) diff --git a/tools/testing/selftests/kvm/include/x86_64/tdx/tdx.h b/tools/testing/selftests/kvm/include/x86_64/tdx/tdx.h index 13ce60df5684..502b670ea699 100644 --- a/tools/testing/selftests/kvm/include/x86_64/tdx/tdx.h +++ b/tools/testing/selftests/kvm/include/x86_64/tdx/tdx.h @@ -25,5 +25,7 @@ uint64_t tdg_vp_vmcall_instruction_wrmsr(uint64_t index, uint64_t value); uint64_t tdg_vp_vmcall_instruction_hlt(uint64_t interrupt_blocked_flag); uint64_t tdg_vp_vmcall_ve_request_mmio_read(uint64_t address, uint64_t size, uint64_t *data_out); +uint64_t tdg_vp_vmcall_ve_request_mmio_write(uint64_t address, uint64_t size, + uint64_t data_in); #endif // SELFTEST_TDX_TDX_H diff --git a/tools/testing/selftests/kvm/lib/x86_64/tdx/tdx.c b/tools/testing/selftests/kvm/lib/x86_64/tdx/tdx.c index b19f07ebc0e7..f4afa09f7e3d 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/tdx/tdx.c +++ b/tools/testing/selftests/kvm/lib/x86_64/tdx/tdx.c @@ -143,3 +143,17 @@ uint64_t tdg_vp_vmcall_ve_request_mmio_read(uint64_t address, uint64_t size, return ret; } + +uint64_t tdg_vp_vmcall_ve_request_mmio_write(uint64_t address, uint64_t size, + uint64_t data_in) +{ + struct tdx_hypercall_args args = { + .r11 = TDG_VP_VMCALL_VE_REQUEST_MMIO, + .r12 = size, + .r13 = TDG_VP_VMCALL_VE_REQUEST_MMIO_WRITE, + .r14 = address, + .r15 = data_in, + }; + + return __tdx_hypercall(&args, 0); +} diff --git a/tools/testing/selftests/kvm/x86_64/tdx_vm_tests.c b/tools/testing/selftests/kvm/x86_64/tdx_vm_tests.c index 48902b69d13e..5e28ba828a92 100644 --- a/tools/testing/selftests/kvm/x86_64/tdx_vm_tests.c +++ b/tools/testing/selftests/kvm/x86_64/tdx_vm_tests.c @@ -885,6 +885,90 @@ void verify_mmio_reads(void) printf("\t ... PASSED\n"); } +void guest_mmio_writes(void) +{ + uint64_t ret; + + ret = tdg_vp_vmcall_ve_request_mmio_write(TDX_MMIO_TEST_ADDR, 1, 0x12); + if (ret) + tdx_test_fatal(ret); + + ret = tdg_vp_vmcall_ve_request_mmio_write(TDX_MMIO_TEST_ADDR, 2, 0x1234); + if (ret) + tdx_test_fatal(ret); + + ret = tdg_vp_vmcall_ve_request_mmio_write(TDX_MMIO_TEST_ADDR, 4, 0x12345678); + if (ret) + tdx_test_fatal(ret); + + ret = tdg_vp_vmcall_ve_request_mmio_write(TDX_MMIO_TEST_ADDR, 8, 0x1234567890ABCDEF); + if (ret) + tdx_test_fatal(ret); + + // Write across page boundary. + ret = tdg_vp_vmcall_ve_request_mmio_write(PAGE_SIZE - 1, 8, 0); + if (ret) + tdx_test_fatal(ret); + + tdx_test_success(); +} + +/* + * Varifies guest MMIO writes. + */ +void verify_mmio_writes(void) +{ + struct kvm_vm *vm; + struct kvm_vcpu *vcpu; + + uint8_t byte_1; + uint16_t byte_2; + uint32_t byte_4; + uint64_t byte_8; + + vm = td_create(); + td_initialize(vm, VM_MEM_SRC_ANONYMOUS, 0); + vcpu = td_vcpu_add(vm, 0, guest_mmio_writes); + td_finalize(vm); + + printf("Verifying TD MMIO writes:\n"); + + td_vcpu_run(vcpu); + TDX_TEST_CHECK_GUEST_FAILURE(vcpu); + TDX_TEST_ASSERT_MMIO(vcpu, TDX_MMIO_TEST_ADDR, 1, TDG_VP_VMCALL_VE_REQUEST_MMIO_WRITE); + byte_1 = *(uint8_t *)(vcpu->run->mmio.data); + + td_vcpu_run(vcpu); + TDX_TEST_CHECK_GUEST_FAILURE(vcpu); + TDX_TEST_ASSERT_MMIO(vcpu, TDX_MMIO_TEST_ADDR, 2, TDG_VP_VMCALL_VE_REQUEST_MMIO_WRITE); + byte_2 = *(uint16_t *)(vcpu->run->mmio.data); + + td_vcpu_run(vcpu); + TDX_TEST_CHECK_GUEST_FAILURE(vcpu); + TDX_TEST_ASSERT_MMIO(vcpu, TDX_MMIO_TEST_ADDR, 4, TDG_VP_VMCALL_VE_REQUEST_MMIO_WRITE); + byte_4 = *(uint32_t *)(vcpu->run->mmio.data); + + td_vcpu_run(vcpu); + TDX_TEST_CHECK_GUEST_FAILURE(vcpu); + TDX_TEST_ASSERT_MMIO(vcpu, TDX_MMIO_TEST_ADDR, 8, TDG_VP_VMCALL_VE_REQUEST_MMIO_WRITE); + byte_8 = *(uint64_t *)(vcpu->run->mmio.data); + + TEST_ASSERT_EQ(byte_1, 0x12); + TEST_ASSERT_EQ(byte_2, 0x1234); + TEST_ASSERT_EQ(byte_4, 0x12345678); + TEST_ASSERT_EQ(byte_8, 0x1234567890ABCDEF); + + td_vcpu_run(vcpu); + TEST_ASSERT_EQ(vcpu->run->exit_reason, KVM_EXIT_SYSTEM_EVENT); + TEST_ASSERT_EQ(vcpu->run->system_event.data[1], TDG_VP_VMCALL_INVALID_OPERAND); + + td_vcpu_run(vcpu); + TDX_TEST_ASSERT_SUCCESS(vcpu); + + kvm_vm_free(vm); + printf("\t ... PASSED\n"); +} + int main(int argc, char **argv) { setbuf(stdout, NULL); @@ -905,6 +989,7 @@ int main(int argc, char **argv) run_in_new_process(&verify_guest_msr_reads); run_in_new_process(&verify_guest_hlt); run_in_new_process(&verify_mmio_reads); + run_in_new_process(&verify_mmio_writes); return 0; } -- 2.43.0.472.g3155946c3a-goog