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 D32AEC54E58 for ; Thu, 21 Mar 2024 23:46:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4E4CB6B0087; Thu, 21 Mar 2024 19:46:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 494E06B008C; Thu, 21 Mar 2024 19:46:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 384A66B0093; Thu, 21 Mar 2024 19:46:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 29C2D6B0087 for ; Thu, 21 Mar 2024 19:46:45 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id B5D4F120ABE for ; Thu, 21 Mar 2024 23:46:44 +0000 (UTC) X-FDA: 81922683528.06.4B68022 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13]) by imf23.hostedemail.com (Postfix) with ESMTP id 26279140010 for ; Thu, 21 Mar 2024 23:46:41 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=mTRD+iss; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf23.hostedemail.com: domain of dongsheng.x.zhang@intel.com designates 198.175.65.13 as permitted sender) smtp.mailfrom=dongsheng.x.zhang@intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1711064802; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=o9CDs0+XU5NBJnsDab+KExvsCqoFznORXsnamb+lR7k=; b=lV/TCgdBR+2n+4ZlbE4tasbE8nJ+8hy0tceUhK9kq64hzQwkqEe4kWC/aGX5Go5wFyK1C9 JyRmDaB0x0bepsy9q3rzm05ok6fbKBEEex/SF0mzGh/3PE/EseTZyVg/st3PIzzeK80NaP 6I9oPng2oxeB11rdPcnX/jCKYBSbCs4= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=mTRD+iss; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf23.hostedemail.com: domain of dongsheng.x.zhang@intel.com designates 198.175.65.13 as permitted sender) smtp.mailfrom=dongsheng.x.zhang@intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1711064802; a=rsa-sha256; cv=none; b=qApG9i5JxxqdPkMTVtCjqxg5qM+tLISLjs8fU+D2+E6lpwyV2kXLNLfJEATZrN6EQ2i3Gc CENf7WCWrxlMLiX5vcuZcz1zGcLUhfBzBpVRwOMy+JPIdo5ODr3UTtFM+OXeOudR1fmH2C 2VapRoj6W5XHPQyr+xPD4dFH403bOs4= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1711064802; x=1742600802; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=Rf0D+K+jXTiwLuIvY9ASPK++sStp3YNUIenDwHbEEGc=; b=mTRD+issoPwPt62huIs+jmt09WPGAJ1SqJZyQ9mJfH57D1df0ps4LzaM iouJRINmqh/TsLWtvmcUYifID4AfsOWwcsTy4uVE7is0uZ9sEv8m4zSYb uCm3va9/fbutRq1zQ8v856Vh5eSTkRwUZWiPiVgEpSC07JLq0FJV2BfwJ wqG7U3LemYbCPrNthnMVtk0JotoaAKjBT+gZ5O6oNABTQpC60TOBVWie9 TEjM9U4sHmYl1fXuklGMpsk4hbaeeMeja0xEwbfE7NpoNovahC2v87ve4 muD2o2PX1GFSm+U8GrayiFyhVeW6G8iHTkts7uAn1cLJVzBbzAtoQY6jf g==; X-IronPort-AV: E=McAfee;i="6600,9927,11020"; a="17246136" X-IronPort-AV: E=Sophos;i="6.07,144,1708416000"; d="scan'208";a="17246136" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Mar 2024 16:46:41 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,144,1708416000"; d="scan'208";a="15107183" Received: from dongshen-mobl1.amr.corp.intel.com (HELO [10.212.116.150]) ([10.212.116.150]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Mar 2024 16:46:40 -0700 Message-ID: <4e93f167-8a90-4046-9f43-2366556b1e89@intel.com> Date: Thu, 21 Mar 2024 16:46:39 -0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC PATCH v5 18/29] KVM: selftests: TDX: Add TDX MMIO writes test To: Sagi Shahar , linux-kselftest@vger.kernel.org, Ackerley Tng , Ryan Afranji , Erdem Aktas , 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 References: <20231212204647.2170650-1-sagis@google.com> <20231212204647.2170650-19-sagis@google.com> Content-Language: en-US From: "Zhang, Dongsheng X" In-Reply-To: <20231212204647.2170650-19-sagis@google.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspam-User: X-Stat-Signature: xcahzxrhjgqh1x4fkdaexudik7tcnq5e X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 26279140010 X-HE-Tag: 1711064801-947318 X-HE-Meta: U2FsdGVkX1/3r0WgPeEq9sEnrWVtWh9jhoIBkumEK1XoNfVfq4cUN2s68CflfoKg12CCR/1TMpgxu1lDJFl7b+5T65tuop7m0K152acJFCYpXQeqzZBaCNYORlOlq2tQMrYIVtoNN2gvFolEc4nGxVONLBgjXBrSIiaDLTN3bEjdP7dOijVdCQrM0/XQL/6w622a9Fbr7t2cuKZm9EyWZucuGKN9G0MC1gYMbD9k+JvjQcwS3i5vLeVp1Lj3sfYcxDChiNpa6ZlomCctOMjaRxby2dK+EVhrb0AnJTpKKmL1Bh8uq8lzEXXhGfIfOeXmythOpz/p/2eNldn5ClkxACoUdqePHJX15mAsHciduZjHYVVQDujmLQBqC6IF2TU5BZIgxpnBTzWUxeY3Qay/0Y6UcZY+xA9lsXCniLmz7djghctPlewgjFgIhSBbRnK+p+4XB+gbunMV2OYjrjGoykeOjLZH5ZGEe26rdPlvlMPr5Wnp0Iv13hALquWj6CYHH3I3em1PV7s3vYr1bQsMw0+k8gkJywVqrzbYdOkVxYUVHxxfrDyVqgMEzpd90N/eTMUuOMAaIFQe/bUaX/AKJqmfUmr9AJJ1Huf6dNirfyh4jA82mQ6WmpcqSYNQ/2B0V45+KD7LIwllGkfd7h+8DL847MSfw4IIUV7+ZkAg5EZi9rTmjpzB1FgOHv+bvN2/E7YsM4oxqgvyGoPazc4oB2cPylX9VZ+CJjPGE2xGlCpEojO6M1SCymwZp+QsaC9Wk9Xjg5ha1/i02q9zcSWN/B3hqspWPPTPcXIpADFuKrm5+iyNuLDdT2lf4Wv4bkyFWWevHdn7GjPw7ijjtKwwIu4WK1cQdaKjKlucynU0ZiidDfn6McVL4aUVAYTx+T81MZOwQPoLF5c8hGRWel86ScXNXhCrQjDxi+SurxU9lW7uxB57NygYIr4lMpaqmRUUscEUF6s7v5ge/QgRDCs DS2QFlxN S7BSewDEDrnEhOgc2XNrEmwOudiWgSSy6dQMDEjU5IHBlennCDr+4ZZ/9oyneUkkuT0U+XRg5mJRZPrIz2ktiNzIRzPWA3HovbyX79oAGx3BdIKAuUHFm+tpSOdVKeQdjB9hfc4ieSCUfUsWWx4S1hxDzwS9R2KalPtah5ktTtmvjSpoKNgFzn6sclNXha6DhbBpx9gsfLHPYblE= 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: On 12/12/2023 12:46 PM, Sagi Shahar wrote: > 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. > + */ Nit: typo? Varifies ==> Verifies > +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; > }