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 A2B0AC3DA70 for ; Tue, 30 Jul 2024 19:04:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 281CA6B007B; Tue, 30 Jul 2024 15:04:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 231736B0082; Tue, 30 Jul 2024 15:04:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0D26B6B0083; Tue, 30 Jul 2024 15:04:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id E03FC6B007B for ; Tue, 30 Jul 2024 15:04:00 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 75CA4120492 for ; Tue, 30 Jul 2024 19:04:00 +0000 (UTC) X-FDA: 82397343840.11.83C4724 Received: from mail-yb1-f173.google.com (mail-yb1-f173.google.com [209.85.219.173]) by imf24.hostedemail.com (Postfix) with ESMTP id 4E63C180007 for ; Tue, 30 Jul 2024 19:03:58 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=G9OzNmMM; spf=pass (imf24.hostedemail.com: domain of sagis@google.com designates 209.85.219.173 as permitted sender) smtp.mailfrom=sagis@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=1722366184; 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=lqbSWDGfRec05xcYpphHjOYwTWmAIvqjJnT7JYSLr4w=; b=YkR5uJRscQy1MLauF+iVuWfCrK6StG4r7XMZ3UwEshqGMOKnujKNpRFCPSOq6X/5uEqv4b t45IeNytwGe2Y/CJeTkQcCKSu3smSz+2Bm36xKEHtCkDP2/X6xMjm8gGmop5VgWMaGz2CH zjIDvbWEthC514ua6XOxR7KQaJ0xcVo= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1722366184; a=rsa-sha256; cv=none; b=Lk6sOVTND+hU8MYAOf1Puun1pEQni8F1Fb50cWYhPjlQfVTD1J4kJxfUP7oY/4mfMAv2Hb zg8jtBYXZ7Ysxkef+TQ4z/EO9l1QRJUXKtTJWoOydjDKpd3bpCR3Ii+tNmdXcsJ7t5cov9 YOSu996kKZxRL/ot6WTCNVfw0gEb5Ck= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=G9OzNmMM; spf=pass (imf24.hostedemail.com: domain of sagis@google.com designates 209.85.219.173 as permitted sender) smtp.mailfrom=sagis@google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-yb1-f173.google.com with SMTP id 3f1490d57ef6-e0b10e8b6b7so3744711276.2 for ; Tue, 30 Jul 2024 12:03:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1722366237; x=1722971037; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=lqbSWDGfRec05xcYpphHjOYwTWmAIvqjJnT7JYSLr4w=; b=G9OzNmMMRimZFdJJqM6/v2zr/QS3woy/Qo2t6D7gwDdhU91rJtMQCDZRgYJw5CBDny W3iFZlap/FToRtOTLeYrZDNucAuEy+f3NFLgBKJZZ3d0fLxbeN0ecuxJFPQ1cOmw9Rb7 FRZeEsc7wk7AQTNLMRsrOkIIcQX2G7L9tggoxVTfitvpyXaNRVoLpz3mqRYinLIY5WuC kKaZzidcqWSMJfN1x/S0uTKxnByV4vgacih9nrlHvvZDIhbslm6QzsynnBw4shqirxc3 oJya+RXjq6tl0xPthUkJCwdNtpejhd4LUGmJf3IOVpjXwlbPftQyHNKEWorvHs8prRg8 5FKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722366237; x=1722971037; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lqbSWDGfRec05xcYpphHjOYwTWmAIvqjJnT7JYSLr4w=; b=wex+TZNaIwokf5s1PHj+2rIoOgM/i4+NUkOQbamcTDxJe9BSg8afLUH4fNwFLJImwF 4qrEnR3EXfPGFW9q6kbaMsTdtcAHahbLfuTCHAHrdgn3HlDKlhDVYA92D/u8MybsqlMq Z5SrCDKbaQVJ+xZtzJdLdmyhlDEcGRwFiCt/0Q3D1SxjC9+bkL1hqY1bqz7Eg7dthaN2 YCpymlfZK7dKpB7sygOFoiD4TAmkA8yagfMTL78yRv+7Dc9pNm1h1WELJBz6+l6bj0g6 C9qCHctzB87RlgYvoeraxS0JDAd5HCIGXWyKPERoInE46Lr4uxt1cIBEapfTEfIXL+zV mhRQ== X-Forwarded-Encrypted: i=1; AJvYcCXV26GiEUqyDYuqlAUJ90lHZ5ePm0qNZN1Vq1YoBRU3tnRStGugdWsr/MI7CIKCWywO8K2XFYRfTdxfG+d/K1SKnPg= X-Gm-Message-State: AOJu0YyK5PXshZLxv0eliXePTj3YsfEQCCZWrrwc1JNMJR847mziHINL PI/5vnk6fGpG5yt/e104gfueD0huIqODlscr5LbYavBlJD1jh+VqksS6rCfQRA/slGB7TwlW3ir NknwqwiVeqEXkibP+S/aHJSHXfcKRGKIiRgif X-Google-Smtp-Source: AGHT+IFKjqscjO6pouY8hxpbbCNPXhKKZjqEjRpJorpb+m2dfdtr1Xa6zlfgVyytvMdm/UvcP/s4zCEhMTkJmOLNAao= X-Received: by 2002:a05:6902:2d07:b0:e0b:ace9:be9d with SMTP id 3f1490d57ef6-e0bace9c02cmr1726522276.35.1722366237068; Tue, 30 Jul 2024 12:03:57 -0700 (PDT) MIME-Version: 1.0 References: <20231212204647.2170650-1-sagis@google.com> <20231212204647.2170650-19-sagis@google.com> In-Reply-To: From: Sagi Shahar Date: Tue, 30 Jul 2024 14:03:44 -0500 Message-ID: Subject: Re: [RFC PATCH v5 18/29] KVM: selftests: TDX: Add TDX MMIO writes test To: Yan Zhao 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 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 4E63C180007 X-Stat-Signature: q6o38xg7ptxkp5c5xp8jk1ekny5fu6w7 X-Rspamd-Server: rspam09 X-Rspam-User: X-HE-Tag: 1722366238-972347 X-HE-Meta: U2FsdGVkX19S6LdUF/dgt4G/0ZtHwIqj50oLzYGnicawEPFWjdkT8j4zqAbJhUu2xmnVDN3PS3XkI/qWwTRLpUOQUZKUUMkztAAbLKxjz3xlYn9X7wTxs9ky6jnDmJHH+QrxAwoqDR8CmFOwMv5pDdrmDxK53IaSGYsnWN4DL2ldKLADH5DytM5Bsh4hfeKZgs+tX1TYAiBM7SPIxLYdPfYhYO0+qshY+OVNnq/n7hh3o7R9ah6+m0wZkpbVyvStyhH+bpA5WFDiCv6IMUgok2D+Ktdu6Qjgk2D66eu3G8gv+G5lBAT0QpbZc4q07l4N08hTltoiG22cpustt/k5G6HiJPhZrgcz3p7MXSnawot6HAK74W9XjOjpZ8xZtgpRKktOWeoSBufW5YdQqBA1DU3pWKtqWEsJ+JwD8Hx4OvI1LnpqWS4xO25RFEzJnrSwZmHqq3a8krJb0CBbhRxNW6FAtfG9226W1IkjQ92/IpWKZHiN/NgE8ihDWl3QsEuz8U9OrCQvNCAbNC46od0kLopq3l/g8R8DGavVycmhC6RCnFO45euGSJgIURzsB084fQbXN0Fe152udnfmEtHpPOnHkeGubPFpWos6K4o0zwD6rBx/FUE7eXp58avXc5jRtmd6TvXhUsk2xrGwURhOe8ho0gXO9wIy6+bNR1/8B0nBw5q6gqkgeqGot7yYckZji3IKWhcFAqHqmn63wzH7RLfgcKz1XDD6azGsrkpxstHlND2geyshZyuS82C2Iob3nFxQj6YIRj9povH4uoPN1L1USXXwUGuaWD25Lt2j3O/0bWf+E/N2O8Gb9h7WRDY4kgdLBQSBa2qahUEGMM2MNacEb0A5GPTnAkFTrvaCEujh2JYRpTP1kPWFzFAnUkchKlAaM0F5h0wN48l05UemBkVwP6b4NN9Gyy7x9iKaYy2Jh73XwF+WlbRIUgur7ZF8Z2zYE23PmOJzKz3Wkhf MJ/OjCzk +UA25+3crEcEbaxkiweihO9meO0RNkAA5HjQCtNy5KfM653L0R+4Sv0ZniNro2tmRCKLO6Baf8EVTWRt4VvKl8FgkDt9lqi3t3XRMxbwT+Nq4xWbqIB7AoBqDkM15AgeiVQ7i8iCRDJqRI5kn8+/cWNhVdvO0TIv6AAEVXEMWTcOhFDllQIOW/oCCMsWI9M8Yh/uUkh1Fv1hD8tNcknK9CKSc8SXXJ/lzy7eg 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 Tue, Mar 5, 2024 at 3:28=E2=80=AFAM Yan Zhao wrot= e: > > On Tue, Dec 12, 2023 at 12:46:33PM -0800, Sagi Shahar wrote: > > The test verifies MMIO writes of various sizes from the guest to the ho= st. > > > > 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/too= ls/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 ind= ex, 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/t= esting/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 =3D { > > + .r11 =3D TDG_VP_VMCALL_VE_REQUEST_MMIO, > > + .r12 =3D size, > > + .r13 =3D TDG_VP_VMCALL_VE_REQUEST_MMIO_WRITE, > > + .r14 =3D address, > > + .r15 =3D 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 =3D tdg_vp_vmcall_ve_request_mmio_write(TDX_MMIO_TEST_ADDR, 1= , 0x12); > > + if (ret) > > + tdx_test_fatal(ret); > > + > > + ret =3D tdg_vp_vmcall_ve_request_mmio_write(TDX_MMIO_TEST_ADDR, 2= , 0x1234); > > + if (ret) > > + tdx_test_fatal(ret); > > + > > + ret =3D tdg_vp_vmcall_ve_request_mmio_write(TDX_MMIO_TEST_ADDR, 4= , 0x12345678); > > + if (ret) > > + tdx_test_fatal(ret); > > + > > + ret =3D tdg_vp_vmcall_ve_request_mmio_write(TDX_MMIO_TEST_ADDR, 8= , 0x1234567890ABCDEF); > > + if (ret) > > + tdx_test_fatal(ret); > > + > > + // Write across page boundary. > > + ret =3D 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 =3D td_create(); > > + td_initialize(vm, VM_MEM_SRC_ANONYMOUS, 0); > > + vcpu =3D 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_V= E_REQUEST_MMIO_WRITE); > > + byte_1 =3D *(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_V= E_REQUEST_MMIO_WRITE); > > + byte_2 =3D *(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_V= E_REQUEST_MMIO_WRITE); > > + byte_4 =3D *(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_V= E_REQUEST_MMIO_WRITE); > > + byte_8 =3D *(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_INV= ALID_OPERAND); > Is it possible that this event is caused by an failure of the last 8 byte= write? > i.e. though MMIO exit to host with correct value 0x1234567890ABCDEF, but = guest > sees ret as TDG_VP_VMCALL_INVALID_OPERAND. > > And if, coincidently, guest gets a ret=3D0 in the next across page bounda= ry write, > the selftest will show "PASSED", which is not right. > We can add another tdx_test_report_to_user_space to synchronize between guest and host execution making sure that the guest is done with all the valid writes before testing the negative case. > > > + 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 > > > >