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 87CF5C4332F for ; Tue, 12 Dec 2023 20:47:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 23B1C6B037C; Tue, 12 Dec 2023 15:47:26 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 1F5A46B037E; Tue, 12 Dec 2023 15:47:26 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 041C16B037F; Tue, 12 Dec 2023 15:47:25 -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 DDA336B037C for ; Tue, 12 Dec 2023 15:47:25 -0500 (EST) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id BAA97A2046 for ; Tue, 12 Dec 2023 20:47:25 +0000 (UTC) X-FDA: 81559351650.23.56FEBC2 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) by imf07.hostedemail.com (Postfix) with ESMTP id EE27E4001F for ; Tue, 12 Dec 2023 20:47:23 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=JZ+2sVdJ; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf07.hostedemail.com: domain of 32sZ4ZQUKCH0tbhjthpphmf.dpnmjovy-nnlwbdl.psh@flex--sagis.bounces.google.com designates 209.85.214.201 as permitted sender) smtp.mailfrom=32sZ4ZQUKCH0tbhjthpphmf.dpnmjovy-nnlwbdl.psh@flex--sagis.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1702414044; 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=IJkjWxWHyZzDnEqdZ8iaPH05VJWonQ7XdgN0T6HdUW8=; b=D01wOFk0MF7Go8xjDZ6Edeob3yjNxjoF14VtUMOMf0zUZD9LC5c9XhtlJYMGql1IJyMBxy sLybxtndQwVW4eCypJeivjP1vr55qBZifpF1QLIl39u0GK687tE0Dkso36O9ZJTmb0YX7b W5qcsuAtafrO9VzTEDHfmorBACyWmfo= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=JZ+2sVdJ; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf07.hostedemail.com: domain of 32sZ4ZQUKCH0tbhjthpphmf.dpnmjovy-nnlwbdl.psh@flex--sagis.bounces.google.com designates 209.85.214.201 as permitted sender) smtp.mailfrom=32sZ4ZQUKCH0tbhjthpphmf.dpnmjovy-nnlwbdl.psh@flex--sagis.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1702414044; a=rsa-sha256; cv=none; b=v8x/erSpcEC9Ob51/zhg9Ys9JafQkWjaFgwPLk1ibi6LFIsaZ/pQu6w4G+YEfkR5xeZZqE pNJ+gL9bSQ3qnmtbC5DHN/2m1q0CtRQWraKTR5FUDbhPrv6OQvGOlO0F6k4amS3/ndnjTQ jZFO4J6B0PbHa5YFGg411jIseOMhvQ4= Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-1d341b6945dso4250975ad.0 for ; Tue, 12 Dec 2023 12:47:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1702414043; x=1703018843; 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=IJkjWxWHyZzDnEqdZ8iaPH05VJWonQ7XdgN0T6HdUW8=; b=JZ+2sVdJ2Qu9AbuPT/dMNIuKidVfE0IT9+oFFQvblHV0y8QUKZefv3ftjHqSZxnq9l ojGHM5w2/dpdc5V1nVKOS0VGpEuXjvnyjaU7bYftGb4r5GBsqsDwEVdBQvUBaFF75tav wV7+O4EvQftksWxd8FNTG+Vl6ZGZhtmAXDTOFEELBTT+KYwH6+izMUDopV4CdMmpH66r iAuhCxQzIFd+X4qMLmFFm2WFnswRWtsEliaymiyQwfxjvVgYN2ZO0CrtsoYpiRa4LgHK NrPN1bu7W8srfSBIiXLHhExl5FdpQLvxZGC+hEpooXx32Ji/QnCJYqsTi25HWhP3nFP5 fjOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702414043; x=1703018843; 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=IJkjWxWHyZzDnEqdZ8iaPH05VJWonQ7XdgN0T6HdUW8=; b=h3V4/v9EWbZD/U4PAwErXZpogn7jkv9bqbznuuOp6D5fZBvfEKH5vTAu5raO2lnPVs n9xTzVUoo7HSf3VYA21TTwSv3LGXIxqEYX3HMANRyjSGuKDaS3bODrCWHOrAlJtrS51c WDOIDK6ANxvX8ypSIy3vUD+jtlabnySwE5AApZgglNoH+7YlIZZK+Zfc7YROIANNtR34 Crcwt2G1Rgm48ZJkUktWnGGM5u9zZGfwa9XFb0mf8pvGgI2kG2s5ekEWDQ9WmaXL5368 wllg4A9ESrYSHynDSrY+46wojYCBv0gSX5s34H9GCuNwU1gQa+qgBQUjqa4ptghRO93B JKKQ== X-Gm-Message-State: AOJu0Yy/2pbIVYCeFvLhLcp2Zga3ArozwX/nAPpU2z8dlDY0pHAbTOBx dYWH1JjHknTMaV0yGdGyxm5eE2KpTg== X-Google-Smtp-Source: AGHT+IHqeYC5opUgPPkQ1SaE9sI6LjAtCU7PgcgsLBBz8kpU+6ccWNAq52DxBl3PTzAdHM0JHwh97v4lLQ== X-Received: from sagi.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:241b]) (user=sagis job=sendgmr) by 2002:a17:902:ec85:b0:1d0:537e:852d with SMTP id x5-20020a170902ec8500b001d0537e852dmr58319plg.13.1702414042901; Tue, 12 Dec 2023 12:47:22 -0800 (PST) Date: Tue, 12 Dec 2023 12:46:28 -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-14-sagis@google.com> Subject: [RFC PATCH v5 13/29] KVM: selftests: TDX: Add TDX IO 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-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: EE27E4001F X-Stat-Signature: 4wk95857kaw3k8wdh5qxgoq6frjs4t6i X-HE-Tag: 1702414043-497174 X-HE-Meta: U2FsdGVkX19ZTpN03Upqf61d/lM5uPfn32OeQ16VyybjfC773HlucheIZUxGd70ERKpZRZuEWJJQ0oHj6nUGcQPbs7ZB92wfnSqSkqlCNSxRweNj2EQ6SZ/W64Yt8oMkSydlYoEWFaroy0t5zjnO0k6FiYw/BfB5eMDy1x5ZrMlxQj2DJ/Em2M1UbbGACOg8lMW6zVDP9uJLoumOnEGS8Vw09/rhKjl2jDrBQsKPsdFMuhuJpy73lrQ//XhuvU5Tq0914pNs0sHcq1JGrCVL9jN7Fm5XxaLSKZuHIPnH9s8pSHyjAAulInL/bksYDrvknAEx/EdoAZuWEvyI5NkpqbulU+ChCM/6DP4JdfwhLJqwXrDtg93cJkGItW34A+LE1iUav1pzzKjnJOQC8tUQZ+V8BNJluhXrl4V3807CovZ7rhJGhdbrsLuWqZHFp3VlaBfHz92UAslV6WSf2U2PTyabSE/dlAUIH5hALGfIKDFhyLqJo6WfdMobEQvIv7IagcS5Ilxz3H681mPlg3Wwa5wg3bRUzycrdCDAhjQ5rdUi3PenzhRsgg9xMfgmpj9PcWyT0V5YjZ1JcZBsEmQavpX/iqEWsrOLcQV8ti6iV5202CxhlkipAznAccIaHv/tIQpoqWQXnRiBuzMohOASKWIwLZTq7mX8XYxTwPm2WeHA/iTPeaSfn5NKGoaSvJQKQQWLGfkapVw3YbAdTNpRpLq3NOqNs6ZDLmU6iGgKiQj5x12E8y+blTfFrrdC1XEszNgx72yfUqjWQKHvleuFbY6TkMT1jXjcRuSyFbvrQ8wD5xZ0lAuF4zRbC0WyktOiMeiios3UuyPGTK1L+H08kFvJpJ/axANfL9C9cHKMiayzadqEdYNjEhQoW8AwZL+eBTV49dZU1Dbkop5N7IqW7xEe5I4OP2IUIWnVSZO1qD8Nl3fpoQhbXz4pkFaO2amD91pyPrNvnJfYruk8lCb 3h69t+82 cq2B9L3BKmEtHoQ4LxSiDQA0sqB7EY7zNgroBiCvn0E3yWz40e9XHmhgjNFpU/NA9+aZiQaGV3YQJh7hwgW23rsQgxdMOFxJuqAvgKjEtUHLFy2Kyw2aFOEyFweRxlLv1DBMwPyKgoKFBv/2ag734CDNcK1b0TguxMJ/XgmePQBp189e+vKutpLpQZkUxXxmDY/eePlgHOqDcgv/qjugvYxGYrdFE6iRzRj4q7gtCp8iggvYkmk0KVX2ENzQIJNu4CUd1mbmHKKeJYfrU1aalGZK2axPqUiT+UElldq3lBIB/ibNktqwtl5q+rX6FFlWwh2hJANyuGNYuMXYP4bLMMFekKW+6btk3hYkWG/6i+Frue7X+Ch0PgFdqv+AY5LFI6QeB5SiafHz6SSTtAY63pLezo7f2LMzA2fWtRM5EcHSAHPy0BiPmbgu0Iw+yeW/M817KnXHgt96zoTXI2HuY8cSJf6C7xbYIqa7iQs8yTQaXzH/g04lE0Bk8IOC3c7JnqetLww1+lDvRY/Ms9pAmF0eH3zf/mU0+SP23XIllvPT0CypTUIya4GPQJlBI+nCUrPL8A9NCw8eNt0a9AIijUgay+o/tCqIRp8pO 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 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(+) 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; } -- 2.43.0.472.g3155946c3a-goog