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 B6DFCC4332F for ; Tue, 12 Dec 2023 20:47:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4AB826B0382; Tue, 12 Dec 2023 15:47:31 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 437416B0384; Tue, 12 Dec 2023 15:47:31 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2B11C6B0385; Tue, 12 Dec 2023 15:47:31 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 16F366B0382 for ; Tue, 12 Dec 2023 15:47:31 -0500 (EST) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id E3A7DC0AC2 for ; Tue, 12 Dec 2023 20:47:30 +0000 (UTC) X-FDA: 81559351860.29.F850D54 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) by imf26.hostedemail.com (Postfix) with ESMTP id 0B747140002 for ; Tue, 12 Dec 2023 20:47:28 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=W7izul65; spf=pass (imf26.hostedemail.com: domain of 338Z4ZQUKCIIygmoymuumrk.iusrot03-ssq1giq.uxm@flex--sagis.bounces.google.com designates 209.85.214.201 as permitted sender) smtp.mailfrom=338Z4ZQUKCIIygmoymuumrk.iusrot03-ssq1giq.uxm@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=1702414049; 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=5MyTn48cv4nrVxvqRuS9eNhhEY7jSVIhffkw0y0uC7o=; b=DwqGGvaaw4588OuGR2IacemY2ugbE01NCGmp9jLr/bitf6wSF8FaDJdE332jLhonjPZMz1 kR3dLhCsuV7uQu/6Xw1Fk30eRErntYmXnBweLB2ZckxiTBVB7NkMJFTVD36pWKRyToYxyD wCLIWHBqn4YLKA01SIzUkqKeYX+EwiQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1702414049; a=rsa-sha256; cv=none; b=SEc8bglUksY93D/mQ1Egcu5RsN1+mAPv/GWaj8//o5ZVgqfaenPg4k3ZAEqIVMvsF9y24o nTr/KP2FC90auXJ4gNZD+rHsB9wHVb5YxB9l0OZoLMf8Ho0nBxxJOU2Jwk9EBe6Or4zsya 9+JovQZIRb/t0G1eLE/sv4Ci0V3W4BQ= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=W7izul65; spf=pass (imf26.hostedemail.com: domain of 338Z4ZQUKCIIygmoymuumrk.iusrot03-ssq1giq.uxm@flex--sagis.bounces.google.com designates 209.85.214.201 as permitted sender) smtp.mailfrom=338Z4ZQUKCIIygmoymuumrk.iusrot03-ssq1giq.uxm@flex--sagis.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-1d33751a322so5237105ad.3 for ; Tue, 12 Dec 2023 12:47:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1702414048; x=1703018848; 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=5MyTn48cv4nrVxvqRuS9eNhhEY7jSVIhffkw0y0uC7o=; b=W7izul65Sxe8Dr5yEFOsUY1sIZTcTiYUzxb279YCL/B7MLD95X9FYGDDMC1tGlJUW5 HeRFkekaGrF34ZK3RFYISvqigw5frkTeY8YRTXKll2A2r6o5XVPg3qEPrkXizBL5JpQu eR/rJqNp5qgpd5WWNHFNkQ7ZsqbfuZSszkvJfd7uFIQJWQ0pFzte2WLhBorgsDaaxVSt P+s7muePWXFYgZN4S0ii/SjohJx8LdAdKrSC0ybgWQYPCtc+rzgn+PA+YAzmsL4hTn1a 9QerbNpKVBVgPasTQorhX98K8W3Ihv0Pj3FLgI5d8h77Z5RufAoH9BuCN6eJmFjT+E3F ARcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702414048; x=1703018848; 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=5MyTn48cv4nrVxvqRuS9eNhhEY7jSVIhffkw0y0uC7o=; b=UDvRaZAFqYIxwh6HGPcUM1FwQukDKojQ/t6mRUMx+vYZfSf6fpcXxg+N9MQ+a3PFU9 QzrWnPBPI7E8I4VwBfR59mKcpdi72/yNXjyp1IkjrAoBL5rpYOFnN+8Ho4grHq5Srr61 92K4IMfZgjq1BPnWieOfRnIpifHdKdQgQ5/VkVakMw4StOPPhwChsKBUDnWirjZzS2Gp TkDyxrP11/ZH3c2B4QBKU8+zH26aOnj7+KpTj+9R8AJrv8qSXjdMQ7ftI1SSrvsc/7sG zDsvpVBLc5/POntXg2UY9ukK0lgKcGtZtpIkRISKX35oEQQtfFDS4/eTt4Oz4h1A4wQP ReIQ== X-Gm-Message-State: AOJu0YzecmADrQd/Un+YdZQkOVb76wtaDjCzaiIhAxubJ791ASmqUTaf 0bhl0N0JBea65lA1rbO5xCW1oZffSQ== X-Google-Smtp-Source: AGHT+IE9o+wdgszQKxFurkrd+52+etYgtANUMY5B0TZYNuLPkxvic743zdGOu2K00BhDWe6POn2aNb7G6Q== X-Received: from sagi.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:241b]) (user=sagis job=sendgmr) by 2002:a17:902:b712:b0:1d3:46f4:7f1e with SMTP id d18-20020a170902b71200b001d346f47f1emr4989pls.1.1702414047966; Tue, 12 Dec 2023 12:47:27 -0800 (PST) Date: Tue, 12 Dec 2023 12:46:31 -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-17-sagis@google.com> Subject: [RFC PATCH v5 16/29] KVM: selftests: TDX: Add TDX HLT exit 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: 0B747140002 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: sqkp1puhz6ih8pi1eimzh8bbwh33at46 X-HE-Tag: 1702414048-71942 X-HE-Meta: U2FsdGVkX18YeuOT+x1vmVw7ZdKKHJeLJRVn17yNWZkC7wqduPDlRVlX0oPcdPfO9Xdu2JOKiNZw1zWeW0AI+ACawNHQj5Le3meWs5FXxnbOVg/m++L+VF2o+8dA229QCMVf1l35BqFw6RyIasyuJLc/AMeCHNapwQwUjYWmvDMTj6NB8DYrJMIIj//563YxGMOvUOWDnYXH4l4nYODBAotU7Wb+qImrK5fiUY2XtjbCrBtpYMmsprIrusJieLLIu09SQIwEAIo4BdCyXEJceSwNhscqdU2LfdxWbKIVZK58n1CTJeCQi6VfHxE4ZMPMFbha14j4N2gGuLumQU01jrgB8DKF12Topdyo5qJveY+dcs2vI03Ztqri4VcmKjNShNPyg4H+hcUyccp07ce1GVCDDH7ONdbZzyDeXUkqD3xbWSDtyP5bXgLtaY6mHwEYQH7P++4T5swh9+Q9e0+7uRM6R4mZGYioEuWgqpDcjQfkc0hb7eIwvUxCDngYlZ+MEWGsqrp/9q880IafNb6er/Vw8pn+JZ0TEiiWqAYBDUYXRNzJ5qNQOrGJOVJPMFLo6kv7AoCWjlOGsRFsfNmZMZ4aoGEfEyJaWrVKwXEKXvzgrYv89M8OjXcTyDtLMf5F/WX/yjoz78HMNhDXq0xdTcvLOJUQtaNOWPCTye+P4mebN6T1Ia7kxxCc2K+0wewZkqqwsjj82RB/aQXsQSEA4jJQIdrY7lIoOja+Y3ODILzjo2DKpAKNRswt+K+mWOerUyJNLH5ylXOGMLtVEXS/1Oa8yAtWqI6wcbQlPOfzv1kiyII8skXCNwIC1+oLKPM+VG8LnGurZ7l+BdXvCdoK98ph6BJAnE6UpSbaxrzQQ+ZVdTD+S9feqBEDkmZMZCmyVa8KCB104FQq7I5Aicvo4a/eGq6QBacMW9wBt2LvnFovrz0ZLsvHRLOm/gVQMPPZ52p+nQ6xp4Zt0Mbnmz2 4DCAIjnq jzqYoKlf68BaOqXrO+QvTmpoc0IINa2j84vE/HYI7W8IPijpBqWzDd5A0BHdt8vTHXasETveIzp60oc4ovSf6+ec7KoycjOicyMEptOMZZUZgIxwn6kDLU3xTOSGzfKx0s81lSMNyf3iWqhplLm691L6AzQh0oQWUCPwx7aI1dmBaHyzL2oFKlqI+M6uLD57iWTO7CS8uyp7B8N9y2Oec+2G+UBxSZF3o+uPFaeCaeNx53D7NnCAfFp8yCrsJaUNWPJGgrsUolWdkmIbcIbMfKfYdbMEfsioR/0FlI6B4OPWf+Cd/8b8j7iNfOjI10wlShuE8N6wQvQEvk5zpbnAmdjow9/p2TSfT6pwKhzVP+eMjfBH2de4xwXX5O3M13sLSBgLQ1uUadiSzm+XLlA8eBgJfd4HXMtdcLjoocCpeVyTHY2azwFil0NmM+wwpBIHvyc8vLMRjr2Yr5sVr1F5NLDOf9lL+lPWRbnfKEjRE0Eb9NGBibD3jJHyQBlU6TONkTSBgbu209as7mp+AK9eZMXNMuw6LhoNQjuH6Kmmfj86UXDhUOlU2U3A5KQ+AXEJH+AtfZTbsBl3I1ubSf7WUPWKVoDnEfIR6HXkp 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 that the guest runs TDVMCALL and the guest vCPU enters to the halted state. Signed-off-by: Erdem Aktas 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 | 10 +++ .../selftests/kvm/x86_64/tdx_vm_tests.c | 78 +++++++++++++++++++ 3 files changed, 90 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 85ba6aab79a7..b18e39d20498 100644 --- a/tools/testing/selftests/kvm/include/x86_64/tdx/tdx.h +++ b/tools/testing/selftests/kvm/include/x86_64/tdx/tdx.h @@ -8,6 +8,7 @@ #define TDG_VP_VMCALL_GET_TD_VM_CALL_INFO 0x10000 #define TDG_VP_VMCALL_REPORT_FATAL_ERROR 0x10003 +#define TDG_VP_VMCALL_INSTRUCTION_HLT 12 #define TDG_VP_VMCALL_INSTRUCTION_IO 30 #define TDG_VP_VMCALL_INSTRUCTION_RDMSR 31 #define TDG_VP_VMCALL_INSTRUCTION_WRMSR 32 @@ -20,5 +21,6 @@ uint64_t tdg_vp_vmcall_get_td_vmcall_info(uint64_t *r11, uint64_t *r12, uint64_t *r13, uint64_t *r14); uint64_t tdg_vp_vmcall_instruction_rdmsr(uint64_t index, uint64_t *ret_value); 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); #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 88ea6f2a6469..9485bafedc38 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/tdx/tdx.c +++ b/tools/testing/selftests/kvm/lib/x86_64/tdx/tdx.c @@ -114,3 +114,13 @@ uint64_t tdg_vp_vmcall_instruction_wrmsr(uint64_t index, uint64_t value) return __tdx_hypercall(&args, 0); } + +uint64_t tdg_vp_vmcall_instruction_hlt(uint64_t interrupt_blocked_flag) +{ + struct tdx_hypercall_args args = { + .r11 = TDG_VP_VMCALL_INSTRUCTION_HLT, + .r12 = interrupt_blocked_flag, + }; + + 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 5db3701cc6d9..5fae4c6e5f95 100644 --- a/tools/testing/selftests/kvm/x86_64/tdx_vm_tests.c +++ b/tools/testing/selftests/kvm/x86_64/tdx_vm_tests.c @@ -721,6 +721,83 @@ void verify_guest_msr_writes(void) printf("\t ... PASSED\n"); } +/* + * Verifies HLT functionality. + */ +void guest_hlt(void) +{ + uint64_t ret; + uint64_t interrupt_blocked_flag; + + interrupt_blocked_flag = 0; + ret = tdg_vp_vmcall_instruction_hlt(interrupt_blocked_flag); + if (ret) + tdx_test_fatal(ret); + + tdx_test_success(); +} + +void _verify_guest_hlt(int signum); + +void wake_me(int interval) +{ + struct sigaction action; + + action.sa_handler = _verify_guest_hlt; + sigemptyset(&action.sa_mask); + action.sa_flags = 0; + + TEST_ASSERT(sigaction(SIGALRM, &action, NULL) == 0, + "Could not set the alarm handler!"); + + alarm(interval); +} + +void _verify_guest_hlt(int signum) +{ + struct kvm_vm *vm; + static struct kvm_vcpu *vcpu; + + /* + * This function will also be called by SIGALRM handler to check the + * vCPU MP State. If vm has been initialized, then we are in the signal + * handler. Check the MP state and let the guest run again. + */ + if (vcpu != NULL) { + struct kvm_mp_state mp_state; + + vcpu_mp_state_get(vcpu, &mp_state); + TEST_ASSERT_EQ(mp_state.mp_state, KVM_MP_STATE_HALTED); + + /* Let the guest to run and finish the test.*/ + mp_state.mp_state = KVM_MP_STATE_RUNNABLE; + vcpu_mp_state_set(vcpu, &mp_state); + return; + } + + vm = td_create(); + td_initialize(vm, VM_MEM_SRC_ANONYMOUS, 0); + vcpu = td_vcpu_add(vm, 0, guest_hlt); + td_finalize(vm); + + printf("Verifying HLT:\n"); + + printf("\t ... Running guest\n"); + + /* Wait 1 second for guest to execute HLT */ + wake_me(1); + td_vcpu_run(vcpu); + + TDX_TEST_ASSERT_SUCCESS(vcpu); + + kvm_vm_free(vm); + printf("\t ... PASSED\n"); +} + +void verify_guest_hlt(void) +{ + _verify_guest_hlt(0); +} int main(int argc, char **argv) { @@ -740,6 +817,7 @@ int main(int argc, char **argv) run_in_new_process(&verify_guest_reads); run_in_new_process(&verify_guest_msr_writes); run_in_new_process(&verify_guest_msr_reads); + run_in_new_process(&verify_guest_hlt); return 0; } -- 2.43.0.472.g3155946c3a-goog