From patchwork Mon May 12 10:52:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ganapatrao Kulkarni X-Patchwork-Id: 889562 Received: from CY4PR02CU008.outbound.protection.outlook.com (mail-westcentralusazon11021077.outbound.protection.outlook.com [40.93.199.77]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A0D8D268FF1; Mon, 12 May 2025 10:53:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.199.77 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747047203; cv=fail; b=k0sVjGbr5BMBLegHc5ReHS/KFDGxiRGgfI5msZdIkASPP87iDkn8hyDPFairBcRc7p7Ejtnrua1eXHfRbOrnnqESYuJiNszt7pPPOJRwaQqj2K49noiTxRqMHVMVnvMzwdPzQflI4+EC7s0fhz0BKM8zgKgngPJnh08U1TXAqzQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747047203; c=relaxed/simple; bh=44/beeK+cAMEd0TdL3j3RbuMftwoy5PchCGZAJO9dm0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Tf4pO0L7SSJLMaLtKqwr7/SgHDqUzlQMhETADxr/C1A09Q8xZ1eLBng9lw0rHoYtbldJesC5np/6wFz/rSGkQmzkSu9XF+eI/IpVAU9bmvzhiynAhdP+2gOjyjEgpABQh0HhwDxaAfwzAE2Ru6xTMW3wpK4wXWuLOmZ9Y3HCYl4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com; spf=pass smtp.mailfrom=os.amperecomputing.com; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b=A4/TC4dU; arc=fail smtp.client-ip=40.93.199.77 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b="A4/TC4dU" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=L2g1OuF9jFyEK4wGfE+mb4S2WwdsqcHOHwkZp2FjihksAqNNJQ7p1w30qf+fZqf+L9DqiNdcWPXSYYnnys9aUqXU6JcMYJ69dS4kIFnKfGMD3q7e+INCgq5zsh6r3cZI9dwg0IZtDAAHjWUczKzUE6X8fJcATr0Ikm+9AgFF8zTebSmov6WJD5TI82Jo5r4RyX1ChbkGcA4PwSVRTI1XQN7i/A2oowhDR6K7b5AxoAuXADofD9nzFD5PE/Pz9J7LZXnQHXNPKzn5Kc8jpuDS5y3YRS3p/YLYFFmt1geXefLvmjc/6pYxuKZlycvT+b3nP/lAQHibhgycfo86cEzw/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=7cA+TyiNhqZOY1xxKE1PB6wcfsc0wR6rTmxNZEOwG04=; b=OV48M0s1N9/gSVHJ/EX8tgN4l0CjmJkDKY18/ZrD2RXZMmpDztay+ijrJuhcJK9dxofAk5tz2QUUVXGOD40IeaGo6vlqxsEmFXaYMM70nKVuoM6My1GjsAlJXCuKkh+MzxwS9UumIS9panI0iFT0Ey2+IlXcZntqCvBnGa/Zth9Bh3QQkLRRvzcYekO+FiaPXJrvlQYft26gOi8yNJRlGlIZBxiXah9MZ8aLtOpX8mRcsPjSPJoLtYSHl9CXrGqdy0vzV0sUWFEuxb+Uld2bq1SdGAL29FVHNYl/BmpNv/yaDlk9YhIyhNQmKYNtdBzJWKiFAmtVr1UnKFBs12WYKg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7cA+TyiNhqZOY1xxKE1PB6wcfsc0wR6rTmxNZEOwG04=; b=A4/TC4dUZZWiH3r2a0v+jw70w7m9+AT9QmVlrQfnF3GH0Bl1IgIgYQlNN4AGa0vkFEN/EcdsViFbtUMe9Spuj9zJNLhe+sAvyK2dBeKdf875TEcXD+ivetTGAA28Rmqngl5KewuglWigFKyE6HXKU+58mqCCizz/dmqsctB51k8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SJ2PR01MB8101.prod.exchangelabs.com (2603:10b6:a03:4f6::10) by CH0PR01MB6907.prod.exchangelabs.com (2603:10b6:610:104::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8722.28; Mon, 12 May 2025 10:53:14 +0000 Received: from SJ2PR01MB8101.prod.exchangelabs.com ([fe80::292:6d9c:eb9a:95c9]) by SJ2PR01MB8101.prod.exchangelabs.com ([fe80::292:6d9c:eb9a:95c9%6]) with mapi id 15.20.8722.027; Mon, 12 May 2025 10:53:14 +0000 From: Ganapatrao Kulkarni To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Cc: maz@kernel.org, oliver.upton@linux.dev, joey.gouly@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com, seanjc@google.com, darren@os.amperecomputing.com, gankulkarni@os.amperecomputing.com Subject: [RFC PATCH v2 1/9] KVM: arm64: nv: selftests: Add support to run guest code in vEL2. Date: Mon, 12 May 2025 03:52:43 -0700 Message-ID: <20250512105251.577874-2-gankulkarni@os.amperecomputing.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250512105251.577874-1-gankulkarni@os.amperecomputing.com> References: <20250512105251.577874-1-gankulkarni@os.amperecomputing.com> X-ClientProxiedBy: CY8PR19CA0043.namprd19.prod.outlook.com (2603:10b6:930:6::14) To SJ2PR01MB8101.prod.exchangelabs.com (2603:10b6:a03:4f6::10) Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ2PR01MB8101:EE_|CH0PR01MB6907:EE_ X-MS-Office365-Filtering-Correlation-Id: 7b770f6a-ff6f-4814-16b7-08dd914331c1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|52116014|7416014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: lfKAySUHSCzX/M7u/H0KpeNty9lO0ssbhIdWwPfa9OtSYJg/BOXmKIe3KZIcAhHCyjcUSC+0CYLDqRWZBiSGcDM4nrr3RitJLncs36tAvezUUMIlQu5Web26QdF3ddoTyGtUeqolwmaB+tXQoJfY9UP7vlgVaax3T01ylD8c8CuoKvchGrCvzMQJ6L9mI7N0EbYADsTjCVpYwEvxk8YqoU7xNq1bU1+BryUFw9yCwDdUeLXRmqB2VbqZw6Dh4PoNIcGqF24PD1U44nrNbKwPVzUIFXw2RN+oVTgJzui46ctkSv30motC6ukismakYEDbwEeBfAUB0LD4lp4JZUsWco2cUS4kdJKI9/WytCgZ4Kco7uBz3yc6zZLdj4AB24eM7DQxZTVGabwBNKMMK86VRHcI3EzcX7elmkzx7YrxaMXes7C38XFP8kG+9fiGaonDv8fzXTnvIXD0HwwrPJxTBTTffjt/pESKyATU5nOYrkqzc5AjgeCrfl+f1HVYplJhFKKXAa1WzpVltyfghwtyl8tZBFcb+ohVxu3EREKftCgi1fpeu9XCV0Gf4x0Df+HVKxJHI/a6xx6mQrOaBXMymK153/zbY9LWM6Ob1pJELLrkrOthQxMjuMNruu0QFYGuGsR/iJ2pVwNc5ZJbm9O7GsrfWEZ3xVSKBTIajngZj22uZGGvnR7zyTGnhqhvD83jrcMummp2i2kXvPfiz1q14PKczsIifzazUzUwJqKp9DGcAyc2WrABBwqmR+ZRTm7BXCSAUGRS5jlkWMLPuQTP/Zi8q8jl+OGTnAw8tsAnlYAYoXWX/yPW+YKgWxMmVo4GfsMbfITfXIptid9/I0usXg8FU3tIrjutLxc8kZOpbgL6/S1wHSmsIdSWy5RKcDql9tAvejXVqRlhz8/pL0IMMt4enJbeLqEGyI8AHcYr+R+kRd8XC7Rl+N9Vyg8WJZflBI73T0fBOt737Etp36tHT0xxAPQeMVCUydU00hjOVgQ7aNstUVxElthNIMBmTI/H51fk1gJfkAFmBWFOXBUntrovCs7e5mRZDZZ4mtuuTVfLI0Roxf2DZPPZ2vPR/vhmBYWVPVsLfr/nlFX8kEncgkSxMF9mKiiTUBdckXNOIofthjNUTXni0EL9GGtEbRl+TMVCUZe3epw1N/U7JsPuKtbKg9oBYDt2cLTbg2oM4uO5brKhLzA0gQ16TAb2zJpmVojsqvJvRsWc3zJFXhOHooQgQupx5RHP84NHcAb8Q1NOsxdNvRm7br4U+W5X8rZIzbAoiq4/vjIAGZZXWQPafiWypKgvQ1mp64r91zmlWkfne5fTKyC96tADzhif7FenDgia7VR3zlKW6PoQjaJ5gPF/HQUcz0HaXO5/euajJZEhLAJmaBf024S+uZi463Ae/Jxu0Hci5/npbaVvGSzlI9LOuZWbAi32jh9M4iL0it10ECwAPzJQcXKfNtZxnmGqctPQpsEdUWEGw4WI6AdfPw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ2PR01MB8101.prod.exchangelabs.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(52116014)(7416014)(366016)(1800799024)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 6GcJfN5hBNtD/M5wKIi338vf5IopdqInogsFKOwz0LANgngqsF5lOOvU/yPssoWFczG7r9nhIazupF2nXCDxF7261aEDx82UpYnFKO3GbDgPVik7Qa6ZWWTzonqE6rJoH3+RhtzZ5jlCKjrB/Es45PuCllVCTHtdc2tcEBLJCl8boGtHyLuKZLU+JJaPFZ1rYGzY8MR/NSb0kTTk5vZOUaXL/dSHOI0Q/BuFnaXnDvu5xuAkSAjWh91andRPJ1oUgnZRarc0T/033KGx5RRi9mBsWujKAxMGh9zNW6q9ZD9E3co0iZn43AB74hg9Q/lKmSh3bg0rVId4uCOyYtlHzp7iMrB0Pgvb/4nVJhFQd1sQwo+0zHMarnZgO3Osuq/YisaKINCGM4GuE79WipLF6lnztq0MyfgOkb4VnaIVoB3OGguqMe/T+HTX+jKF1pTf7fsPhm6xfm8Zsknx1+qCZlpno066UtuUqGnfKwllunn5sG7NXWvVlmHiwDS6wJABSbIHoX0Vsvwyz4czZvDOm5//JnCpwnDU4EXHlsuVZZX9qc+Zsf/XdYD9gwECeU+rcGbkg4mpugGJnhVnZVX8k9/JvQbLZGHO4LYtlT3O2oPLr+0mzrlJ0JiYJPZVa7BV7suE+UNjff5HA84y3iofWrEiRrCFSydu3D4BnVkS4LCcJp+P2Iacvn+b9CgwcnRfI3XIK2+L5NYqVjuBdSMeTDLty1H/Trtgr+rHmYZpm4l6Gu2uY7VPZ0XdU5zcIdOESss5T/qLHBFROUqzJ2nEXA/vgrz4gM1TxSx/yZPbYOqj5YN7Wc2ji0UZ6KtWUBbfdn/t8e+Uj2Wg27zmpA6z3TpLzoPd99pYr1d5y3IteV32lCMqbGgmH/QnVpWM6W3dABqht0Bv6ViSKOiTCXjxWVRVVgcMbHcqZyJFDDGmGBoSJgV5hWng+K2ItoSzJ5FotI6Qww4psudyr6wZaVYNKlefYu9R0650xLtNHj48Njl8bO0vgzj7V1ZPIeJvq79mraIqFnTDFq549rFIINXvBvieLFvlgGrMIiDhJW6t/ybUBVaOABuN4v7KsCWi/XR+tEarrr+HYcPs67/GAtQlKkx4HBuxztzkzqYCqgNk7FViY/CB5mK6Nt62j0J/RQ90v6tyuUnnxkIGLFgXzQ5vSWxhmjinI0OIOwJoPktdx1X9W3NIVEV1h5NS+AFRm2PNv2xq+8aA4mjeztHquDFmpMmcXi9KniMgnTzYO5miakyApCZmD/Rei20IthXz8Dn6VbZSxV0BJW3ydn88rHII1rFMDwmG+FOysG51Wo24sKfYwLc7CYdFUxi9M+n17y3c63CPOZOf9DJgVvNOynOdNZOwPxvBVDcZGkXejFSf9VsoMlRX8Mz3oFirrTQNCjppNwdJ0nnU0HvY3ghHa6snztz52b21biiIlZGE13Yw3JcziFA4khCdjjt7Bd6Jv/cuyo/d73UhUMAkvK967PdNX5jU87a6tmGTy+dswKu919uADVrKS/04Fy6Z0wBtqLN5oSYj91llQos/cvdKzIEkiWHTik0pxG/g6Gimdchi5bZU7uf76ApEmFsyZOR3Hgp+oMslrw8EdcSF+L9WEXKkUrB4g5l7IkswYztClXyXVMeRKily3aqcLO2qJjVbhF9L X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7b770f6a-ff6f-4814-16b7-08dd914331c1 X-MS-Exchange-CrossTenant-AuthSource: SJ2PR01MB8101.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 May 2025 10:53:14.1166 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Y//xWy0uG3OAfJziDIu0OAmeNdw5CadarKEZodkqRygmZ8OpO49O2KNmYPDhAKihhboIUprQkCDvJfFUZ6JRT4ehG5j9692DUKOOxizd97gR8sX2kLGGw8wYX871jhrE X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR01MB6907 This patch adds required changes to vcpu init to run a guest code in vEL2 context and also adds NV specific helper functions. Signed-off-by: Ganapatrao Kulkarni --- tools/testing/selftests/kvm/Makefile.kvm | 2 + .../kvm/include/arm64/kvm_util_arch.h | 3 + .../selftests/kvm/include/arm64/nv_util.h | 45 ++++++++++++++ .../selftests/kvm/include/arm64/vgic.h | 1 + .../testing/selftests/kvm/include/kvm_util.h | 3 + tools/testing/selftests/kvm/lib/arm64/nv.c | 46 ++++++++++++++ .../selftests/kvm/lib/arm64/processor.c | 61 ++++++++++++++----- tools/testing/selftests/kvm/lib/arm64/vgic.c | 8 +++ 8 files changed, 155 insertions(+), 14 deletions(-) create mode 100644 tools/testing/selftests/kvm/include/arm64/nv_util.h create mode 100644 tools/testing/selftests/kvm/lib/arm64/nv.c diff --git a/tools/testing/selftests/kvm/Makefile.kvm b/tools/testing/selftests/kvm/Makefile.kvm index f773f8f99249..3348f729d3b2 100644 --- a/tools/testing/selftests/kvm/Makefile.kvm +++ b/tools/testing/selftests/kvm/Makefile.kvm @@ -37,6 +37,7 @@ LIBKVM_arm64 += lib/arm64/processor.c LIBKVM_arm64 += lib/arm64/spinlock.c LIBKVM_arm64 += lib/arm64/ucall.c LIBKVM_arm64 += lib/arm64/vgic.c +LIBKVM_arm64 += lib/arm64/nv.c LIBKVM_s390 += lib/s390/diag318_test_handler.c LIBKVM_s390 += lib/s390/processor.c @@ -155,6 +156,7 @@ TEST_GEN_PROGS_arm64 += arm64/vgic_irq TEST_GEN_PROGS_arm64 += arm64/vgic_lpi_stress TEST_GEN_PROGS_arm64 += arm64/vpmu_counter_access TEST_GEN_PROGS_arm64 += arm64/no-vgic-v3 +TEST_GEN_PROGS_arm64 += arm64/nv_guest_hypervisor TEST_GEN_PROGS_arm64 += access_tracking_perf_test TEST_GEN_PROGS_arm64 += arch_timer TEST_GEN_PROGS_arm64 += coalesced_io_test diff --git a/tools/testing/selftests/kvm/include/arm64/kvm_util_arch.h b/tools/testing/selftests/kvm/include/arm64/kvm_util_arch.h index e43a57d99b56..ab5279c24413 100644 --- a/tools/testing/selftests/kvm/include/arm64/kvm_util_arch.h +++ b/tools/testing/selftests/kvm/include/arm64/kvm_util_arch.h @@ -2,6 +2,9 @@ #ifndef SELFTEST_KVM_UTIL_ARCH_H #define SELFTEST_KVM_UTIL_ARCH_H +#define CurrentEL_EL1 (1 << 2) +#define CurrentEL_EL2 (2 << 2) + struct kvm_vm_arch {}; #endif // SELFTEST_KVM_UTIL_ARCH_H diff --git a/tools/testing/selftests/kvm/include/arm64/nv_util.h b/tools/testing/selftests/kvm/include/arm64/nv_util.h new file mode 100644 index 000000000000..622a17c9d142 --- /dev/null +++ b/tools/testing/selftests/kvm/include/arm64/nv_util.h @@ -0,0 +1,45 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2025 Ampere Computing + */ +#ifndef SELFTEST_NV_UTIL_H +#define SELFTEST_NV_UTIL_H + +#include +#include + +#define HCR_NV2 (UL(1) << 45) +#define HCR_AT (UL(1) << 44) +#define HCR_NV (UL(1) << 42) +#define HCR_E2H (UL(1) << 34) +#define HCR_TTLB (UL(1) << 25) + +/* Enable NV2 and guest in VHE mode */ +#define HCR_EL2_NV_EANBLE (HCR_E2H | HCR_NV | HCR_NV2 | HCR_AT | HCR_TTLB) + +struct kvm_vm *nv_vm_create_with_vcpus_gic(uint32_t nr_vcpus, + struct kvm_vcpu **vcpus, int *gic_fd, void *guest_code); + +struct kvm_vm *__nv_vm_create_with_vcpus_gic(struct vm_shape shape, + uint32_t nr_vcpus, struct kvm_vcpu **vcpus, + uint64_t extra_mem_pages, int *gic_fd, void *guest_code); + +/* NV helpers */ +static inline void init_vcpu_nested(struct kvm_vcpu_init *init) +{ + init->features[0] |= (1 << KVM_ARM_VCPU_HAS_EL2); +} + +static inline bool kvm_arm_vcpu_has_el2(struct kvm_vcpu_init *init) +{ + unsigned long features = init->features[0]; + + return test_bit(KVM_ARM_VCPU_HAS_EL2, &features); +} + +static inline bool is_vcpu_nested(struct kvm_vcpu *vcpu) +{ + return vcpu->nested; +} + +#endif /* SELFTEST_NV_UTIL_H */ diff --git a/tools/testing/selftests/kvm/include/arm64/vgic.h b/tools/testing/selftests/kvm/include/arm64/vgic.h index c481d0c00a5d..46142fa36199 100644 --- a/tools/testing/selftests/kvm/include/arm64/vgic.h +++ b/tools/testing/selftests/kvm/include/arm64/vgic.h @@ -17,6 +17,7 @@ index) int vgic_v3_setup(struct kvm_vm *vm, unsigned int nr_vcpus, uint32_t nr_irqs); +void vgic_v3_close(int gic_fd); #define VGIC_MAX_RESERVED 1023 diff --git a/tools/testing/selftests/kvm/include/kvm_util.h b/tools/testing/selftests/kvm/include/kvm_util.h index 373912464fb4..9b26b9124dc3 100644 --- a/tools/testing/selftests/kvm/include/kvm_util.h +++ b/tools/testing/selftests/kvm/include/kvm_util.h @@ -65,6 +65,9 @@ struct kvm_vcpu { struct kvm_dirty_gfn *dirty_gfns; uint32_t fetch_index; uint32_t dirty_gfns_count; +#ifdef __aarch64__ + bool nested; +#endif }; struct userspace_mem_regions { diff --git a/tools/testing/selftests/kvm/lib/arm64/nv.c b/tools/testing/selftests/kvm/lib/arm64/nv.c new file mode 100644 index 000000000000..e930808a7ed4 --- /dev/null +++ b/tools/testing/selftests/kvm/lib/arm64/nv.c @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025 Ampere Computing LLC + */ + +#include +#include + +#include "guest_modes.h" +#include "kvm_util.h" +#include "nv_util.h" +#include "processor.h" + +struct kvm_vm *__nv_vm_create_with_vcpus_gic(struct vm_shape shape, uint32_t nr_vcpus, + struct kvm_vcpu **vcpus, uint64_t extra_mem_pages, int *gic_fd, void *guest_code) +{ + struct kvm_vcpu_init init; + struct kvm_vm *vm; + int i; + + TEST_REQUIRE(kvm_has_cap(KVM_CAP_ARM_EL2)); + + vm = __vm_create(shape, nr_vcpus, extra_mem_pages); + vm_ioctl(vm, KVM_ARM_PREFERRED_TARGET, &init); + init_vcpu_nested(&init); + + for (i = 0; i < nr_vcpus; ++i) { + vcpus[i] = aarch64_vcpu_add(vm, i, &init, guest_code); + __TEST_REQUIRE(is_vcpu_nested(vcpus[i]), "Failed to Enable NV"); + } + + /* vgic is not created, If gic_fd argument is NULL */ + if (gic_fd) { + *gic_fd = vgic_v3_setup(vm, nr_vcpus, 64); + __TEST_REQUIRE(*gic_fd >= 0, "Failed to create vgic-v3"); + } + + return vm; +} + +struct kvm_vm *nv_vm_create_with_vcpus_gic(uint32_t nr_vcpus, + struct kvm_vcpu **vcpus, int *gic_fd, void *guest_code) +{ + return __nv_vm_create_with_vcpus_gic(VM_SHAPE_DEFAULT, + nr_vcpus, vcpus, 0, gic_fd, guest_code); +} diff --git a/tools/testing/selftests/kvm/lib/arm64/processor.c b/tools/testing/selftests/kvm/lib/arm64/processor.c index 7ba3aa3755f3..6e759981bf9e 100644 --- a/tools/testing/selftests/kvm/lib/arm64/processor.c +++ b/tools/testing/selftests/kvm/lib/arm64/processor.c @@ -10,6 +10,7 @@ #include "guest_modes.h" #include "kvm_util.h" +#include "nv_util.h" #include "processor.h" #include "ucall_common.h" @@ -258,14 +259,49 @@ void virt_arch_dump(FILE *stream, struct kvm_vm *vm, uint8_t indent) } } +static void aarch64_vcpu_set_reg(struct kvm_vcpu *vcpu, uint64_t sctlr_el1, + uint64_t tcr_el1, uint64_t ttbr0_el1) +{ + uint64_t fpen; + + /* + * Enable FP/ASIMD to avoid trapping when accessing Q0-Q15 + * registers, which the variable argument list macros do. + */ + fpen = 3 << 20; + + if (is_vcpu_nested(vcpu)) { + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_CPTR_EL2), fpen); + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_SCTLR_EL2), sctlr_el1); + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TCR_EL2), tcr_el1); + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_MAIR_EL2), DEFAULT_MAIR_EL1); + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TTBR0_EL2), ttbr0_el1); + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_HCR_EL2), HCR_EL2_NV_EANBLE); + } else { + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_CPACR_EL1), fpen); + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_SCTLR_EL1), sctlr_el1); + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TCR_EL1), tcr_el1); + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_MAIR_EL1), DEFAULT_MAIR_EL1); + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TTBR0_EL1), ttbr0_el1); + + } + + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TPIDR_EL1), vcpu->id); +} + void aarch64_vcpu_setup(struct kvm_vcpu *vcpu, struct kvm_vcpu_init *init) { struct kvm_vcpu_init default_init = { .target = -1, }; struct kvm_vm *vm = vcpu->vm; uint64_t sctlr_el1, tcr_el1, ttbr0_el1; - if (!init) + if (!init) { init = &default_init; + } else { + /* Is this vcpu a Guest-Hypersior */ + if (kvm_arm_vcpu_has_el2(init)) + vcpu->nested = true; + } if (init->target == -1) { struct kvm_vcpu_init preferred; @@ -275,12 +311,6 @@ void aarch64_vcpu_setup(struct kvm_vcpu *vcpu, struct kvm_vcpu_init *init) vcpu_ioctl(vcpu, KVM_ARM_VCPU_INIT, init); - /* - * Enable FP/ASIMD to avoid trapping when accessing Q0-Q15 - * registers, which the variable argument list macros do. - */ - vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_CPACR_EL1), 3 << 20); - sctlr_el1 = vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_SCTLR_EL1)); tcr_el1 = vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TCR_EL1)); @@ -349,11 +379,7 @@ void aarch64_vcpu_setup(struct kvm_vcpu *vcpu, struct kvm_vcpu_init *init) if (use_lpa2_pte_format(vm)) tcr_el1 |= (1ul << 59) /* DS */; - vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_SCTLR_EL1), sctlr_el1); - vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TCR_EL1), tcr_el1); - vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_MAIR_EL1), DEFAULT_MAIR_EL1); - vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TTBR0_EL1), ttbr0_el1); - vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_TPIDR_EL1), vcpu->id); + aarch64_vcpu_set_reg(vcpu, sctlr_el1, tcr_el1, ttbr0_el1); } void vcpu_arch_dump(FILE *stream, struct kvm_vcpu *vcpu, uint8_t indent) @@ -387,7 +413,11 @@ static struct kvm_vcpu *__aarch64_vcpu_add(struct kvm_vm *vm, uint32_t vcpu_id, aarch64_vcpu_setup(vcpu, init); - vcpu_set_reg(vcpu, ARM64_CORE_REG(sp_el1), stack_vaddr + stack_size); + if (is_vcpu_nested(vcpu)) + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_SP_EL2), stack_vaddr + stack_size); + else + vcpu_set_reg(vcpu, ARM64_CORE_REG(sp_el1), stack_vaddr + stack_size); + return vcpu; } @@ -457,7 +487,10 @@ void vcpu_init_descriptor_tables(struct kvm_vcpu *vcpu) { extern char vectors; - vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_VBAR_EL1), (uint64_t)&vectors); + if (is_vcpu_nested(vcpu)) + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_VBAR_EL2), (uint64_t)&vectors); + else + vcpu_set_reg(vcpu, KVM_ARM64_SYS_REG(SYS_VBAR_EL1), (uint64_t)&vectors); } void route_exception(struct ex_regs *regs, int vector) diff --git a/tools/testing/selftests/kvm/lib/arm64/vgic.c b/tools/testing/selftests/kvm/lib/arm64/vgic.c index 4427f43f73ea..67822b803d0f 100644 --- a/tools/testing/selftests/kvm/lib/arm64/vgic.c +++ b/tools/testing/selftests/kvm/lib/arm64/vgic.c @@ -79,6 +79,14 @@ int vgic_v3_setup(struct kvm_vm *vm, unsigned int nr_vcpus, uint32_t nr_irqs) return gic_fd; } +void vgic_v3_close(int gic_fd) +{ + if (gic_fd < 0) + return; + + close(gic_fd); +} + /* should only work for level sensitive interrupts */ int _kvm_irq_set_level_info(int gic_fd, uint32_t intid, int level) { From patchwork Mon May 12 10:52:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ganapatrao Kulkarni X-Patchwork-Id: 889561 Received: from CY4PR02CU008.outbound.protection.outlook.com (mail-westcentralusazon11021077.outbound.protection.outlook.com [40.93.199.77]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DB8EE26980D; Mon, 12 May 2025 10:53:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.199.77 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747047205; cv=fail; b=MEHf1ouJFagmJ/SEYvBK2xzqjJy0xDK1QK+EIpY7LQajTccimQ85gD6XDgQxwEhVxnZZ2xdBy9FwkrqpIOG/4Of82+zhNWDWJQHMpK8pT8NdnvZqxTh2rjL41OKu6uyzvYSYbhXaYKXW5L5d6BZBsSUYWEASkXZT/BhuxXjZAUQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747047205; c=relaxed/simple; bh=8pyN3xhUrgPbiNRBOsbz4VSme9JPlz89TfWNVXRK4qs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=SGz1a2Y9vkqaozxjGxbrm8kH+4xIL4Gf0hAzUc50Ol8DqzIMtcPsaacNuZwqkdLj4D4Xc99cb8Cp6mAcCnMu8WJlqbcY20SFlHW3fNIpbfIqeTd1Kekqx+CaRKN4Zuzb9ghIlXIUggdm3YHlvRvFeGJ+Z7WpXroBTCcl/xf/VHA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com; spf=pass smtp.mailfrom=os.amperecomputing.com; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b=AUWjwx8y; arc=fail smtp.client-ip=40.93.199.77 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b="AUWjwx8y" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bAe9WlWb9sEUd/6Ed6lsZFyp+Mp/K89Iwg8FKN09z9b/HGNT1el56vH349iNz1dHKDr74nE/YnglxVVCQf0ZMgXJRSPEjnVJyoYAOYpXL1sEYaCyH6G99u7FL1FdYErFC9uf2oNlrm+nVbQdZhyGPohn4QORLTCeQFH3q5Mtvd2+jdNrBO0lnfOV1/8YWlt3RmYItUj6JgNmPgGOReB50POERGgXoSjzo3yAegCd2pfFix+GKkLxev6/k/JDIzsxgVfHRKa5CD6ScPTvvGxUa59cxYeN3pbsExDCpfgROfZOMRv6VZPjjhEFlOm8txLf2e9koEnU/SZJWgvBGhlBfA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=DBGjDq+iTFpbCnHpzIR6cfAygnnj3gyIGicnsIkElF4=; b=tDKAPWDsn5im7YEA8fCKXM9PmsjiN7Gd7OxQNXDN2gkEVVFpYqTxYshvbVycfyyxuum4IxHyq8W+snftVFBY4PO/FNnj1Dy+pVrN226U7ioUnBgyQqtAzPLSX0Ngot5gBT3wKl+rzBGyCULPiRS59HUvjx5BxDFJ+DN23GQJ+nBmiT8sxLWvN15r1MEB7+vt5P3uw/rb3s8QcIoR0/Cb7e0JJWBwekHLSWeHKEXtzb5oOgn/dwCL7suCp2QjGl4oxY03E0Wgntfw9PInYbeHi1qbv4ASi7+tZbYUR8AiDsxhRe/OposVXSey0VS9SjNQloHcXKjNKzN6kjuDGQWhng== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DBGjDq+iTFpbCnHpzIR6cfAygnnj3gyIGicnsIkElF4=; b=AUWjwx8yoxb+ECl80su506B/OU5H39Hs2QGJ5wVzRzH/+VQKYqql+O/zNx2PxBKN+gNcAY2RXqJoA4mzmx7T6m8AoJSMA7X2Zehs4vJKDSV3uOzNpzIoqUrIpsfQuekjmNUvDEn1cPUoJUsqvy2RFZMtzppalvjcHGDJYHrc/Wg= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SJ2PR01MB8101.prod.exchangelabs.com (2603:10b6:a03:4f6::10) by CH0PR01MB6907.prod.exchangelabs.com (2603:10b6:610:104::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8722.28; Mon, 12 May 2025 10:53:15 +0000 Received: from SJ2PR01MB8101.prod.exchangelabs.com ([fe80::292:6d9c:eb9a:95c9]) by SJ2PR01MB8101.prod.exchangelabs.com ([fe80::292:6d9c:eb9a:95c9%6]) with mapi id 15.20.8722.027; Mon, 12 May 2025 10:53:15 +0000 From: Ganapatrao Kulkarni To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Cc: maz@kernel.org, oliver.upton@linux.dev, joey.gouly@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com, seanjc@google.com, darren@os.amperecomputing.com, gankulkarni@os.amperecomputing.com Subject: [RFC PATCH v2 2/9] KVM: arm64: nv: selftests: Add simple test to run guest code in vEL2 Date: Mon, 12 May 2025 03:52:44 -0700 Message-ID: <20250512105251.577874-3-gankulkarni@os.amperecomputing.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250512105251.577874-1-gankulkarni@os.amperecomputing.com> References: <20250512105251.577874-1-gankulkarni@os.amperecomputing.com> X-ClientProxiedBy: CY8PR19CA0043.namprd19.prod.outlook.com (2603:10b6:930:6::14) To SJ2PR01MB8101.prod.exchangelabs.com (2603:10b6:a03:4f6::10) Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ2PR01MB8101:EE_|CH0PR01MB6907:EE_ X-MS-Office365-Filtering-Correlation-Id: 6bb7d663-64c5-48de-8595-08dd91433257 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|52116014|7416014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: ErjqQ1saAwv+XUqHv89U3dM4BeU04XS+/gY0TPUK6q5Ryh0A7tXG15YdJ8mtHhXywutdV2Qt3qQrfntRNVhOG/GRmw61syjc0jV0U7WojT6VAa3pPyU/LKfBeLA6xGufrKsgFKjSmope62x3lFiG4/VJs7k6vm6UclU2g06U3QPLBOstqQff0eizfzkMQEPWXnMAqbJG3EcP6+GUfQ5QbhiFxH0BWi2/50n7o02ukAnogIsIFtQ6LWr5m18PYkeZaqo48NiBwBSN8R23j4w/2zs2AWEaB+BoCyXAiuQsRwbt6yNK/MFRX7hxGDlIKNMz+CuAsRwhmgLkdJZk//r5x/is8q9SPUkAuRUk0wDqRCx5sMYhueVaCdAFEJzJO0DzcaXljYghsEZLMgAPYLmKydMKrRW2WfuwIEC9pbHp1xmNKe6IHWB02NDwLWgqPPyUHs57J0nKb1BapO1BlcQX5u0b673nW2ffy0XurRgzuiPZrRYPl4OQCtQHdCoJrpbtEBZc/H2eOBya7ZDpuQXUrq7D+OCg0p4BJWhp2vfV+rye9a4dEYPNeXlbaDB7SFi7b1tOxQNNwKzam45iKVb9JubQm+FRmWdFrwbGWArnlNSkcDCZaXgrofcuLpKttQXZ9r8nVZ/92T1rcbj9VJUT26rEyX1hxyxBFZJy/Ixuu43DEXhJHt+WP1AMdX2pFMmDwrdW4ojrxSxgvcCtEwnDIKim6n/5w6WOI9CA91TaF+VRqYYCEe9JdNA+wGna2iCbLYQSO4vTG4WJKqO4ZE14PTxXZZ1XD22tGCFVjxCe6eEz6lkMd4Ra1rczwJEcnJPdIiRVpYDd/LlJ9kr/SdWnpqf0NCyAJXBaf+yzjiNba4uHMNRzlUSnymoBHstLUf+vHwcf4NOqM3QPMYW8w5B+u765plKHasXyqgAam1BUy4rlOcvs1+dHNxFLtaBz62u+1gmjvFh10n85fTG599u7d8UnDmmAJJ0YqOUF+HiNAC3LcxNla2AigSBxKYhr4gvuEYfEiIldmbzDbEQSbzqS4LZjcr+WMITqxJvWBO6MIBANQjTDMnxcgjwYNzY/PmGvG/Tm1fEkO3Jm4DFMS9oMdiaMu1dIq3/5QhTGCtLUrkQLIApr7izZ/NN5JyAcDz0Vc6dMLcfzJy+CWamRp49QvkEiPP4T/lMTNKCbtxZiOQceFJuZEvkGo6iG7D9GBVxyAs6d8W98Iu3nDANOf/QfLhA+eDbBpsXYZEASLYvqTPese0ctw/LTJqau88/r0OKUsYTn92giXmi1j6D2NFMmHZpZQiPAb+Y+kpHByw+ABNyJQPdIAPFycJIz2e0a4OPPOvsYM0/WPsNZuPZ69vgyjYWa/Vder84EC6zsj5rAGv4RjCkPvM6dnapvNbQTyOKy07997/RT78qwYNB4hUpJp/xfbhCtMPOBqZm5D9cgsacuqUaOggocoPBL3TjIjCmfp0zR7fdWNiwJ5g94dmZ3BQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ2PR01MB8101.prod.exchangelabs.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(52116014)(7416014)(366016)(1800799024)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: LT0ocTRzX9Z4dIMu0B7Tz1Blpi8WMeVDHgRcLs5j2yAWBOYantVnqmIL+iurFkR/kbZ+Zi48hHkIy+ASX+J6bDaAxgvEbfoEQP9TGU8nemwhnj5AyBxBiujzKqIcaM9nM3Or6FjYxKwAWulbSHGnaIrT8nVvOIGxUzRWxKj03tm63EjQwAAbVg3saMP3JVpI81EP0hj4uty9xGSZujxntY630qwJQCDjGoXrBcmk/NfTImP0bVxpPF97inNJtQcuLhuCWDhjhNUS4XsTWSlt+tdA5e6K4GBhVQ7+QS3ipN2EYLJEwezGbL7ch4E1/6H+Gw+Wfq1qeEwUA+/OMHwPQrZEIYWEEmApJ6AnvVebFl8eJU449QPRyoHColbYeIK8hYpWivyxfyiz8XTutQoobirepwTM2MY5XTL53H2LCKP4PCPFh012vaNy/vFP6Je+LoXwa7+HF4aT37HRD6Uveif5YPkfNBgWAnC7l2Ffc2ghF0n2VjmUgm/mC/s/KAgCiKx37HoeBK7VYW4JQs7kFDoLRweCexH+Xy2oXoQWMO19V3by0cCnVWSh2No20VwrG9Zf1/OrYbBodvW0zKySrD6NXa/1/KR5+M8Bn25iuU82MFO7FAo8VlS7ZupYXm2NuRNe1fdesX/XSe+aeIU3WsQ0roZnXJdyNctDzI/OBPHOMx3Mjaiy8bAlVHDXYVEcb/jOnIdYY39aaPzeYxZkcqZTHDI9uzZZDpRvYPN2dK+/sVcjFpJRC1vaKgGVENhA4JcpxBXamrKVOxxeX5gzbepKcTqpswe3HaniHkmBqxNUNwnFb9pRyOQsmuWjpKHIK+93zn5HGqTOa5d9Ohuhr+kPFoQX7vW8J+KjYzQC5QnZK6wx8otsrGh2c8WWDlm7VNLPneUj3e0OSEplMH41sQFZ9bLEdyeL+xeIkGDVgwWKaFY+moC21ZpKTdc8WSzvyIt/DZn15WY9QaF59iuzDWv3qLTzEIOuvx18HuUvwv5P4E4a2L21LIoZdLniXK59KWhBsipDld3ekz8ucA61Pli/adQwFVOqDTQiPsx5CB0BaIiqQdqt+4Ry4so99EJwW9Qwai2U4UIDBuvJyttJiNuWTTrt0KjME49QAgeImj1+mL/N+fa98neHyK80ZjYLnSUoVPi4CNxpUJnvib1BybPXRFby0hORstHjVZK1UNH9zoeP0LXXc6QiLpyFandlCpt2Ms/ukZfb+ek7FNZdSk0/+ggD41y05n0H5RZSeEzaN6dDslBniTdWdxP9Dl8CKyeJrjAY4NoP+jX2w9uboT7w161cPIWmsDpNAIOaLKWeZRQstLjeAXNErvKGVDJ8h2YSecoJklPJ75Qi0P38sWfPDhaCGkuM8r17xwey02HMVwxRDY+x31gK6x2wcc/0ROOm3+N1J27CNU8y3ytK/H0j1jDNIvX1u10bL0YhFUM6MOJFYfKIjzlQtrA8BvSD6bbSvmw0ndS/kYh2i5rpSJyPEIG66NRLv6/LJi9b/kuM5QbF1yrQF5Os9Kmoii4lfoNm5rEMmLcP09Il3qgXzsHTRj5j8joxSWckdNs0DZwTbzK/ULG74/Vsh3CAecafqIP2ZEfdjJ3mVFyDhlkYnJLEH++J/NFcfsJY4SCCSeROCSkAWdL9G3OcA6TG8pUm X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6bb7d663-64c5-48de-8595-08dd91433257 X-MS-Exchange-CrossTenant-AuthSource: SJ2PR01MB8101.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 May 2025 10:53:15.1011 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: BxA61k21+1gHv27fnq74mcSM8bYUcwBdSa5ewiHvwBW9HCkFsTPQHDeyxaBpAvp14CwAA1nK8BtqDgR6UEG5HAoVk1AYANRVVqR2cDXdj6FuXsViCLhC9CYi7NtrvWAt X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR01MB6907 Add simple test to run guest code with NV enabled. With NV enabled, guest code runs in vEL2 context. Signed-off-by: Ganapatrao Kulkarni --- .../selftests/kvm/arm64/nv_guest_hypervisor.c | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 tools/testing/selftests/kvm/arm64/nv_guest_hypervisor.c diff --git a/tools/testing/selftests/kvm/arm64/nv_guest_hypervisor.c b/tools/testing/selftests/kvm/arm64/nv_guest_hypervisor.c new file mode 100644 index 000000000000..7d7b3944e229 --- /dev/null +++ b/tools/testing/selftests/kvm/arm64/nv_guest_hypervisor.c @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) 2025 Ampere Computing LLC + */ +#include +#include +#include + +static void guest_code(void) +{ + if (read_sysreg(CurrentEL) == CurrentEL_EL2) + GUEST_PRINTF("Test PASS\n"); + else + GUEST_FAIL("Fail to run in vEL2\n"); + + GUEST_DONE(); +} + +static void guest_undef_handler(struct ex_regs *regs) +{ + GUEST_FAIL("Unexpected exception far_el1 = 0x%lx", read_sysreg(far_el1)); +} + +static void test_run_vcpu(struct kvm_vcpu *vcpu) +{ + struct ucall uc; + + do { + vcpu_run(vcpu); + + switch (get_ucall(vcpu, &uc)) { + case UCALL_ABORT: + REPORT_GUEST_ASSERT(uc); + break; + case UCALL_PRINTF: + printf("%s", uc.buffer); + break; + case UCALL_DONE: + break; + default: + TEST_FAIL("Unknown ucall %lu", uc.cmd); + } + } while (uc.cmd != UCALL_DONE); +} + +static void test_nv_guest_hypervisor(void) +{ + struct kvm_vcpu *vcpu; + struct kvm_vm *vm; + int gic_fd = -1; + + vm = nv_vm_create_with_vcpus_gic(1, &vcpu, &gic_fd, guest_code); + vm_init_descriptor_tables(vm); + vcpu_init_descriptor_tables(vcpu); + vm_install_sync_handler(vm, VECTOR_SYNC_CURRENT, + ESR_ELx_EC_UNKNOWN, guest_undef_handler); + + test_run_vcpu(vcpu); + + vgic_v3_close(gic_fd); + kvm_vm_free(vm); +} + +int main(int argc, char *argv[]) +{ + test_nv_guest_hypervisor(); + return 0; +} From patchwork Mon May 12 10:52:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ganapatrao Kulkarni X-Patchwork-Id: 889560 Received: from CY4PR02CU008.outbound.protection.outlook.com (mail-westcentralusazon11021077.outbound.protection.outlook.com [40.93.199.77]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CD91E269CE4; Mon, 12 May 2025 10:53:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.199.77 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747047207; cv=fail; b=NxGeMIRxgGH/JIm4sbgDesujriBlcba98tpOihkh6qdHTJDo/fZs4uPvoyqZ9sifWPO4t06tp0etsHCk76TSxTXC7bCM+ekkxJPHrS1LS3rLPYPhSYxC8HzHr7a+wAkR1orv+YYppaDXjy4qmEvuDuNgELuJH2+1u184uWUMo7g= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747047207; c=relaxed/simple; bh=LA22jueyCOOUtnysIxG2Nx5UMfm2f5ICarzIidgAvz4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=bji/W5yETwf4bygFXsmaZwizpcTQM1TzZKrE0k2iJg6G6VKtAzpxXyoHVExFXSYuu+jyXN3U3mvjxrbbcIr1zlXxEXCs3hxDQIVFQ1LN7fAM1YQ6Ce90Uy+tlHvTt08s4wHmTYJUyY+fU01WUrPTp3qkoJwNkOd0NrnpOQQFOCQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com; spf=pass smtp.mailfrom=os.amperecomputing.com; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b=mbjZLemN; arc=fail smtp.client-ip=40.93.199.77 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b="mbjZLemN" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=s+fOikKkZpWqPkAgCeMFNg71gXqsJIUoPwgLMaP0x5lXHB5tbrhvbZgYA2qTKbu3SD1MKN3tVOl4tEGSQCfV7cpVq7wT5HlmQbzmy04tbLFXwyrIh6RpzLkw5G7Ym/Hi//uoRoRat1044lqfH37k/hNIUJXbEAucqsnRFLMV9HqKHCegs8Ccp5xzT0pP9rwc+rJqMatWf3cngfC8Gq3RcIJ0OQdoS9cai2ZF9++Rla3WSaT5y7aT/uvITINmvxEP7Ppb8jPRnYLE6N9IxKWOfvHm31D98v6msJCv+L1VNcaGxLmeRZOKjk+bGf+9X3s5JR+VyuNyokRTukt3vCSLnQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=U53OQ2ViFDKLIeFGVQDN/pm8Ynh2gt8FPvIs9yGts1I=; b=H6hGUm+27lDubj/r/l41XSk+JTwoSH36RbWXFjPOJKHw7ZbsQJnqAdQtDnPHM8+w9poDoTlmMW/UR9AhaiIK2B/F5KoL8yjyXXO0yW2B/R++3L4/HHF3gsEBAXcNO7RxTL/ToMPqRyU/SRKPORXw5gmw84l+QSmyH/bRLCQxZnvGhoI5maQu4E8owdbq80tM5X1iu4rOmrp4RbAvpRgzyMQWpydhC9w9uinUYrY5fxH3r220MZc0lEG0UwoneF7KzY1UWMrwy5qEUKgUKwuYCYnmkmh+qviBJY9bP8mTbWbcM8LcG0+7DdMpmbRkigypfnvjypXbbPnV0uIWz3RNGg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=U53OQ2ViFDKLIeFGVQDN/pm8Ynh2gt8FPvIs9yGts1I=; b=mbjZLemN+cYziMtuIZm4Nj7Oi4rLOLeFaVRlQNouiva1tWvLgVVk0bz3lzV3zQKA24iA1ivWe2EayNF49JaHjz6jw6OfTVgwc6BkapgKkQRxvQgv66lL0yw0J4DIAnLT36O4LWuUsTjk6Q6C6h4WTFSCPDyaNJ33Jdea8JvPDxE= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SJ2PR01MB8101.prod.exchangelabs.com (2603:10b6:a03:4f6::10) by CH0PR01MB6907.prod.exchangelabs.com (2603:10b6:610:104::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8722.28; Mon, 12 May 2025 10:53:18 +0000 Received: from SJ2PR01MB8101.prod.exchangelabs.com ([fe80::292:6d9c:eb9a:95c9]) by SJ2PR01MB8101.prod.exchangelabs.com ([fe80::292:6d9c:eb9a:95c9%6]) with mapi id 15.20.8722.027; Mon, 12 May 2025 10:53:18 +0000 From: Ganapatrao Kulkarni To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Cc: maz@kernel.org, oliver.upton@linux.dev, joey.gouly@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com, seanjc@google.com, darren@os.amperecomputing.com, gankulkarni@os.amperecomputing.com Subject: [RFC PATCH v2 5/9] KVM: arm64: nv: selftests: Enable vgic tests to run in vEL2 Date: Mon, 12 May 2025 03:52:47 -0700 Message-ID: <20250512105251.577874-6-gankulkarni@os.amperecomputing.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250512105251.577874-1-gankulkarni@os.amperecomputing.com> References: <20250512105251.577874-1-gankulkarni@os.amperecomputing.com> X-ClientProxiedBy: CY8PR19CA0043.namprd19.prod.outlook.com (2603:10b6:930:6::14) To SJ2PR01MB8101.prod.exchangelabs.com (2603:10b6:a03:4f6::10) Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ2PR01MB8101:EE_|CH0PR01MB6907:EE_ X-MS-Office365-Filtering-Correlation-Id: 45640861-d418-4efc-cbb7-08dd91433418 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|52116014|7416014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: 2vonA/bDIVxYialnSuopx+hlQKfacsxseyWvbwZD0y9h+qWOe3mZI0VpwZlgW37dP/F7k5L9O+fe86f5eQCI+NQr+hd6pvSehtNGUkaDG682qxHhB4UU/0CN/yatMkdG3rPamkIoB//VshEj+wvdf00CKYqHbbIbQ3AQ4zfNE4FO0kEhTNtnl5Vaz4xZBzUHMKWoPwlRllau1qUg1FQP9m2XqM0hZChmJC+2iii0pt1s01xeGhXKA8cQ9CbR+Q60ubiFZ6vqqgpO6FgLkLmFy1X+7ZOd269ud02yc18KMwGnsK/BlJPRsx+68Q8eejaczJepI2b5CpbY8tw4S/7yUouvt9K6UAL8/oLUDl2SjWEyS3VSWttMw7IBMIiKY+cKj9jQUDrcyF1JFfItx5dO00YUBC5s1IH8d1JH3JUR5lhkTEYyctwBhJXwezxgtHrnFt6F3IVpNfTaV0nijGyiPNWwg32Lns179l53RO1Wp9Is86aUE8VpDkrkoglZsPafkHywub5NnJLLoibrhtnfUJcEABYewrVUwy34JEz6G13rPG3Nr1b2nIlJ3XflEx2dXznbvNOXAD0v1BJTs2MIhIjNaQ1D+sXA/y7ejI4HkRtkeO9FS3wYjN58PZ/KmW2M6r7dfs/jmsQvtujzHNxBdRN9M74RTgTgD/oP+4TL9pMC2ioh0Xq07mP5snhjrLXAnj+ZBrCjYm0bBJDszYcJeZKbpej8kFm8eH+7T/cIDqfRXNBQmImphUO8biTk7kTkdLrSKkCQgzBAdaepWsXN1WdvdLSNnqYVjp8TXuBlbj8WhCOWEE2R/oBUdA7PyUj5dMttBCRoCAAp2oE2MY2b6zicr7gXsFVyEp+tjOnKlmTfROWgeS0hlPMkle3vXXWH52w0z4fSjWCg+i7+f7h3u83SD9Gu7zPQERyRPxK7SCvAmeBucpTNTLqbshfVxLZ1R33bbbMX4eoZEW+VbPBNH3E+u6I6QCDkUmjZh0tKdUwe+GII6y3fiAEQTu8H0HvLMuqazt9zORO9sg9jJrk8lNVSiJcKwWYM/7r+Z6qYrbLakyh7rESfMXVdZkHrE3zYs8lYo89fOXbknAUQrMIlEx0vZYv6x9W6QV2tqOw1QPtOm8c5XvKrRMS8PxZ3+vFecKwbRsUw1/q+HCPzDqMa1zgLNk1ncwAMyv3f05BN3Q0Q6DQW25d7j55W+lJVcfWcyCTb7phGyTeJ1+X+/mQLU2ywoEJJckAnAu1Y+PeWYJfz82JmlgR9npY5F8+9EqIRy2iCUH9mGBWLr1wzFAAaMURR0XWad6XUCGQjkFTFJgoCwGNHyEKSbBt402XdiUykJ3NOkt9js0W8eUdKYgK/PljlEx7UwqXRiEwVo/Zvc/c21J8//uuNCalmmshICBsOZ3go4F9fxyA8w2J+llDtc295NzReDzvYg3mkUslSc1WGS6/dhglegldmZiT/YJnZc656KMLgbJ9g7es2GNgAGA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ2PR01MB8101.prod.exchangelabs.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(52116014)(7416014)(366016)(1800799024)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: oPm12ROWuNfKTeLRlbdi/HDXXglY41L0L5VyJYSUbbqJfIb2zyL5Sy+kHzLhWVtRLGhyivM2VcAZ9cL3+UETdO/PwFrMYLNsnRWbU0Roe2mVryAjtOcZEMEZpt4JvHNjY+bOPOxhyPcWughxZ1YXBDEqvLFk4mYOnWBx50za0RxAOxT2dKl0on+OlRHhaGfV9mgI3N4J+Bzc5tLmGnadR60ghuPdnCZu/MH5shg+FHWUh9qMJXVJVG6c+NMpJoalE55YrDp6wUlxgtNcKzfWEUQ+KHFS2cqX7EiPXoS9fuqqqjv90lyzEUb3ldlz84ltJjxYCd3fSKwoPBMgThMvn+36vQZPduOE9MuVBIFo0kG0b3Gv46UmvnhzmTh9uiy3Kj5Lg3JXJf5XtRRpMBFobqBlZUeJCx9YkAI7z4IiQvmHmBxEe/OOam9AcBE0qreuVs4rMyqVFEKMeVEvVWw6HPw9jrquQzf+G7ngAkVERNT0LEcdttYNUORfAGZ9P8DNw4UkOlHKK6pdcOeSCfEAQfA8+yJokjIG4XNtvoNQkz3NQG1uD/bVNJV6ncq7kSy+2OD+vQ1pVkl0ysSxHmMHxLgNjVuSrvoLV7MjQKXKMMeYt+OSrR9JCuPA1Ibwi+eciSkJ6+wD/pGKqvxWaJr3v3kUw5IohSG4sIdb+Fx8CD1+63g85wXDH5EAUMpZHo0LH0c2g4JuYzbFx4OR3xj+y3ZqLF+I77COkmj/tRlUh2HOx1lROHTL1C5Jxyj1iU8otvnbSNf1Llt0EUU6g4/4lj3WoikddpWFBcuY6M3ApjkyaLBO5HzcaMt2evBACIT2xlVt9NL2eA8anS4qJssIBAZFes5fjIVajNolQWnDWvFKDafPENJoQPmp1+SOAZEtygqmLWIrjvEZysiWo1n4I7FRujJch5ymibC76TWLPBtVpRt27gxOQt2rS71yZupyFuL261kHXiV11xixRUAA7gtd/z8tIat5aLimcWM3RpsXXQQF8vrQID6WXI2+d000SWsgc3/QalRh6x4p3MO/VFieGCPPlpHwNH+w33B+oPNi72mlvuw7a6utlcpA2NkjjCaUSOsO8SpPlNbnF4IfiGpHIRVWoDYPJHYQliQUphsUoZCaEj9YB9li780II63XPeOc5HnqEnkT0hlQOESQkbJMDBpa0S3eUGHMJmkJSubB0gYMzAEcUJBjIJQ/S2rGnGJYSEtVXYAeTwqetDDn2dmFHDEypVpX562b1f1pypqAM8J63NI5yTttMcBrYqd0akSK3oCMtD4u4V0EbL+wY+GmUvDcXIDibWuzd7YR7Y7IgQYOb7E7k2InbDsjR8j+i8PaQcT1oi9V9IQLsPLZ12ApN7feNmWsBZf9iENGbddMwHvBGnopvqvqudmBGG1XqrI/KP0qYxGGcvzgzRwRNLSagfLsStYDa7w5e7ALIcIoYhwLMRCYxX0GVJyFucAfzQ2JgiGDDZAXkgYG2N1xk+ezBTM4V92WJIkohOnSHq0Wj9zO4QcYJFWiS/9B0MGk2flPyhwZZeI3tc8PR8m8zEgeJRGQeWUMWX6s0hRbtXdwP0kOHXU7sIGM5SgPNBw8FNKDMiMZsB+Szm97GljWrAVN0eNETMML3/GJYvMx+tSSd9/LFBICBcZi/5zdDbLs X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 45640861-d418-4efc-cbb7-08dd91433418 X-MS-Exchange-CrossTenant-AuthSource: SJ2PR01MB8101.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 May 2025 10:53:18.0767 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: GZ8kZNNcSO9hubBX9LJFGhpdmpTAUuLHWarwLjw4OZYSHhBsotWla5iGFYHvZ3nuPFdQtP0n1vSmpYBKCGLUj02wQgILIn1Wz3OY+XAi1B708N7EbyX4I8WcXbbtmuhd X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR01MB6907 Extend the vgic_init, vgic_irq and vgic_lpi_stress to run with NV enabled(vEL2). NV enabled using command line argument and it is disabled by default. The NV mode is applicable to GICv3 tests only. Signed-off-by: Ganapatrao Kulkarni --- tools/testing/selftests/kvm/arm64/vgic_init.c | 54 +++++++++++++++++-- tools/testing/selftests/kvm/arm64/vgic_irq.c | 27 ++++++---- .../selftests/kvm/arm64/vgic_lpi_stress.c | 19 +++++-- 3 files changed, 83 insertions(+), 17 deletions(-) diff --git a/tools/testing/selftests/kvm/arm64/vgic_init.c b/tools/testing/selftests/kvm/arm64/vgic_init.c index b3b5fb0ff0a9..174350291c96 100644 --- a/tools/testing/selftests/kvm/arm64/vgic_init.c +++ b/tools/testing/selftests/kvm/arm64/vgic_init.c @@ -13,6 +13,7 @@ #include "kvm_util.h" #include "processor.h" #include "vgic.h" +#include "nv_util.h" #define NR_VCPUS 4 @@ -29,6 +30,7 @@ struct vm_gic { uint32_t gic_dev_type; }; +static bool is_nested; static uint64_t max_phys_size; /* @@ -75,9 +77,19 @@ static struct vm_gic vm_gic_create_with_vcpus(uint32_t gic_dev_type, struct kvm_vcpu *vcpus[]) { struct vm_gic v; + struct kvm_vcpu_init init; + int i; v.gic_dev_type = gic_dev_type; - v.vm = vm_create_with_vcpus(nr_vcpus, guest_code, vcpus); + + v.vm = vm_create(nr_vcpus); + vm_ioctl(v.vm, KVM_ARM_PREFERRED_TARGET, &init); + if (is_nested) + init_vcpu_nested(&init); + + for (i = 0; i < nr_vcpus; i++) + vcpus[i] = aarch64_vcpu_add(v.vm, i, &init, guest_code); + v.gic_fd = kvm_create_device(v.vm, gic_dev_type); return v; @@ -336,14 +348,19 @@ static void test_vgic_then_vcpus(uint32_t gic_dev_type) struct kvm_vcpu *vcpus[NR_VCPUS]; struct vm_gic v; int ret, i; + struct kvm_vcpu_init init; v = vm_gic_create_with_vcpus(gic_dev_type, 1, vcpus); subtest_dist_rdist(&v); /* Add the rest of the VCPUs */ + vm_ioctl(v.vm, KVM_ARM_PREFERRED_TARGET, &init); + if (is_nested) + init_vcpu_nested(&init); + for (i = 1; i < NR_VCPUS; ++i) - vcpus[i] = vm_vcpu_add(v.vm, i, guest_code); + vcpus[i] = aarch64_vcpu_add(v.vm, i, &init, guest_code); ret = run_vcpu(vcpus[3]); TEST_ASSERT(ret == -EINVAL, "dist/rdist overlap detected on 1st vcpu run"); @@ -606,6 +623,7 @@ static void test_v3_redist_ipa_range_check_at_vcpu_run(void) struct vm_gic v; int ret, i; uint64_t addr; + struct kvm_vcpu_init init; v = vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, 1, vcpus); @@ -619,8 +637,12 @@ static void test_v3_redist_ipa_range_check_at_vcpu_run(void) KVM_VGIC_V3_ADDR_TYPE_DIST, &addr); /* Add the rest of the VCPUs */ - for (i = 1; i < NR_VCPUS; ++i) - vcpus[i] = vm_vcpu_add(v.vm, i, guest_code); + vm_ioctl(v.vm, KVM_ARM_PREFERRED_TARGET, &init); + if (is_nested) + init_vcpu_nested(&init); + + for (i = 1; i < NR_VCPUS; i++) + vcpus[i] = aarch64_vcpu_add(v.vm, i, &init, guest_code); kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); @@ -733,11 +755,33 @@ void run_tests(uint32_t gic_dev_type) } } -int main(int ac, char **av) +static void pr_usage(const char *name) +{ + pr_info("%s [-g nv] -h\n", name); + pr_info(" -g:\tEnable Nested Virtualization, run guest code as guest hypervisor (default: Disabled)\n"); +} + +int main(int argc, char **argv) { int ret; int pa_bits; int cnt_impl = 0; + int opt; + + while ((opt = getopt(argc, argv, "g:")) != -1) { + switch (opt) { + case 'g': + is_nested = atoi_non_negative("Is Nested", optarg); + break; + case 'h': + default: + pr_usage(argv[0]); + return 1; + } + } + + if (is_nested) + TEST_REQUIRE(kvm_has_cap(KVM_CAP_ARM_EL2)); pa_bits = vm_guest_mode_params[VM_MODE_DEFAULT].pa_bits; max_phys_size = 1ULL << pa_bits; diff --git a/tools/testing/selftests/kvm/arm64/vgic_irq.c b/tools/testing/selftests/kvm/arm64/vgic_irq.c index f4ac28d53747..e4319f91f7cd 100644 --- a/tools/testing/selftests/kvm/arm64/vgic_irq.c +++ b/tools/testing/selftests/kvm/arm64/vgic_irq.c @@ -15,6 +15,7 @@ #include "processor.h" #include "test_util.h" #include "kvm_util.h" +#include "nv_util.h" #include "gic.h" #include "gic_v3.h" #include "vgic.h" @@ -728,7 +729,7 @@ static void print_args(struct test_args *args) args->eoi_split); } -static void test_vgic(uint32_t nr_irqs, bool level_sensitive, bool eoi_split) +static void test_vgic(uint32_t nr_irqs, bool level_sensitive, bool eoi_split, bool is_nested) { struct ucall uc; int gic_fd; @@ -747,7 +748,10 @@ static void test_vgic(uint32_t nr_irqs, bool level_sensitive, bool eoi_split) print_args(&args); - vm = vm_create_with_one_vcpu(&vcpu, guest_code); + if (is_nested) + vm = nv_vm_create_with_vcpus_gic(1, &vcpu, NULL, guest_code); + else + vm = vm_create_with_one_vcpu(&vcpu, guest_code); vm_init_descriptor_tables(vm); vcpu_init_descriptor_tables(vcpu); @@ -795,7 +799,8 @@ static void help(const char *name) "It has to be a multiple of 32 and between 64 and 1024.\n"); printf(" -e: if 1 then EOI is split into a write to DIR on top " "of writing EOI.\n"); - printf(" -l: specify whether the IRQs are level-sensitive (1) or not (0)."); + printf(" -l: specify whether the IRQs are level-sensitive (1) or not (0).\n"); + printf(" -g: Enable Nested Virtualization, run guest code as guest hypervisor (default: Disabled)\n"); puts(""); exit(1); } @@ -807,8 +812,9 @@ int main(int argc, char **argv) bool level_sensitive = false; int opt; bool eoi_split = false; + bool is_nested = false; - while ((opt = getopt(argc, argv, "hn:e:l:")) != -1) { + while ((opt = getopt(argc, argv, "hn:e:l:g:")) != -1) { switch (opt) { case 'n': nr_irqs = atoi_non_negative("Number of IRQs", optarg); @@ -823,6 +829,9 @@ int main(int argc, char **argv) level_sensitive = (bool)atoi_paranoid(optarg); default_args = false; break; + case 'g': + is_nested = atoi_non_negative("Is Nested", optarg); + break; case 'h': default: help(argv[0]); @@ -835,12 +844,12 @@ int main(int argc, char **argv) * combinations. */ if (default_args) { - test_vgic(nr_irqs, false /* level */, false /* eoi_split */); - test_vgic(nr_irqs, false /* level */, true /* eoi_split */); - test_vgic(nr_irqs, true /* level */, false /* eoi_split */); - test_vgic(nr_irqs, true /* level */, true /* eoi_split */); + test_vgic(nr_irqs, false /* level */, false /* eoi_split */, is_nested); + test_vgic(nr_irqs, false /* level */, true /* eoi_split */, is_nested); + test_vgic(nr_irqs, true /* level */, false /* eoi_split */, is_nested); + test_vgic(nr_irqs, true /* level */, true /* eoi_split */, is_nested); } else { - test_vgic(nr_irqs, level_sensitive, eoi_split); + test_vgic(nr_irqs, level_sensitive, eoi_split, is_nested); } return 0; diff --git a/tools/testing/selftests/kvm/arm64/vgic_lpi_stress.c b/tools/testing/selftests/kvm/arm64/vgic_lpi_stress.c index fc4fe52fb6f8..63de3903b2c8 100644 --- a/tools/testing/selftests/kvm/arm64/vgic_lpi_stress.c +++ b/tools/testing/selftests/kvm/arm64/vgic_lpi_stress.c @@ -11,6 +11,7 @@ #include #include "kvm_util.h" +#include "nv_util.h" #include "gic.h" #include "gic_v3.h" #include "gic_v3_its.h" @@ -43,10 +44,12 @@ static struct test_data { vm_paddr_t lpi_prop_table; vm_paddr_t lpi_pend_tables; + bool is_nested; } test_data = { .nr_cpus = 1, .nr_devices = 1, .nr_event_ids = 16, + .is_nested = false, }; static void guest_irq_handler(struct ex_regs *regs) @@ -333,14 +336,20 @@ static void run_test(void) static void setup_vm(void) { int i; + bool is_nested = test_data.is_nested; + u32 nr_cpus = test_data.nr_cpus; vcpus = malloc(test_data.nr_cpus * sizeof(struct kvm_vcpu)); TEST_ASSERT(vcpus, "Failed to allocate vCPU array"); - vm = vm_create_with_vcpus(test_data.nr_cpus, guest_code, vcpus); + + if (is_nested) + vm = nv_vm_create_with_vcpus_gic(nr_cpus, vcpus, NULL, guest_code); + else + vm = vm_create_with_vcpus(nr_cpus, guest_code, vcpus); vm_init_descriptor_tables(vm); - for (i = 0; i < test_data.nr_cpus; i++) + for (i = 0; i < nr_cpus; i++) vcpu_init_descriptor_tables(vcpus[i]); vm_install_exception_handler(vm, VECTOR_IRQ_CURRENT, guest_irq_handler); @@ -367,6 +376,7 @@ static void pr_usage(const char *name) pr_info(" -d:\tnumber of devices (default: %u)\n", test_data.nr_devices); pr_info(" -e:\tnumber of event IDs per device (default: %u)\n", test_data.nr_event_ids); pr_info(" -i:\tnumber of iterations (default: %lu)\n", nr_iterations); + pr_info(" -g:\tEnable Nested Virtualization, run guest code as guest hypervisor (default: Disabled)\n"); } int main(int argc, char **argv) @@ -374,7 +384,7 @@ int main(int argc, char **argv) u32 nr_threads; int c; - while ((c = getopt(argc, argv, "hv:d:e:i:")) != -1) { + while ((c = getopt(argc, argv, "hv:d:e:i:g:")) != -1) { switch (c) { case 'v': test_data.nr_cpus = atoi(optarg); @@ -388,6 +398,9 @@ int main(int argc, char **argv) case 'i': nr_iterations = strtoul(optarg, NULL, 0); break; + case 'g': + test_data.is_nested = atoi_non_negative("Is Nested", optarg); + break; case 'h': default: pr_usage(argv[0]); From patchwork Mon May 12 10:52:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ganapatrao Kulkarni X-Patchwork-Id: 889559 Received: from CY4PR02CU008.outbound.protection.outlook.com (mail-westcentralusazon11021077.outbound.protection.outlook.com [40.93.199.77]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2C62126A1B6; Mon, 12 May 2025 10:53:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.199.77 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747047210; cv=fail; b=dNWH5r/RFb/qB/Ke+NA7yhe48dGkmLzpnKytDhpOBaYsPwlmQNboev/EsLJut9tvZHMgIMfYMSDLK7ZonYDN3vvWqN2vdvWvyg/XvqxXWRdqK6wkuxcEIFOKLUPub1SXrh+UM0u+Foy/nzPjGxsiNmOw1FxnnrDIY0DMstcs7ow= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747047210; c=relaxed/simple; bh=11GDX0nDrAnc2tEsgfJ0h4PzAyNRZXTBvRNzOxnLVOw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=cBiwx5052t056L4xim0nMVGjHcjxRump3XJhSIu4qRnBs2cnLSi3jf/d65HRCsjstccICVoALCtVxPZVDRy8WGhW5UTXBPW7oZ5H5ZHnGI5MIK1kc5XHiVLOFhOYPA8fg3bUXGEyfvC4h13IrLyKMzvo95JgftwgiSZdry+rbP4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com; spf=pass smtp.mailfrom=os.amperecomputing.com; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b=HB27KsQS; arc=fail smtp.client-ip=40.93.199.77 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b="HB27KsQS" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LR6xcEDjb/Ce5zvPC+APDyPCZspUz1j04dRVJsgKuVBj/HPLDomWS0iuHTkCFIFv6FbnnRoLdS6KdPbQvYF+X64j1zvWFSNXUahJDugF9kBgy3tRAdlV2BIQLCge0xQsaww2Jvj4mS6JD5n/7RsRGYGnt1v7eG/UbrfGalTpxGpOJ99dUI8f31qC/MLqICI98BUjNTolg01tNnUzOHWiQ2jese0PXcgXDXXTAsjBbJivxx3Ab13ZYZC58wEQ25Wa2YWelhdW3SSjvk/DZ64HPXJoN/+9ufGiVAUh9gjd1g+79Uu0Wm3yjhmjJhsIUyH3t6/v8wJo1WPBC/abryKDCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=JDBX9n25VVUabv326JYeYWyI4bJZJ5yE0NmcXzLeeVo=; b=IHsfHS/hkt3N7J3YtzX+HC33/Q4CXUAOW3I3Y8NHwF5g0n+gB3W995Ix036KZ69pjxRCrheQVJc1FH1C5DjlReYbr14b4+QlfRJazk9NwvMfgV6/CiOc3WEjfoAH7qenAjcVRlgNUlVkyvwg7AZrjDh+rLPoMA7IXLCtKU1ZjRAz1FhShHXtBhyshl9GHI9XcEe6UiSum/cE9buKdsitjeBAnYD4z2YPsEGlckdKVzNaUv+TkQPmQRMNq5Kb6RJplWmdanSHpcB1/27bYRALkYpomQQbDRirQsEfkALAWz6salzjx+kQqOPVwAA11j8a7Weh7nX5OQLwq+86d+jG/w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JDBX9n25VVUabv326JYeYWyI4bJZJ5yE0NmcXzLeeVo=; b=HB27KsQS4GnDc/ZbffrY1Tdqc0+x7MgCYEhYOA7O8GcSXh3vSbl0Ksikdmu/etXzuWqidKi+G1PkQDS9+XIir81PlEqp7S6UCMeTWEupIPFeEkWqtkxUCcwSbroTGzbs7/yNO2SxjNrsq8tLficVDvrm6dd+V+sQrK3sLxGjKko= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SJ2PR01MB8101.prod.exchangelabs.com (2603:10b6:a03:4f6::10) by CH0PR01MB6907.prod.exchangelabs.com (2603:10b6:610:104::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8722.28; Mon, 12 May 2025 10:53:20 +0000 Received: from SJ2PR01MB8101.prod.exchangelabs.com ([fe80::292:6d9c:eb9a:95c9]) by SJ2PR01MB8101.prod.exchangelabs.com ([fe80::292:6d9c:eb9a:95c9%6]) with mapi id 15.20.8722.027; Mon, 12 May 2025 10:53:20 +0000 From: Ganapatrao Kulkarni To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Cc: maz@kernel.org, oliver.upton@linux.dev, joey.gouly@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com, seanjc@google.com, darren@os.amperecomputing.com, gankulkarni@os.amperecomputing.com Subject: [RFC PATCH v2 7/9] KVM: arm64: nv: selftests: Enable test to run in vEL2 Date: Mon, 12 May 2025 03:52:49 -0700 Message-ID: <20250512105251.577874-8-gankulkarni@os.amperecomputing.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250512105251.577874-1-gankulkarni@os.amperecomputing.com> References: <20250512105251.577874-1-gankulkarni@os.amperecomputing.com> X-ClientProxiedBy: CY8PR19CA0043.namprd19.prod.outlook.com (2603:10b6:930:6::14) To SJ2PR01MB8101.prod.exchangelabs.com (2603:10b6:a03:4f6::10) Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ2PR01MB8101:EE_|CH0PR01MB6907:EE_ X-MS-Office365-Filtering-Correlation-Id: 6dfe8a55-9709-4cb8-41a0-08dd91433540 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|52116014|7416014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: BXhkrYVGm4noZWxcAqwlF+9KhBqa0ZkHGsUzLDhjsB+XVY+ZkCc7GAZL3sw7YRe+cpHcdx9vkUdC4Tyf/OoT2sikfE74FcJFMeedwVxdAI3r2kAtaBHm05vfEeMsY5MdDRqhVMnE+qAwqoViTeA1K58wAPhLnfDXDnOi/IeWg8SvXgakkB3sjPA3jmcZ12rYXa63ftiCBbsY7Drf7DJdHgcEqLoyvVkePPU31K/BO7eM3oBfIPwBDqRqLZBsxvHlQo69D6Dh1Ksnmwa4eiEORafRNX+/PARqnL4mzVBDQ36oMmMK2Gs6flj0cW3jFtjMZo6RZuMPCXC5HnSZFmxx6GdacNd2hEzmePKbLpkyVd5Kdz0NWid1OA78g6c3EL/GzmyZPEFhzAOA+VltIQO5I3BoNcRmBoT6+PQ6bPSCpnmmI+kskE5ZBFeVzcnwRa/QY/8P0vau8JXeDrBYp5WrWSe/W+fF9kZwR+wWddo61vKUmt68LVlTSfMKpPqbd3aDBGkp40FHTdWdd7h9rw1BQ9JAFDKEhjgRhgcWr+ykYUv8nzj9lDE7YD4es1adUxIR1B2sYDkYyVIVfr00xchm2dF8dKWtuVgL1cQ0wfArAM17bkmz1nI4cOK5LLe0eHuByf93O0/fRfXDgu+OI6lbYQl4rED1XtDnGLW20U+WHlf3WsmU0+aq+oOsXRkBFDBAWK+9bprFBfZlBzzM/9NZnjuwl5qQtq2mFUiGVbBUGvkKbSc0n7RDa5QJQWof7t97z1IIWeWQyrwjrL8PXmQ5kFhhSzJouS+tYwblz5BAf3ymhyYcfq0CMrw7LFkxFtqKbUh5d1EeHt3GXS80w8pxrqXlBUf36hMdjwoWKjzqeLrvo2UDQrhY4Yf0m1ti2UcQqBjdV7kynGOdalgO8GWLtlDg34c2eck9HEv/9H/rjKPdwzoADNJtdMN3/LunYgoL52YuIQT84sVFVljyVpFVfUgrcTdaUS/oa+PWi2rBnohiP1dT97ftn4yZClkQFG3Jq1cJsETNkfU8gMijJ8zdraSqb4aN5qW33vsst1YVbVl7yhFB2jKxUd+k01sOHcuOkOpFDBrgR0jIxqp6wf+oqhf/vDoWhWDzi5bPndVWVT0vn9bpqcaSc8pauJHulurwgt5XPFZawgXAP1Hxp9SLp5+xdKnmqNJGiinZ5WxQcUEneA2xDAj1EUO5xrDPz+YHV2hUcUZhacJvbIvnpzsCPHOul6qLXOWlI+sBVuEHEFO1OUDzep+Z3lsNLlVuDPMUeg0xSqLNSf2Bro67y8ky/dsfZ6efTWf7qOb/kcLGIpJuCFlu0ZKvfpP+iJt0kV1SVqafwVHhlV9GW2cQekQ9T8FkHaIZIWKpH7o4XZ3RvDrLF29BObdGb7rJuPonRuLakKUobOT+Q026Ajf8I0Fqbp45vStJ0kG3MJN3pG1sToz8jvRfW6rS7hGHU03L1yp9GcXFESAWXLPrka118frrug== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ2PR01MB8101.prod.exchangelabs.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(52116014)(7416014)(366016)(1800799024)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: BiCgktqSep2wLYCZ90+OEt3FlGNWbf2i+jt2IXWzuU1k8+58rJkCouIGwyxW+Sl5jIS5Hg/jtqAoZpv5/StSf+iEefGa2R3iKEoeMyW0O0TVITG1iI2+EIg8GVNc0ORpZLltC0QKuZ6KyTcMn0NI7M+s0ZMCSBCmFNFiZQb9hk9lptLK84ZQWGRG82dnETNczSpUakSAjYiMpx3809XEAiFiBnUuupppHwOugRTPq7YwFWd6GYminRWt41H+LdAd3CHt5IAmkgmrkPVHwhzhe2/mToZ6tKy9veg9fA5XBOn1SWuZEJR6cA7yUH8V98llTGzplNkQJwtAzzycx+4v5uPnmMYlcexG2PQicPWwjQ7Nney/BT76gWbYBH2mPfBE+0ZWPlRv6OKXFN8g67CfbB1M5mpCd8ZdvNKmNVUzWksPtl5M8EROoIX5JvF6wBapO66zBOIxTZpF/vE6qHqSNWE3vzSCKWJrH5/d7WkOTv8OBYK8KO6sZp0WdSN3zvhiBUUO5VVL2CCmv03fwMs733HGuyFSjlAMULvb/LXGFuA1gPqOMm4/vPLk3Xa/L3KIw1OYr6zFvmI9REIGFemzQH3/FB0Ou67S0MNuGSIoDYTY1p8jdqY6292Q8H7e+cCC+ITl+N5hufl5cFuOtoutV5zqdXB35cXztTuKPjWlxNR3uRwinyHLzS0SGRhnQRpjwcByLJX472oebhiEnL/xijRQgGOvSaFjpAgLWqpS/vzHlUSIFPyC4ABXx+uhyzRxvi65LbVreyZf+w5vQ9gixVihc76zAbJX2Vx/xRok5muv4WdsI6RirR1G8/L6/BCZ46RzAHceMmyJitqe6ODgAmptpsIAxAgIqivDkWL84FGpeTfiJUS/YWt1m6Txi4LgrWHxclNA4CTDt5quKgZgYgmIcbmQnejsWfpMdLSs8jm5nAY9Y7ZVw303eokUtxoPCcrsLrifnXoOKJn0H31GzpSf9ReKUWhdbKr3hmYSDDN2KqHkl80XgCxzomTEnX348KBtaFz7fSEFvJ5t7bZtJV0IKvbIOC0A2p5k/7+g0GmfVeP4+E3W1sN/RxXnRmgx1hflI8eWvvhn8mYloUvkkxbBRQekEDdpKLl7HHQ2NllwsKBfafCDlRUBVmejtp5txGejfpSm3mfeO999T9RcEUivjXitUrI80u2rHT9IwyKnVKXx/wjfbgMmDJoxMZL8Bnif75nGeBoQPhFas/5WTHr3n8blKLLlcabI18zKtII6xUM3aHFk5paqLqHNCU0yQkjkhyDB917T8krGaq7hxKhtxauht3eClpomxYGKa3rnG/2MTyWFzISGg4e91SUQa8PQtVPp9cI/DHz4Bba14fGQyoRVyk0ddD0aHJcfrort2cC3aizJDXbdUNtUbVhn9MCNx5PP+Yueh/2jpBMU3FO2nUijMBfs/c39NC56Oy942mShMak5bfD1xx2YbD/L9tbBbLWCKLSaWYfZpmmJTYr1exliswHodWBN/kJ03kYmJZzORI/aLeytoFG97kvTWhdXcIkRiT9bbsJKyvIpa5cGzf8ncYevpKn83Cahjzybq5rdfZka9LBTFkgrVZIlfXdp+hdY7KVEdmu0G0/lY+Py1KPX14tnKjznoJnwRIpPCRPa+lSfyw0Yg8+LaUi2 X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6dfe8a55-9709-4cb8-41a0-08dd91433540 X-MS-Exchange-CrossTenant-AuthSource: SJ2PR01MB8101.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 May 2025 10:53:20.0092 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: hcNYSqWofyZMhnBuN/W7VlsTKSHKgps/eF0W4fLMmXTTIzQJVbZTRL7uhF5rrY0VdgyPeAoYSVo4O7mFl8Qw0x3TrZRkyO0wzlPBmxDyen6yzh+Th0GsZyVa3PEnp4Ue X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR01MB6907 Modify the test to run the guest code with NV enabled. Added code is only applicable to ARM64. NV is enabled using command line argument and it is disabled by default. Signed-off-by: Ganapatrao Kulkarni --- .../testing/selftests/kvm/guest_print_test.c | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tools/testing/selftests/kvm/guest_print_test.c b/tools/testing/selftests/kvm/guest_print_test.c index bcf582852db9..4f786b88fdbe 100644 --- a/tools/testing/selftests/kvm/guest_print_test.c +++ b/tools/testing/selftests/kvm/guest_print_test.c @@ -15,6 +15,15 @@ #include "processor.h" #include "ucall_common.h" +#ifdef __aarch64__ +#include "nv_util.h" +static void pr_usage(const char *name) +{ + pr_info("%s [-g nv] -h\n", name); + pr_info(" -g:\tEnable Nested Virtualization, run guest code as guest hypervisor (default: Disabled)\n"); +} +#endif + struct guest_vals { uint64_t a; uint64_t b; @@ -192,7 +201,30 @@ int main(int argc, char *argv[]) struct kvm_vcpu *vcpu; struct kvm_vm *vm; +#ifdef __aarch64__ + int opt; + bool is_nested = false; + int gic_fd; + + while ((opt = getopt(argc, argv, "g:")) != -1) { + switch (opt) { + case 'g': + is_nested = atoi_non_negative("Is Nested", optarg); + break; + case 'h': + default: + pr_usage(argv[0]); + return 1; + } + } + + if (is_nested) + vm = nv_vm_create_with_vcpus_gic(1, &vcpu, &gic_fd, guest_code); + else + vm = vm_create_with_one_vcpu(&vcpu, guest_code); +#else vm = vm_create_with_one_vcpu(&vcpu, guest_code); +#endif test_type_i64(vcpu, -1, -1); test_type_i64(vcpu, -1, 1); From patchwork Mon May 12 10:52:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ganapatrao Kulkarni X-Patchwork-Id: 889558 Received: from CY4PR02CU008.outbound.protection.outlook.com (mail-westcentralusazon11021077.outbound.protection.outlook.com [40.93.199.77]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6544126C3B5; Mon, 12 May 2025 10:53:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.199.77 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747047212; cv=fail; b=m0gdZCeXAix7zR8VrMyxxEUqLSrXKsoa5PyRP5NDQSvmp+uAD98y5dC46PbYcGrNVUmFwc+9018UsWerkUyzmIuyHOcZe9U1nrkPdRAJuul+1icpPaZ8iKZfTUY6rUZu54GFtalDUZblv0SYhjSoPQ3jQXVCy7Me1xF6Vcbqoqc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747047212; c=relaxed/simple; bh=jh/f0pqggVcvzgdvQHFd7xHG9FTfF9S1mmbcIW6Dcsw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=pnirXWX4q5u6z0RHnThkF8PlnCBZh7Wivg1aB5ZxQviqMEIWKWmEgcURgjqvyYfFKRJnbOfEIqlE3TPv4BmWlsVpoGMw7DJsqRrgf3iNW4yvvSU5DxVFhaSWotkYdGSh9Q7E6OSNM5bcM9lVbj/KCunHQWrddL6yZUCRdfEyRpU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com; spf=pass smtp.mailfrom=os.amperecomputing.com; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b=fm6UxiBH; arc=fail smtp.client-ip=40.93.199.77 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=os.amperecomputing.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=os.amperecomputing.com header.i=@os.amperecomputing.com header.b="fm6UxiBH" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FUNBI6QQptOTfPkBSUtvSZYoDFi21SIluHOBXMcMHDU4rB/WkcEepoqBBxqCaDcZOnvAK/hwKvL42nwj3RdT8ei7TNFaCMnneAzPz/VErsQoytkca2VJHqsntMcEAv98tEGlJV5yaPLHDDsndjv6als3/QaQTYm5S0uGGkRN7ewUFCy7OTAl/nEa9+iJPAeQwHgTXPIy+41KiRMYuJVuVvDEaFSDMLQZJP4BXBaMT8RGSrPACa6LE3gfU/gEzZHsOmA/ZFVZPPCUlgRLMktc3iqdBhqG6btqZjKFmaWMBKYVXCwrj/vxNXWL9/+jh8+P+tjPdtfPdxiI5BpuVJANhA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1HDIk1ETvLD0KpSPCCnfbrZz2cnO8BCYDGkUVPam3Zo=; b=CTm5fU0aK+D0Uk4hkWuQ1+9TVydX7Ge5nGMvDJrU3qrVzqf1TdZWb68TMWoPvxZOLpX+ymSP4ngLF56ZCQNOIkmgzOcCEe1pGqi1XE4ULQubYZLAk5WsDsgN2NGQyVGCyWm06D5kHhZbzfs0VltiVwnM5RlbLAmp1eLjFq7LfeEA/Chv3HvBIpYAamrkfr4JGlHtZQHUDO73JuocsfGZ1sQIkQ+SMv/5tbIHlNfE//eAcRavSYaUygQbZVI09wce29d+FWTiqDdE+ZUcv3nzKsD5PHDqcaBDkFryDfEyA6fh86AvRKgHUsIcueYjCNgVzxEB0Zck0fmCF7t2gkJXYg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1HDIk1ETvLD0KpSPCCnfbrZz2cnO8BCYDGkUVPam3Zo=; b=fm6UxiBHQFyEs8pJwrHmnaWvTZfZtrfFrEuliCG7/rbi7EjTbjzdceoRvl8jYkZyWgnUbDnfmxpPunblKIt09qD9IJ0WgMum8opvNAt7FnN2PRgn16tRenz5MZXtd0miNZfktrzVpChUCGuwZaJpmpKzm8jsD3i/ekGCtpDGBuw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SJ2PR01MB8101.prod.exchangelabs.com (2603:10b6:a03:4f6::10) by CH0PR01MB6907.prod.exchangelabs.com (2603:10b6:610:104::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8722.28; Mon, 12 May 2025 10:53:22 +0000 Received: from SJ2PR01MB8101.prod.exchangelabs.com ([fe80::292:6d9c:eb9a:95c9]) by SJ2PR01MB8101.prod.exchangelabs.com ([fe80::292:6d9c:eb9a:95c9%6]) with mapi id 15.20.8722.027; Mon, 12 May 2025 10:53:22 +0000 From: Ganapatrao Kulkarni To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Cc: maz@kernel.org, oliver.upton@linux.dev, joey.gouly@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com, seanjc@google.com, darren@os.amperecomputing.com, gankulkarni@os.amperecomputing.com Subject: [RFC PATCH v2 9/9] KVM: arm64: nv: selftests: Enable page_fault_test test to run in vEL2 Date: Mon, 12 May 2025 03:52:51 -0700 Message-ID: <20250512105251.577874-10-gankulkarni@os.amperecomputing.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250512105251.577874-1-gankulkarni@os.amperecomputing.com> References: <20250512105251.577874-1-gankulkarni@os.amperecomputing.com> X-ClientProxiedBy: CY8PR19CA0043.namprd19.prod.outlook.com (2603:10b6:930:6::14) To SJ2PR01MB8101.prod.exchangelabs.com (2603:10b6:a03:4f6::10) Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ2PR01MB8101:EE_|CH0PR01MB6907:EE_ X-MS-Office365-Filtering-Correlation-Id: 6069b83f-e10c-43a5-7b15-08dd914336e0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|52116014|7416014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: I8vC6caMhyCZTu5fn7rjwxQnNp+8xMeEGe2qiW79pjc1mZCCE9yeUGINJ9NH0H4SFoz6yveSK+SN7fQmZSYJeloJhqYi7SmUs8w2M5/8G9pi06TJRx7t0oioMD8F6zfE1KFmSl1a3CsjxvrppDIiJzkMeS/94G0imUU5J1EV0F4fvjnMGi7XeF4vHwuSxCJWBOsst81ULHn9w9Ubzbhq4FfZ4f/Gl9JVZiWOIyjX/DkzUOwkZlhDTh1hvAQ357Pnlc5VTWQGqQoatlf86jTZHUlSfychwZC7OJDA0srvPcr4LyO2QBLwtqqGQEXlDF2RpBzXEQe4IARqIM7GTMByGfizs2k2KwbkfJm+CuLySrwq4jcL2tSFyaEWkgjp82CWfXkqql1wnopMdWoJx4qbj4XU4fds5+TAV64XaDrh0dQgxxnqlHEL0ehlz5+5CEtW52cnoNXMM1OXqfe05VNq1LjB/MoX72lkrMwK/2IiWO6XoImrSQYkKv9xW/6f/nfunQsGU71fS3wBNaKoV6mnE16tHQBRGcbCN2AJx6XppKWbiSUJpuThNxGYaTBXFfTaWCOuTIwZ3zXvg2sVW8aLX9PvAqCDq9yljWjCUmDdF1p9FsUvdU0gDXkg46A2OrqxK0GifHYk7xCBgHe544qGoFnG8FJAylUXoWMYG6Kn9v2OqeJYC0p9QxliigmaaKAV1QRnXErQYKc7MOKPd7J1L8zr30ny+f9bYTwtSFnZHN+bTsfFZ/iIa824oSOTR7FzxcR0LS8RVAHnHG6BKvLDnPe2c33JsUZOrmBT2Jqgg548sC5yszT90+YVZ8qNCP8T6GdGPuBMCc6c6lB6EVI4cEjzyXTcr23OrSMaqUhwooqzY0E2kxoW0jLT03uaNS1oSEfVwRRjlbeZsa2LLfsqHvjoiv7/p/g2Ba0/60UOf4jwwLNn4zDMt4WOeov2Ig9R2gju65iRGm1EBOMNtwii2pzGLD6Q4VQQURRmhf6uHDTzgIgvoUPbBzgr+eQ7V1gxSGxNFoZb6UlXelCadIGqzymetNPIFl1ZVK3xtxpeYkiR7Yc0nk9h8pEyKp+qf7ZbsHv4uBnui3eg3DREYsLMgLT0do3nQ4f4eKhiHyokDj5svh91NdaUL3Hf8+KjX2q3Pf/eHgLff008o+I7dlrDh3NFIge8L9HVh83siKQWWVLPULmDcIBPQjKbPyMeA/3raCKFjxhpPijXlBIQyNkxeJh2tF48X6FtS91oVOvfEOuYLZeFIEzFE0lV5PkiRcqXE8R2/nAbzETOelZd49jO4nKKsrHqfaj+Mly26kOAmwWEcWTHY8J1u1omhmbUEooZAWxBSLTqz/53uDRPJ84mEIoWR95W2d7EA/xsPAgX1JAKH0VF9E8lx4iRd+qxZxoQ8rQMAfk7lAGQ8WPBWGjvwfmiK0SNpjuLb9U36CkFJ0VtvwavrRQUGsuxdgS2Ph/3nriNxtaSwDn56WuDioebkQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ2PR01MB8101.prod.exchangelabs.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(52116014)(7416014)(366016)(1800799024)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: B1MFLfbgt+io5ILSQVmv3yII1IRafFtmZs6k0wSJrZZMRPqmSiYIwDiNnQ5d4YMS0jjALWdkazbjzoV6oloW8lhcx7X4M6a4cmIiSy9KvuFj/8mJqlepfjU7xbQCqV7ZcZ56X7wjYXRU7vQdgDNjHivmh36zdhTWJ/f8yFi/rgjD9as2KKVg4nCVDVT1/xidygEfQlwW4W8WFVPeL9nhEE27U5hztKz4/MweGgbfSYZBzfbbEZoEQRVwmdSquVyvnJWugFXkSBS61zia8ob16fz4gT8UTzXHNzfaWeg0js0m0qIbDFx8admqHwRrh1tmwCEjKgq4PTtWNZQ99a1qhOox46k3ztClQzrkPTupVyfakTF9CQd7RHHa03NglT8IoAKkC+rSn2LHYwZsw6flEdaUvuY+uWkmXBW+i/ESyoKq44n5Czam8gs66WZqW6yUbZkDse6Q7SKxH9CoRf1HJTG/+cw2isSk5/vK9EgyBZPzFR/rgZEni7Wp4lkqydkuv/Xq1N5SOd03QrTXMxaBQudNCjC4Z3whKGdxGX5OMLb06oXn17aA5Mx4lGc8soEMPWsW/XpC++AdXfprzAH0VHU8g7T6G/uWXA0YSbgEWGFSlRRAxKEhQpFjt1AExp/1EduLNj1aScN+h5ohn76nUj0Rne66SpxQ7J1nRe/DtkrffNvcfZdB2oa5w5Ksub97xZuqUrlGWURhJ5DLvSJ+TbFiP0lktBgHhYNepZxkqjuzr+y0mOfvB5BZ0478bV1CHWC1V89t8luk6YKSKoL9utbExau6VE59X02BqnqXuWdytWDH7+ENl+zJLKR8obIosTY9C2tIprputDJW8NPnnjIY0voMJ0SQRtjLcyfM/WINIxKWi5E5zUt2XptYmSqmcOuOJsKhhy/5YTsU1U9boFghS05VTshnzOAy+Y6HIg+PllRBhaGM0HnjdjbzzttilSnECcMgQZOggQfiQ7teJskJ0RkW2Lmx/P8TTrsJNcAcR3gsgDn6Nn14YfZH3ROlBNRArf2LR4Yu7fZBs2gbyUKFr2dD1ZQRx0Yiya+9pONnW2ElCWRNiho7KvbjscgqiG28g7XCTYSJKyJ+m+0cGmQJSCvb4vQSFdlo7ra88vAqadWbRnie30gxTi6GPN6LUgoMqbxFm+1kj9G1ovACcuz47EW/TJudyvZAHgiYl6tuYSJvkMXDeIZGrFHlWb701dTrspfDL2Zc42n1J4l443/rS7QZnr37armkD+JoRL1kQmcW6jN5++deWvDb8Pg51b76ZKI0JDsI38NJ/H0+pVG6YyjSs1ly5EeT3JXhOGkSEHnSr51eU2sQf51dQ+lJyUwOqBUyShCMbvby4DOnE1dVmj+fCgGZ8QwEXLldn6Vi6uGTrgQ6K8zdsoTefk3R8Efm8VOU/bGuehpx1CGKcknMib0+RyAOphp2z340Vgs4T9X+I3bHhK818HKJStfdTWZ6Kq8OEvq4Gz1nuSjkKIdCwxXyZIx/fp2sG3fwtSatro5wJ3ZiX0ZOczSZAoCA5Y+kkhUx1Fr+33RqSH3u0B7rDoMdhvjfG75Xt04kMrDTa4WrDwhr0VXkAJPQ5sCHTho0dtOY5WN8I3Fqbh97Y9ZUkWky9SeBaj954IYjdQU9Q1JmpKD3GyeCEoFIeDO+ X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6069b83f-e10c-43a5-7b15-08dd914336e0 X-MS-Exchange-CrossTenant-AuthSource: SJ2PR01MB8101.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 May 2025 10:53:22.7177 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: nQ9YmeBYobgzL8rPU3Op1G75cyygYlrTx62c+5/RwUpdfjsJXgcgSybcOuTF1RGh6kE//R0TRk60ZhGEgCY54UoH6uB2IlDg+gisY/4yKst5ihzsd3u7q2tP9wxKSuSt X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR01MB6907 Extend page_fault_test to run guest code with NV enabled. NV is enabled using command line argument and it is disabled by default. Signed-off-by: Ganapatrao Kulkarni --- .../selftests/kvm/arm64/page_fault_test.c | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/kvm/arm64/page_fault_test.c b/tools/testing/selftests/kvm/arm64/page_fault_test.c index ec33a8f9c908..e3d91cb68a71 100644 --- a/tools/testing/selftests/kvm/arm64/page_fault_test.c +++ b/tools/testing/selftests/kvm/arm64/page_fault_test.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -70,6 +71,8 @@ struct test_params { struct test_desc *test_desc; }; +static bool is_nested; + static inline void flush_tlb_page(uint64_t vaddr) { uint64_t page = vaddr >> 12; @@ -701,14 +704,27 @@ static void run_test(enum vm_guest_mode mode, void *arg) struct kvm_vm *vm; struct kvm_vcpu *vcpu; struct uffd_desc *pt_uffd, *data_uffd; + int gic_fd = -1; print_test_banner(mode, p); - vm = ____vm_create(VM_SHAPE(mode)); - setup_memslots(vm, p); + if (is_nested) { + struct kvm_vcpu_init init; + + vm = ____vm_create(VM_SHAPE(mode)); + setup_memslots(vm, p); + vm_ioctl(vm, KVM_ARM_PREFERRED_TARGET, &init); + init_vcpu_nested(&init); + vcpu = aarch64_vcpu_add(vm, 0, &init, guest_code); + gic_fd = vgic_v3_setup(vm, 1, 64); + } else { + vm = ____vm_create(VM_SHAPE(mode)); + setup_memslots(vm, p); + vcpu = vm_vcpu_add(vm, 0, guest_code); + } + kvm_vm_elf_load(vm, program_invocation_name); setup_ucall(vm); - vcpu = vm_vcpu_add(vm, 0, guest_code); setup_gva_maps(vm); @@ -728,6 +744,9 @@ static void run_test(enum vm_guest_mode mode, void *arg) vcpu_run_loop(vm, vcpu, test); + if (is_nested) + close(gic_fd); + kvm_vm_free(vm); free_uffd(test, pt_uffd, data_uffd); @@ -742,7 +761,7 @@ static void run_test(enum vm_guest_mode mode, void *arg) static void help(char *name) { puts(""); - printf("usage: %s [-h] [-s mem-type]\n", name); + printf("usage: %s [-h] [-s mem-type] [-g nested]\n", name); puts(""); guest_modes_help(); backing_src_help("-s"); @@ -1115,7 +1134,7 @@ int main(int argc, char *argv[]) src_type = DEFAULT_VM_MEM_SRC; - while ((opt = getopt(argc, argv, "hm:s:")) != -1) { + while ((opt = getopt(argc, argv, "hm:s:g:")) != -1) { switch (opt) { case 'm': guest_modes_cmdline(optarg); @@ -1123,6 +1142,9 @@ int main(int argc, char *argv[]) case 's': src_type = parse_backing_src_type(optarg); break; + case 'g': + is_nested = atoi_non_negative("Is Nested", optarg); + break; case 'h': default: help(argv[0]); @@ -1130,6 +1152,9 @@ int main(int argc, char *argv[]) } } + if (is_nested) + TEST_REQUIRE(kvm_has_cap(KVM_CAP_ARM_EL2)); + for_each_test_and_guest_mode(src_type); return 0; }