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 F28D4C5475B for ; Fri, 1 Mar 2024 06:55:41 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 70FFB6B0092; Fri, 1 Mar 2024 01:55:41 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 6C06F6B0093; Fri, 1 Mar 2024 01:55:41 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 587786B0095; Fri, 1 Mar 2024 01:55:41 -0500 (EST) 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 46C646B0092 for ; Fri, 1 Mar 2024 01:55:41 -0500 (EST) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 1EE4D1C0A14 for ; Fri, 1 Mar 2024 06:55:41 +0000 (UTC) X-FDA: 81847559682.30.C740212 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) by imf15.hostedemail.com (Postfix) with ESMTP id 32368A0005 for ; Fri, 1 Mar 2024 06:55:38 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=Pp0FiHh2; spf=none (imf15.hostedemail.com: domain of binbin.wu@linux.intel.com has no SPF policy when checking 192.198.163.9) smtp.mailfrom=binbin.wu@linux.intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1709276139; a=rsa-sha256; cv=none; b=IQS0o+YUoP2dIq1IbOcpegMdgdBWQ23/F9WWTo96IvaoPTFWWUFEY21AXw1oh46hScZ0rl ZRAdPrXhvWDWJ7A6tIQapXHikf9ZDAPIRv2/ZtKDVG6mkktx3KpsZfn3553LCuvSrrnUOQ v0fWJ0833GzZdM2nZ8XpF9UIk+GLbcU= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=Pp0FiHh2; spf=none (imf15.hostedemail.com: domain of binbin.wu@linux.intel.com has no SPF policy when checking 192.198.163.9) smtp.mailfrom=binbin.wu@linux.intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1709276139; 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=ZAQjkP/TJU+y2Rt6jqwRprFzL16RUl12I/eJ5FMPk0Y=; b=oVlMPpChZU9fCoaPuQB6QsVotLTbRsAnR3Rkuhp+96ILyJPzr1nZ1XLYvztu3Aun/Ff4EB 368BpctK2lemldIUHLC1R/HSUUHomSJTWf0F0nCVDPgdpDLwcpVbajirZFPU73Zd/h18qn Gqig8p2dSwSspnSXpxpIcxoGK6+TLXg= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1709276139; x=1740812139; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=GkEyFblwb+TyBXjYkykuu/UF12VLxplAcoYBbKh21OU=; b=Pp0FiHh2Wxd/GUI8jHdsyK4V+zqHkchZojVOA8lTAI7hJVtMpjY9QIJH xFs1DOsupo4E364pSDYAULCwIPU9gFfRkZhCZW6uEKzilwhmIZgnAoBAf ZR4VEug5IQyG5jIK5gH9n3vM4mBYJsnvgwQ21XaAct5s6XpCbmt9eZl7h WxJ6DRaNo9E79JAzrj7abzzowQJsZDNp6/YJfxzv4T/+awW/z4sZcjAsw Nrb8tsT/sFoDidQ65cEtraE6dKNLk7wC4wXylq1jDp+z+lpjq5ezsOr07 2HkuNTf1/sH3o4hQKneBOpL3YceNJjZkNGXec7iQwvDNx9CvwgrliFLgU w==; X-IronPort-AV: E=McAfee;i="6600,9927,10999"; a="14504698" X-IronPort-AV: E=Sophos;i="6.06,195,1705392000"; d="scan'208";a="14504698" Received: from orviesa005.jf.intel.com ([10.64.159.145]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Feb 2024 22:55:37 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.06,195,1705392000"; d="scan'208";a="12791235" Received: from binbinwu-mobl.ccr.corp.intel.com (HELO [10.125.242.247]) ([10.125.242.247]) by orviesa005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Feb 2024 22:55:32 -0800 Message-ID: Date: Fri, 1 Mar 2024 14:55:29 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC PATCH v5 13/29] KVM: selftests: TDX: Add TDX IO writes test To: Sagi Shahar Cc: linux-kselftest@vger.kernel.org, Ackerley Tng , Ryan Afranji , Erdem Aktas , Isaku Yamahata , 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-14-sagis@google.com> From: Binbin Wu In-Reply-To: <20231212204647.2170650-14-sagis@google.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 32368A0005 X-Stat-Signature: j4qdkffxi3psqwyh5xcijw1xg6g71uux X-Rspam-User: X-HE-Tag: 1709276138-930056 X-HE-Meta: U2FsdGVkX18gWQOU/CnSXnWlWraqGTxPjXNkEMqLBDOMywKbZUvbKDQpQpWS3QUQjcj8kK95OtGyvi7NkgA1BHk896e2o/SQAzcsJK/uwhwvRbKpb64PflyReGHKgmcwf2LOz6IJ09p5vo9Xmhqua61usix0FRi2EikGeBKAAoFMD3h1LQe9x9/Qi5eHCeFK7lLScrpAn5KZqjZTY4vlSdPri9K+G77TrNRX+me0n0Aa5/aO3YAj9Osz/XTdFVrKfMyEeqDMyZvDrHwM4nNmf+W0mbExPUAn2ApEHRveqK3peELCqzOJD/fRl37J8wnyL3oXu8a0kc8NUpdh5ZTUPRncamjIMcew9q5Sa3azK3uFLVqXjPwKacSCEATuLD25R11JPM5I/B5KekZ0SxhViJ2UTykJShjpQKk5oyqlXqOpdzOFTdw7BByTdcZo88ch8qE/HTYsyXWkdIal/kg7CNqKO7XdlUUAAt0Lg7YLGd0EnBMlt0OxHaEx/PPMzVa32QJUrBE3qyvithcrGLLguOLQEYZwkzUuYdCSIfteVpm0aY3DYu+oJJsRSplcAeyEnFCOpe/968d8BCL9Br5pGN1u9DIt0SEfY5ArrwEp1IktdWqKPeys00IP+trX/Y+gFeEBg9RRMLPk2V1nKw27jLbdIgdXKQRym36utGtpVSOsDNhzGSJfFMVMp60NyQq6IIReH9wCVOxfsSzfuAFzD4xfy8QvF4tefbmAVRwcOfCWJ2keFEglPVMxZoXd1Jx1B7WOQHhGTvAr3drkvm7mvXcJVQVwV7ML3MPS7qRYvXA2cNmD8+SBHbqXsG1FXk9K5nvX/CJcCiEVFHRUDX3kr4zHJr0qpX44T0v7d4z+I1USz7wtdiQ8SQ== 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/13/2023 4:46 AM, Sagi Shahar wrote: > The test verifies IO 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/tdcall.h | 3 + > .../selftests/kvm/x86_64/tdx_vm_tests.c | 91 +++++++++++++++++++ > 2 files changed, 94 insertions(+) Reviewed-by: Binbin Wu > > diff --git a/tools/testing/selftests/kvm/include/x86_64/tdx/tdcall.h b/tools/testing/selftests/kvm/include/x86_64/tdx/tdcall.h > index 78001bfec9c8..b5e94b7c48fa 100644 > --- a/tools/testing/selftests/kvm/include/x86_64/tdx/tdcall.h > +++ b/tools/testing/selftests/kvm/include/x86_64/tdx/tdcall.h > @@ -10,6 +10,9 @@ > #define TDG_VP_VMCALL_INSTRUCTION_IO_READ 0 > #define TDG_VP_VMCALL_INSTRUCTION_IO_WRITE 1 > > +#define TDG_VP_VMCALL_SUCCESS 0x0000000000000000 > +#define TDG_VP_VMCALL_INVALID_OPERAND 0x8000000000000000 > + > #define TDX_HCALL_HAS_OUTPUT BIT(0) > > #define TDX_HYPERCALL_STANDARD 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 569c8fb0a59f..a2b3e1aef151 100644 > --- a/tools/testing/selftests/kvm/x86_64/tdx_vm_tests.c > +++ b/tools/testing/selftests/kvm/x86_64/tdx_vm_tests.c > @@ -339,6 +339,96 @@ void verify_get_td_vmcall_info(void) > printf("\t ... PASSED\n"); > } > > +#define TDX_IO_WRITES_TEST_PORT 0x51 > + > +/* > + * Verifies IO functionality by writing values of different sizes > + * to the host. > + */ > +void guest_io_writes(void) > +{ > + uint64_t byte_1 = 0xAB; > + uint64_t byte_2 = 0xABCD; > + uint64_t byte_4 = 0xFFABCDEF; > + uint64_t ret; > + > + ret = tdg_vp_vmcall_instruction_io(TDX_IO_WRITES_TEST_PORT, 1, > + TDG_VP_VMCALL_INSTRUCTION_IO_WRITE, > + &byte_1); > + if (ret) > + tdx_test_fatal(ret); > + > + ret = tdg_vp_vmcall_instruction_io(TDX_IO_WRITES_TEST_PORT, 2, > + TDG_VP_VMCALL_INSTRUCTION_IO_WRITE, > + &byte_2); > + if (ret) > + tdx_test_fatal(ret); > + > + ret = tdg_vp_vmcall_instruction_io(TDX_IO_WRITES_TEST_PORT, 4, > + TDG_VP_VMCALL_INSTRUCTION_IO_WRITE, > + &byte_4); > + if (ret) > + tdx_test_fatal(ret); > + > + // Write an invalid number of bytes. > + ret = tdg_vp_vmcall_instruction_io(TDX_IO_WRITES_TEST_PORT, 5, > + TDG_VP_VMCALL_INSTRUCTION_IO_WRITE, > + &byte_4); > + if (ret) > + tdx_test_fatal(ret); > + > + tdx_test_success(); > +} > + > +void verify_guest_writes(void) > +{ > + struct kvm_vm *vm; > + struct kvm_vcpu *vcpu; > + > + uint8_t byte_1; > + uint16_t byte_2; > + uint32_t byte_4; > + > + vm = td_create(); > + td_initialize(vm, VM_MEM_SRC_ANONYMOUS, 0); > + vcpu = td_vcpu_add(vm, 0, guest_io_writes); > + td_finalize(vm); > + > + printf("Verifying guest writes:\n"); > + > + td_vcpu_run(vcpu); > + TDX_TEST_CHECK_GUEST_FAILURE(vcpu); > + TDX_TEST_ASSERT_IO(vcpu, TDX_IO_WRITES_TEST_PORT, 1, > + TDG_VP_VMCALL_INSTRUCTION_IO_WRITE); > + byte_1 = *(uint8_t *)((void *)vcpu->run + vcpu->run->io.data_offset); > + > + td_vcpu_run(vcpu); > + TDX_TEST_CHECK_GUEST_FAILURE(vcpu); > + TDX_TEST_ASSERT_IO(vcpu, TDX_IO_WRITES_TEST_PORT, 2, > + TDG_VP_VMCALL_INSTRUCTION_IO_WRITE); > + byte_2 = *(uint16_t *)((void *)vcpu->run + vcpu->run->io.data_offset); > + > + td_vcpu_run(vcpu); > + TDX_TEST_CHECK_GUEST_FAILURE(vcpu); > + TDX_TEST_ASSERT_IO(vcpu, TDX_IO_WRITES_TEST_PORT, 4, > + TDG_VP_VMCALL_INSTRUCTION_IO_WRITE); > + byte_4 = *(uint32_t *)((void *)vcpu->run + vcpu->run->io.data_offset); > + > + TEST_ASSERT_EQ(byte_1, 0xAB); > + TEST_ASSERT_EQ(byte_2, 0xABCD); > + TEST_ASSERT_EQ(byte_4, 0xFFABCDEF); > + > + 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); > @@ -353,6 +443,7 @@ int main(int argc, char **argv) > run_in_new_process(&verify_td_ioexit); > run_in_new_process(&verify_td_cpuid); > run_in_new_process(&verify_get_td_vmcall_info); > + run_in_new_process(&verify_guest_writes); > > return 0; > }