From patchwork Tue Mar 5 16:46:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 13582713 Received: from out-189.mta0.migadu.com (out-189.mta0.migadu.com [91.218.175.189]) (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 07F3A8F5B for ; Tue, 5 Mar 2024 16:46:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.189 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657194; cv=none; b=JP/W2vWt0AoBDJjQ0Ee+FOwFYrdTP8Dlc4iuxkPBASHAg/ZMxsPeR8KjKgYyiSFBDjvX+j9Gc9y5fdPORKJ2vz6WFr8k9HURbEBRTXkN3Z3erSkcNMH20nGVNZHBVB3ddXGTGNdp8zUvRbCVoj/klzCAVRxZxQ9Cwt1tBy0EccU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657194; c=relaxed/simple; bh=vS8RBIPaMK+XTVtiCk3oJ/Iw996ZA0Kgef7lQF0hZ1Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-type; b=Yn/VhNsjejWFMLilWJ2qibOsdqBuWt5OMWSIyA023xLmTHwi/0wOEGb0I6krbRkYyu0DxGURzi4rZeIIS1n8atZtsQmOOm57r6HrOjH2f7B5VQ5YmihlF3btth6shKmn5lL2KTJbDUb5X1pvD1R4Ca7WeGNDwoa78WXHU20Q2/k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=NwtD0lAK; arc=none smtp.client-ip=91.218.175.189 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="NwtD0lAK" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1709657190; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=sQhWmCzXkFMJxWz7cbGY/Y28rowAcEv8BcVa6A1WR9A=; b=NwtD0lAKOCQfHBpEjAmijmfmEYmkl8hnDx8vDFnsLJs/ysXPzsYfScFANUtpkP2oIsWxrB Vb1A55EJ3yFb1oHVQNiemZVzEScXHJtWJ5OKLI2p455rccbpnLjweIG5Szf9dZak21rIFL j/M+0zq2Heyovx79JpzG5McU3xaAoL0= From: Andrew Jones To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: alexandru.elisei@arm.com, eric.auger@redhat.com, nikos.nikoleris@arm.com, shahuang@redhat.com, pbonzini@redhat.com, thuth@redhat.com Subject: [kvm-unit-tests PATCH v3 01/18] runtime: Update MAX_SMP probe Date: Tue, 5 Mar 2024 17:46:25 +0100 Message-ID: <20240305164623.379149-21-andrew.jones@linux.dev> In-Reply-To: <20240305164623.379149-20-andrew.jones@linux.dev> References: <20240305164623.379149-20-andrew.jones@linux.dev> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-type: text/plain X-Migadu-Flow: FLOW_OUT Arm's MAX_SMP probing must have stopped working at some point due to QEMU's error message changing, but nobody noticed. Also, the probing should work for at least x86 now too, so the comment isn't correct anymore either. We could probably just delete this probe thing, but in case it could still serve some purpose we can also keep it, but updated for later QEMU, and only enabled when a new run_tests.sh command line option is provided. Reviewed-by: Nikos Nikoleris Signed-off-by: Andrew Jones Reviewed-by: Shaoqin Huang --- run_tests.sh | 5 ++++- scripts/runtime.bash | 19 ++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/run_tests.sh b/run_tests.sh index abb0ab773362..bb3024ff95b1 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -44,7 +44,7 @@ fi only_tests="" list_tests="" -args=$(getopt -u -o ag:htj:vl -l all,group:,help,tap13,parallel:,verbose,list -- $*) +args=$(getopt -u -o ag:htj:vl -l all,group:,help,tap13,parallel:,verbose,list,probe-maxsmp -- $*) [ $? -ne 0 ] && exit 2; set -- $args; while [ $# -gt 0 ]; do @@ -78,6 +78,9 @@ while [ $# -gt 0 ]; do -l | --list) list_tests="yes" ;; + --probe-maxsmp) + probe_maxsmp + ;; --) ;; *) diff --git a/scripts/runtime.bash b/scripts/runtime.bash index c73fb0240d12..f2e43bb1ed60 100644 --- a/scripts/runtime.bash +++ b/scripts/runtime.bash @@ -200,12 +200,13 @@ function run() # # Probe for MAX_SMP, in case it's less than the number of host cpus. # -# This probing currently only works for ARM, as x86 bails on another -# error first, so this check is only run for ARM and ARM64. The -# parameter expansion takes the last number from the QEMU error -# message, which gives the allowable MAX_SMP. -if [[ $ARCH == 'arm' || $ARCH == 'arm64' ]] && - smp=$($RUNTIME_arch_run _NO_FILE_4Uhere_ -smp $MAX_SMP |& grep 'exceeds max CPUs'); then - smp=${smp##*(} - MAX_SMP=${smp:0:-1} -fi +function probe_maxsmp() +{ + local smp + + if smp=$($RUNTIME_arch_run _NO_FILE_4Uhere_ -smp $MAX_SMP |& grep 'Invalid SMP CPUs'); then + smp=${smp##* } + echo "Restricting MAX_SMP from ($MAX_SMP) to the max supported ($smp)" >&2 + MAX_SMP=$smp + fi +} From patchwork Tue Mar 5 16:46:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 13582714 Received: from out-172.mta1.migadu.com (out-172.mta1.migadu.com [95.215.58.172]) (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 7FD7FDDA0 for ; Tue, 5 Mar 2024 16:46:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657197; cv=none; b=eTiTooTj/ob/cY6T60Cj0ff3K0W6UiAMsPCzf7mzkkdoNvHuwaikChJoRCmhgkbV1L2+ezE7fIKy7HqJ8yM+hGpm7/GVXxDf492mC86U2wy+VUDYTOt+lfgib8uGiGPgaYdk/FCV64VONwtG+yE0PmgQ08UuoLV38WG9hI6FKGM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657197; c=relaxed/simple; bh=lIwH8xHnBJ818vrg9V46923YX02/dsCdX8btlYgC618=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-type; b=D7F2PfstgHn/tY6sodewt4FaXhIJMP1EgJKORHSsfLICC81YyFroz1lbhWmfB6yh8k49d13wij55dkSjulnZMYvlifUUQr7d+g8SlMdgW3CKj1GpknICc+up5q5F/JWesoXsqajmGweal0ygOH8SheVbQsYJiKCeo+AiS6c1w8E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=wQ1z0WXD; arc=none smtp.client-ip=95.215.58.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="wQ1z0WXD" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1709657193; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ByW6rDJtS6bwTp7JrfCRYR36QW/IGNhNiPCknwPvfkA=; b=wQ1z0WXDGBwuC3OyQm/jBErGrb7onmv1yOihG8axXolWsfKx3ZRbg/rZihHaOokeSqZ0x0 bWVZ6kk1khlFxDzV3zWa3gIUsLFkxqjvC5LDkAD2cZzonlEnfgKUIRZBQ3RGqzHtHvfXk1 enULMe85qPO3RpwfUTVUeTjA5/JL2MQ= From: Andrew Jones To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: alexandru.elisei@arm.com, eric.auger@redhat.com, nikos.nikoleris@arm.com, shahuang@redhat.com, pbonzini@redhat.com, thuth@redhat.com Subject: [kvm-unit-tests PATCH v3 02/18] runtime: Add yet another 'no kernel' error message Date: Tue, 5 Mar 2024 17:46:26 +0100 Message-ID: <20240305164623.379149-22-andrew.jones@linux.dev> In-Reply-To: <20240305164623.379149-20-andrew.jones@linux.dev> References: <20240305164623.379149-20-andrew.jones@linux.dev> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-type: text/plain X-Migadu-Flow: FLOW_OUT When booting an Arm machine with the -bios command line option we get yet another error message from QEMU when using _NO_FILE_4Uhere_ to probe command line support. Add it to the check in premature_failure() Reviewed-by: Nikos Nikoleris Signed-off-by: Andrew Jones Reviewed-by: Shaoqin Huang --- scripts/runtime.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/runtime.bash b/scripts/runtime.bash index f2e43bb1ed60..255e756f2cb2 100644 --- a/scripts/runtime.bash +++ b/scripts/runtime.bash @@ -18,7 +18,7 @@ premature_failure() local log="$(eval "$(get_cmdline _NO_FILE_4Uhere_)" 2>&1)" echo "$log" | grep "_NO_FILE_4Uhere_" | - grep -q -e "could not \(load\|open\) kernel" -e "error loading" && + grep -q -e "could not \(load\|open\) kernel" -e "error loading" -e "failed to load" && return 1 RUNTIME_log_stderr <<< "$log" From patchwork Tue Mar 5 16:46:27 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 13582715 Received: from out-178.mta1.migadu.com (out-178.mta1.migadu.com [95.215.58.178]) (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 78125D528 for ; Tue, 5 Mar 2024 16:46:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657199; cv=none; b=q0MP2CBYnOjzcTNBwPM87M2y7ZFgat65xjLWRQ05pyRIy+ziY6DUGQpQk4kVVBneX/BF8397SoWKdCzBGJ82/AU5Qww4bygbBG1eO7ICFUgTmEB9qKVqtkzNNKpS6b45V1K04PIJPk/jQ854DIl4XDncyHJFlMyf/b6xeA/+vrs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657199; c=relaxed/simple; bh=tloykq4FipHwzmG+LtYESH6X6ycS0Nf4/O5QnjtLbyg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-type; b=TDjaKEmAwzt4RZyMRfehtew+2xvXnGsCbHVH/L3fyP3+OCVFrsNHu2VuLs6I7GYV4kl+gNMH0NlxsC/pf8RsWE/zKgl4SCYw5NsRcCJBEiLBkAAAZY4RRpceq48bfrOmG+mCgjG0bq9AawR1UN7ElBCcY1j3TY/PtyV9uwon/B4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=IfPQbcFv; arc=none smtp.client-ip=95.215.58.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="IfPQbcFv" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1709657195; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fpQfrotHy+/SWb8R20YZRRn8M8ivZ5IKPumNkXdds/M=; b=IfPQbcFvR12atPYoxuk/D5YyZnpxN0QHT6CP7AgR7NRl23jMoERaSyl2nMwgVf0RRBdtvM K8QtYY6WBzUwROTSES/mhdH7AxPjhsooXOuXtaKMacg8/Xp6R0M2z1VAVXYPLxV119r5wG FUzwD5VRVkvqT/jRSQBz0MFVq+poi6Y= From: Andrew Jones To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: alexandru.elisei@arm.com, eric.auger@redhat.com, nikos.nikoleris@arm.com, shahuang@redhat.com, pbonzini@redhat.com, thuth@redhat.com Subject: [kvm-unit-tests PATCH v3 03/18] arm64: efi: Don't create dummy test Date: Tue, 5 Mar 2024 17:46:27 +0100 Message-ID: <20240305164623.379149-23-andrew.jones@linux.dev> In-Reply-To: <20240305164623.379149-20-andrew.jones@linux.dev> References: <20240305164623.379149-20-andrew.jones@linux.dev> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-type: text/plain X-Migadu-Flow: FLOW_OUT The purpose of the _NO_FILE_4Uhere_ kernel is to check that all the QEMU command line options that have been pulled together by the scripts will work. Since booting with UEFI and the -kernel command line is supported by QEMU, then we don't need to create a dummy test for _NO_FILE_4Uhere_ and go all the way into UEFI's shell and execute it to prove the command line is OK, since we would have failed much before all that if it wasn't. Just run QEMU "normally", i.e. no EFI_RUN=y, but add the UEFI -bios and its file system command line options, in order to check the full command line. Reviewed-by: Nikos Nikoleris Signed-off-by: Andrew Jones Reviewed-by: Shaoqin Huang --- arm/efi/run | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/arm/efi/run b/arm/efi/run index 6872c337c945..e629abde5273 100755 --- a/arm/efi/run +++ b/arm/efi/run @@ -53,7 +53,14 @@ while (( "$#" )); do done if [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then - EFI_CASE=dummy + EFI_CASE_DIR="$EFI_TEST/dummy" + mkdir -p "$EFI_CASE_DIR" + $TEST_DIR/run \ + $EFI_CASE \ + -bios "$EFI_UEFI" \ + -drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \ + "${qemu_args[@]}" + exit fi : "${EFI_CASE_DIR:="$EFI_TEST/$EFI_CASE"}" From patchwork Tue Mar 5 16:46:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 13582716 Received: from out-170.mta1.migadu.com (out-170.mta1.migadu.com [95.215.58.170]) (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 893E113FE0 for ; Tue, 5 Mar 2024 16:46:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657201; cv=none; b=KuuM7zJnjr2xownfDJzMFutw1k7lXYkNlQrnE55Oyyfoa4dE+S5skJjlPUQbzpiLBqNmOMcAY9Ytw2tq3CJOXNdm2KTUKTDq1Jlz6Y2eV4ti2KE2sG0+rCaCTnhklMZohz1cR37fuSU4vLlWlnZgvQb7/UHQJOXf+WSZ9qN6o58= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657201; c=relaxed/simple; bh=tFhbxtYyeFR7DQV04WEp9S1dqAxKC1qIlGAM3c/wg2Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-type; b=FBsHHNsDlKzxLNMlnKWn3jXiTDuy6c8suUByaq0pOpjXacafNV/dqbXCn914N1qZBW1sO2v+FP96qUS6Avrbj/vyb4KBn3GV6Fg5af1DsT01e2paXaazICnbpNJgZ2Sbso5QeEpblyiAaOPjtMDv8vsmBzSTEsEaezMN3j+l/TU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=EuQHOExU; arc=none smtp.client-ip=95.215.58.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="EuQHOExU" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1709657197; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=6v4dgcC88/jGlNFEQij8AjD/BQIJSZRkdeHFYEeHLqk=; b=EuQHOExUQwv3OO5cmBLsY05p5V4kGzmMW1pHsT6c5erNvYa4WKotzZA4zQIigq/xXshhMY sbfFtG3vUzZO86eQLRf8/0BGiAC1k2WT6FyHC6jyBGP7up9gzPTQ39lcrHXA/xqSkiPobZ JNUyvzOOAUwv6KBMGXWCmMW2QJYs1fE= From: Andrew Jones To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: alexandru.elisei@arm.com, eric.auger@redhat.com, nikos.nikoleris@arm.com, shahuang@redhat.com, pbonzini@redhat.com, thuth@redhat.com Subject: [kvm-unit-tests PATCH v3 04/18] arm64: efi: Make running tests on EFI can be parallel Date: Tue, 5 Mar 2024 17:46:28 +0100 Message-ID: <20240305164623.379149-24-andrew.jones@linux.dev> In-Reply-To: <20240305164623.379149-20-andrew.jones@linux.dev> References: <20240305164623.379149-20-andrew.jones@linux.dev> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-type: text/plain X-Migadu-Flow: FLOW_OUT From: Shaoqin Huang Currently running tests on EFI in parallel can cause part of tests to fail, this is because arm/efi/run script use the EFI_CASE to create the subdir under the efi-tests, and the EFI_CASE is the filename of the test, when running tests in parallel, the multiple tests exist in the same filename will execute at the same time, which will use the same directory and write the test specific things into it, this cause chaotic and make some tests fail. For example, if we running the pmu-sw-incr and pmu-chained-counters and other pmu tests on EFI at the same time, the EFI_CASE will be pmu. So they will write their $cmd_args to the $EFI/TEST/pmu/startup.nsh at the same time, which will corrupt the startup.nsh file. And we can get the log which outputs: * pmu-sw-incr.log: - ABORT: pmu: Unknown sub-test 'pmu-mem-acce' * pmu-chained-counters.log - ABORT: pmu: Unknown sub-test 'pmu-mem-access-reliab' And the efi-tests/pmu/startup.nsh: @echo -off setvar fdtfile -guid 97ef3e03-7329-4a6a-b9ba-6c1fdcc5f823 -rt =L"dtb" pmu.efi pmu-mem-access-reliability setvar fdtfile -guid 97ef3e03-7329-4a6a-b9ba-6c1fdcc5f823 -rt =L"dtb" pmu.efi pmu-chained-sw-incr As you can see, when multiple tests write to the same startup.nsh file, it causes the issue. To Fix this issue, use the testname instead of the filename to create the subdir under the efi-tests. We use the EFI_TESTNAME to replace the EFI_CASE in script. Since every testname is specific, now the tests can be run parallel. It also considers when user directly use the arm/efi/run to run test, in this case, still use the filename. Besides, replace multiple $EFI_TEST/$EFI_CASE to the $EFI_CASE_DIR, this makes the script looks more clean and we don'e need to replace many EFI_CASE to EFI_TESTNAME. Reviewed-by: Andrew Jones Signed-off-by: Shaoqin Huang Reviewed-by: Nikos Nikoleris Signed-off-by: Andrew Jones --- arm/efi/run | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/arm/efi/run b/arm/efi/run index e629abde5273..8b6512520026 100755 --- a/arm/efi/run +++ b/arm/efi/run @@ -25,6 +25,8 @@ fi : "${EFI_UEFI:=$DEFAULT_UEFI}" : "${EFI_TEST:=efi-tests}" : "${EFI_CASE:=$(basename $1 .efi)}" +: "${EFI_TESTNAME:=$TESTNAME}" +: "${EFI_TESTNAME:=$EFI_CASE}" : "${EFI_VAR_GUID:=97ef3e03-7329-4a6a-b9ba-6c1fdcc5f823}" [ "$EFI_USE_ACPI" = "y" ] || EFI_USE_DTB=y @@ -63,20 +65,20 @@ if [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then exit fi -: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_CASE"}" +: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_TESTNAME"}" mkdir -p "$EFI_CASE_DIR" -cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_TEST/$EFI_CASE/" -echo "@echo -off" > "$EFI_TEST/$EFI_CASE/startup.nsh" +cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_DIR/" +echo "@echo -off" > "$EFI_CASE_DIR/startup.nsh" if [ "$EFI_USE_DTB" = "y" ]; then qemu_args+=(-machine acpi=off) FDT_BASENAME="dtb" - $(EFI_RUN=y $TEST_DIR/run -machine dumpdtb="$EFI_TEST/$EFI_CASE/$FDT_BASENAME" "${qemu_args[@]}") - echo "setvar fdtfile -guid $EFI_VAR_GUID -rt =L\"$FDT_BASENAME\"" >> "$EFI_TEST/$EFI_CASE/startup.nsh" + $(EFI_RUN=y $TEST_DIR/run -machine dumpdtb="$EFI_CASE_DIR/$FDT_BASENAME" "${qemu_args[@]}") + echo "setvar fdtfile -guid $EFI_VAR_GUID -rt =L\"$FDT_BASENAME\"" >> "$EFI_CASE_DIR/startup.nsh" fi -echo "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_TEST/$EFI_CASE/startup.nsh" +echo "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_CASE_DIR/startup.nsh" EFI_RUN=y $TEST_DIR/run \ -bios "$EFI_UEFI" \ - -drive file.dir="$EFI_TEST/$EFI_CASE/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \ + -drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \ "${qemu_args[@]}" From patchwork Tue Mar 5 16:46:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 13582717 Received: from out-182.mta0.migadu.com (out-182.mta0.migadu.com [91.218.175.182]) (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 CC37D168B9 for ; Tue, 5 Mar 2024 16:46:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657204; cv=none; b=Czw/LUTJc2Limfy10KjIh7Vw+7nfvMpPCREaS2Nojd0mr8DsE+FbQFGd8qBRwWXHTA2i4T9WN3AyXAm54tQa+zKM4G1txhvvt0+w1UQ0574+6xQoOY3bZ4IsnDiNg5gSOWPvbh9UhF+ZaxYUdg5TD9qMiMgBwBhtmwlrUzoh3lY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657204; c=relaxed/simple; bh=VM/iI6eWsrWoxm9SRfOsz46HpOfnaePstNU8qTMviWc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-type; b=QGVYlHY93AbSdfk+NTJzSi/btRCB0jfRE94wWjtsZh321BSQPHsLA950O7hu8T29zeIEHHTW1O5ma/9MkYYxe6Sj8pVg6zQlEUGjTPftggOpyoDnUJHYTzHh9XzofEZvjLk0Rj27WPODTYpEXfVXUujn6mtcu9LUquge5Z1Nrrs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=igrKLPuL; arc=none smtp.client-ip=91.218.175.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="igrKLPuL" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1709657200; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=RnWnN5FTaEFq8qeb3uUDZVv1wApvYCzi38Ljvuq94m0=; b=igrKLPuLBZBZaO51XC+ghCiKgYPmP2l7GoGmT4oXFODUeLCcN96cR3Qk27d7zjvyAz+6aX CD7ntPbiXsATLztQWUYNsyMqUlUypMLnVjtQjBbE9pdAbn+f+bzAPGf0LMWRngHtcZzO9r zYu9m92eenUoFPs9Sha7IH7o2VLdEnI= From: Andrew Jones To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: alexandru.elisei@arm.com, eric.auger@redhat.com, nikos.nikoleris@arm.com, shahuang@redhat.com, pbonzini@redhat.com, thuth@redhat.com Subject: [kvm-unit-tests PATCH v3 05/18] arm64: efi: Remove redundant dtb generation Date: Tue, 5 Mar 2024 17:46:29 +0100 Message-ID: <20240305164623.379149-25-andrew.jones@linux.dev> In-Reply-To: <20240305164623.379149-20-andrew.jones@linux.dev> References: <20240305164623.379149-20-andrew.jones@linux.dev> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-type: text/plain X-Migadu-Flow: FLOW_OUT When a line in bash is written as $(some-line) Then 'some-line' will be evaluated and then whatever some-line outputs will be evaluated. The dtb is getting generated twice since the line that should generate it is within $() and the output of that is the command itself (since arm/run outputs its command), so the command gets executed again. Remove the $() to just execute dtb generation once. While mucking with arm/efi/run tidy it a bit by by removing the unused sourcing of common.bash and the unnecessary 'set -e' (we check for and propagate errors ourselves). Finally, make one reorganization change and some whitespace fixes. Fixes: 2607d2d6946a ("arm64: Add an efi/run script") Fixes: 2e080dafec2a ("arm64: Use the provided fdt when booting through EFI") Reviewed-by: Nikos Nikoleris Signed-off-by: Andrew Jones --- arm/efi/run | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/arm/efi/run b/arm/efi/run index 8b6512520026..e45cecfa3265 100755 --- a/arm/efi/run +++ b/arm/efi/run @@ -1,7 +1,5 @@ #!/bin/bash -set -e - if [ $# -eq 0 ]; then echo "Usage $0 TEST_CASE [QEMU_ARGS]" exit 2 @@ -13,7 +11,6 @@ if [ ! -f config.mak ]; then fi source config.mak source scripts/arch-run.bash -source scripts/common.bash if [ -f /usr/share/qemu-efi-aarch64/QEMU_EFI.fd ]; then DEFAULT_UEFI=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd @@ -27,6 +24,7 @@ fi : "${EFI_CASE:=$(basename $1 .efi)}" : "${EFI_TESTNAME:=$TESTNAME}" : "${EFI_TESTNAME:=$EFI_CASE}" +: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_TESTNAME"}" : "${EFI_VAR_GUID:=97ef3e03-7329-4a6a-b9ba-6c1fdcc5f823}" [ "$EFI_USE_ACPI" = "y" ] || EFI_USE_DTB=y @@ -65,20 +63,18 @@ if [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then exit fi -: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_TESTNAME"}" mkdir -p "$EFI_CASE_DIR" - cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_DIR/" echo "@echo -off" > "$EFI_CASE_DIR/startup.nsh" if [ "$EFI_USE_DTB" = "y" ]; then qemu_args+=(-machine acpi=off) FDT_BASENAME="dtb" - $(EFI_RUN=y $TEST_DIR/run -machine dumpdtb="$EFI_CASE_DIR/$FDT_BASENAME" "${qemu_args[@]}") + EFI_RUN=y $TEST_DIR/run -machine dumpdtb="$EFI_CASE_DIR/$FDT_BASENAME" "${qemu_args[@]}" echo "setvar fdtfile -guid $EFI_VAR_GUID -rt =L\"$FDT_BASENAME\"" >> "$EFI_CASE_DIR/startup.nsh" fi echo "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_CASE_DIR/startup.nsh" EFI_RUN=y $TEST_DIR/run \ - -bios "$EFI_UEFI" \ - -drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \ - "${qemu_args[@]}" + -bios "$EFI_UEFI" \ + -drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \ + "${qemu_args[@]}" From patchwork Tue Mar 5 16:46:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 13582718 Received: from out-188.mta0.migadu.com (out-188.mta0.migadu.com [91.218.175.188]) (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 EA0FA1758B for ; Tue, 5 Mar 2024 16:46:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.188 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657210; cv=none; b=D0sqGA1CUhlIvbB1/WEbZphQrxb6z5WU5JmmcGU+E5BR+TIsHAIJUzLJUS8CxXcMz6tc3Gzpxd6AMiHlSod0OfjQKbJiERwDlKP3hsclANIgZcqrRJ6U3RGft7v6g6HSLfH+Cp7vyxBHvjTBVCGLnIKBQoNWIc0usMa2llTEAzc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657210; c=relaxed/simple; bh=EVOErAccFhl0zSp1EdMjve8qutGj5/zPog+Wa3IuFlg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-type; b=Gcocd04wykQhnIhharSc2JagUUiJ8+OqdNNvzU+OEJaR6nEygUP7Ekh+AhevoN09Xa+fUaWM/txGLPueQGeprJh58rOO22QVTspX1iZ6u7Ah6K5U0q2LJj+3dKUYXpTpnUW3Nen+8l9NRKLUhW7vpaa6+pxFm91eHx05NXFojgs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=xFMsfb22; arc=none smtp.client-ip=91.218.175.188 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="xFMsfb22" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1709657207; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=kg+y/g3K7LZI8pEGd+3JudvSf0mGrvNAPU1Jt+RaXeg=; b=xFMsfb22tMcAM8CIdYVM5c4ubtTK4oN2Q1ThDYWLv5U9M88mBbAuwPFIMlzK8VhaomCm9H 4cyWVcWS8swkQpfehtaGlE0mhm8GBuwNR65PD9Mg19AU2HQ/Q0pl9fufjEMqb28gwcEbNK 6qNj8JpNQ8np5zbYGT5uO4GdPDU4Jac= From: Andrew Jones To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: alexandru.elisei@arm.com, eric.auger@redhat.com, nikos.nikoleris@arm.com, shahuang@redhat.com, pbonzini@redhat.com, thuth@redhat.com Subject: [kvm-unit-tests PATCH v3 06/18] arm64: efi: Move run code into a function Date: Tue, 5 Mar 2024 17:46:30 +0100 Message-ID: <20240305164623.379149-26-andrew.jones@linux.dev> In-Reply-To: <20240305164623.379149-20-andrew.jones@linux.dev> References: <20240305164623.379149-20-andrew.jones@linux.dev> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-type: text/plain X-Migadu-Flow: FLOW_OUT Push the run code in arm/efi/run into a function named uefi_shell_run() since it will create an EFI file system, copy the test and possibly the DTB there, and create a startup.nsh which executes the test from the UEFI shell. Pushing this code into a function allows additional execution paths to be created in the script. Also rename EFI_RUN to UEFI_SHELL_RUN to pass the information on to arm/run that it's being called from uefi_shell_run(). Reviewed-by: Nikos Nikoleris Signed-off-by: Andrew Jones --- arm/efi/run | 33 +++++++++++++++++++-------------- arm/run | 4 ++-- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/arm/efi/run b/arm/efi/run index e45cecfa3265..494ba9e7efe7 100755 --- a/arm/efi/run +++ b/arm/efi/run @@ -63,18 +63,23 @@ if [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then exit fi -mkdir -p "$EFI_CASE_DIR" -cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_DIR/" -echo "@echo -off" > "$EFI_CASE_DIR/startup.nsh" -if [ "$EFI_USE_DTB" = "y" ]; then - qemu_args+=(-machine acpi=off) - FDT_BASENAME="dtb" - EFI_RUN=y $TEST_DIR/run -machine dumpdtb="$EFI_CASE_DIR/$FDT_BASENAME" "${qemu_args[@]}" - echo "setvar fdtfile -guid $EFI_VAR_GUID -rt =L\"$FDT_BASENAME\"" >> "$EFI_CASE_DIR/startup.nsh" -fi -echo "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_CASE_DIR/startup.nsh" +uefi_shell_run() +{ + mkdir -p "$EFI_CASE_DIR" + cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_DIR/" + echo "@echo -off" > "$EFI_CASE_DIR/startup.nsh" + if [ "$EFI_USE_DTB" = "y" ]; then + qemu_args+=(-machine acpi=off) + FDT_BASENAME="dtb" + UEFI_SHELL_RUN=y $TEST_DIR/run -machine dumpdtb="$EFI_CASE_DIR/$FDT_BASENAME" "${qemu_args[@]}" + echo "setvar fdtfile -guid $EFI_VAR_GUID -rt =L\"$FDT_BASENAME\"" >> "$EFI_CASE_DIR/startup.nsh" + fi + echo "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_CASE_DIR/startup.nsh" + + UEFI_SHELL_RUN=y $TEST_DIR/run \ + -bios "$EFI_UEFI" \ + -drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \ + "${qemu_args[@]}" +} -EFI_RUN=y $TEST_DIR/run \ - -bios "$EFI_UEFI" \ - -drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \ - "${qemu_args[@]}" +uefi_shell_run diff --git a/arm/run b/arm/run index ac64b3b461a2..40c2ca66ba7e 100755 --- a/arm/run +++ b/arm/run @@ -60,7 +60,7 @@ if ! $qemu $M -chardev '?' | grep -q testdev; then exit 2 fi -if [ "$EFI_RUN" != "y" ]; then +if [ "$UEFI_SHELL_RUN" != "y" ]; then chr_testdev='-device virtio-serial-device' chr_testdev+=' -device virtconsole,chardev=ctd -chardev testdev,id=ctd' fi @@ -75,7 +75,7 @@ command="$qemu -nodefaults $M $A -cpu $processor $chr_testdev $pci_testdev" command+=" -display none -serial stdio" command="$(migration_cmd) $(timeout_cmd) $command" -if [ "$EFI_RUN" = "y" ]; then +if [ "$UEFI_SHELL_RUN" = "y" ]; then ENVIRON_DEFAULT=n run_qemu_status $command "$@" else run_qemu $command -kernel "$@" From patchwork Tue Mar 5 16:46:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 13582719 Received: from out-186.mta0.migadu.com (out-186.mta0.migadu.com [91.218.175.186]) (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 90161DDB3 for ; Tue, 5 Mar 2024 16:46:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.186 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657213; cv=none; b=jw/hdilQe2gMkUYmCsgYCUmXrCkLXASRn24gTU0V8xmRhp1wXH2gN9hKVfocIDxWyhe4ziY1VSV9Ngh2tyussCBV5uagq45LlJXSXMgIBGLLooX3IEbGP4mnlJXf8dkFoQHAS9RpxNZ6jzj7aE3/G0zJOizgUbIz6QlcPJD4iY0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657213; c=relaxed/simple; bh=EPFyW7c6EsiO/vnTF2sd6CY1291yH7snUNrDM0XWKbA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-type; b=F/GZfRhzGrG0dU4Wj9AfO6kM2UVCeNI+8Fn+KuOIK8mQJZ6qo6GV0xX7AXFqHy9vX2ngKdmPh/uemSXI4GUa335p/sb9bJirEqFXbF9MDNx98k8Ck+FpfU8ANXHs/SwYOGyCuQzIXuwnsZfxCIn0odMNqyLjkXt7UGFz2b8Hots= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=D39zMGUp; arc=none smtp.client-ip=91.218.175.186 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="D39zMGUp" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1709657209; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jP0leUSpwFZInD+7iqpmb8nTOrwcW8p9rgtcU0feSoQ=; b=D39zMGUpcduVXrUX0ckZb9ZlnTlBzUPFHKy+DVuJRWzMrjZXf8M8+e1+4C9Q3oei1cXIaF xdIyz7JrLedMjMWl0XvkQwG3N5OuMBzF//Wxgq1pp+TuGB5G548XBviFQUxykfSeh2ctxS FeJPM09cNTYNATQLivKX6kFeOAdWjUo= From: Andrew Jones To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: alexandru.elisei@arm.com, eric.auger@redhat.com, nikos.nikoleris@arm.com, shahuang@redhat.com, pbonzini@redhat.com, thuth@redhat.com Subject: [kvm-unit-tests PATCH v3 07/18] arm64: efi: Remove EFI_USE_DTB Date: Tue, 5 Mar 2024 17:46:31 +0100 Message-ID: <20240305164623.379149-27-andrew.jones@linux.dev> In-Reply-To: <20240305164623.379149-20-andrew.jones@linux.dev> References: <20240305164623.379149-20-andrew.jones@linux.dev> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-type: text/plain X-Migadu-Flow: FLOW_OUT We don't need two variables for one boolean property. Just use !EFI_USE_ACPI to infer efi-use-dtb. Reviewed-by: Nikos Nikoleris Signed-off-by: Andrew Jones --- arm/efi/run | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/arm/efi/run b/arm/efi/run index 494ba9e7efe7..b7a8418a07f8 100755 --- a/arm/efi/run +++ b/arm/efi/run @@ -27,8 +27,6 @@ fi : "${EFI_CASE_DIR:="$EFI_TEST/$EFI_TESTNAME"}" : "${EFI_VAR_GUID:=97ef3e03-7329-4a6a-b9ba-6c1fdcc5f823}" -[ "$EFI_USE_ACPI" = "y" ] || EFI_USE_DTB=y - if [ ! -f "$EFI_UEFI" ]; then echo "UEFI firmware not found." echo "Please specify the path with the env variable EFI_UEFI" @@ -68,7 +66,7 @@ uefi_shell_run() mkdir -p "$EFI_CASE_DIR" cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_DIR/" echo "@echo -off" > "$EFI_CASE_DIR/startup.nsh" - if [ "$EFI_USE_DTB" = "y" ]; then + if [ "$EFI_USE_ACPI" != "y" ]; then qemu_args+=(-machine acpi=off) FDT_BASENAME="dtb" UEFI_SHELL_RUN=y $TEST_DIR/run -machine dumpdtb="$EFI_CASE_DIR/$FDT_BASENAME" "${qemu_args[@]}" From patchwork Tue Mar 5 16:46:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 13582720 Received: from out-181.mta1.migadu.com (out-181.mta1.migadu.com [95.215.58.181]) (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 519CB1758C for ; Tue, 5 Mar 2024 16:46:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657216; cv=none; b=LgQzLWfAWIvwAYrj5xIfYg+r83imsgV7Fxgof7sloIcWhbCbX6KGdvvBdpEGa7O8qrfg483jao4y8C2FcRDo5duWVmQpA1dUE1g2+W9ObLu2/QlG4rcWL0Fevs9X1xj2rmbDou/5LodDA8OI3udAzqZaan0zvbv3Yiz3e7JmH5U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657216; c=relaxed/simple; bh=WZ1nnASCLXaw8hXGVUKPy/XAig0PlLzT3NlCxdTm1JM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-type; b=DVFHHAlnTi5b6edNt7rjs8mZ1WJ+EM67ORUz3kHEyCR6wX8ad6Nt/5f6ke6258LCUnYyrRxGQNtimgUp9I4VXssl4Krc6Elcg9FXtyOmASeFGgDDXUdgoKwPHuGQuKFzvHZJiG0WPRKS0D5T161eZvhrmMmkZkDh6iNrgj72k8s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=h4oZokIE; arc=none smtp.client-ip=95.215.58.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="h4oZokIE" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1709657212; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=UeqPKhXa62dzio8QwISwv1BHy0y6QQ4nVa37ltWJJRM=; b=h4oZokIEGJDHa1ZShMS1k5Rizs6DApsUa8uXBiSx9fPGswXMGEx/64aMv9TSg3MeBNfzmm x8cdHcSxkvvvmLvZbTub9xfL49zIniitR3omWf0DqCbO1GZuBtAuAPyLdD9WBx8U2/p0gB zApiV/Nm1cJgxn219hcOPHb3RLQLnso= From: Andrew Jones To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: alexandru.elisei@arm.com, eric.auger@redhat.com, nikos.nikoleris@arm.com, shahuang@redhat.com, pbonzini@redhat.com, thuth@redhat.com Subject: [kvm-unit-tests PATCH v3 08/18] arm64: efi: Improve device tree discovery Date: Tue, 5 Mar 2024 17:46:32 +0100 Message-ID: <20240305164623.379149-28-andrew.jones@linux.dev> In-Reply-To: <20240305164623.379149-20-andrew.jones@linux.dev> References: <20240305164623.379149-20-andrew.jones@linux.dev> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-type: text/plain X-Migadu-Flow: FLOW_OUT Check the device tree GUID when the environment variable is missing, which allows directly loading the unit test with QEMU's '-kernel' command line parameter, which is much faster than putting the test in the EFI file system and then running it from the UEFI shell. Reviewed-by: Nikos Nikoleris Signed-off-by: Andrew Jones --- lib/efi.c | 19 ++++++++++++------- lib/linux/efi.h | 2 ++ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/efi.c b/lib/efi.c index d94f0fa16fc0..4d1126b4a64e 100644 --- a/lib/efi.c +++ b/lib/efi.c @@ -6,13 +6,13 @@ * * SPDX-License-Identifier: LGPL-2.0-or-later */ - -#include "efi.h" +#include #include -#include #include -#include +#include #include +#include "efi.h" +#include "libfdt/libfdt.h" /* From lib/argv.c */ extern int __argc, __envc; @@ -288,13 +288,18 @@ static void *efi_get_fdt(efi_handle_t handle, struct efi_loaded_image_64 *image) efi_char16_t var[] = ENV_VARNAME_DTBFILE; efi_char16_t *val; void *fdt = NULL; - int fdtsize; + int fdtsize = 0; val = efi_get_var(handle, image, var); - if (val) + if (val) { efi_load_image(handle, image, &fdt, &fdtsize, val); + if (fdtsize == 0) + return NULL; + } else if (efi_get_system_config_table(DEVICE_TREE_GUID, &fdt) != EFI_SUCCESS) { + return NULL; + } - return fdt; + return fdt_check_header(fdt) == 0 ? fdt : NULL; } efi_status_t efi_main(efi_handle_t handle, efi_system_table_t *sys_tab) diff --git a/lib/linux/efi.h b/lib/linux/efi.h index 410f0b1a0da1..92d798f79767 100644 --- a/lib/linux/efi.h +++ b/lib/linux/efi.h @@ -66,6 +66,8 @@ typedef guid_t efi_guid_t; #define ACPI_TABLE_GUID EFI_GUID(0xeb9d2d30, 0x2d88, 0x11d3, 0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d) #define ACPI_20_TABLE_GUID EFI_GUID(0x8868e871, 0xe4f1, 0x11d3, 0xbc, 0x22, 0x00, 0x80, 0xc7, 0x3c, 0x88, 0x81) +#define DEVICE_TREE_GUID EFI_GUID(0xb1b621d5, 0xf19c, 0x41a5, 0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0) + #define LOADED_IMAGE_PROTOCOL_GUID EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b) typedef struct { From patchwork Tue Mar 5 16:46:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 13582721 Received: from out-170.mta1.migadu.com (out-170.mta1.migadu.com [95.215.58.170]) (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 1580D175BD for ; Tue, 5 Mar 2024 16:46:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657217; cv=none; b=FmyLLHBMAtKgIjZGPkp/6BvaAvIZBj+F19D+ESNaeF73GDtNkd2y+trMrEIuLJ/sCMpL5XFrTfj4QPY1lezPalgOW/3RDXyPFlcWJc9FpXpxPemnN1oeNgvgwsw2jp1o6cP7da6ScB+msaUItWenQvNF2dqXwNL5gqrJe1230L4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657217; c=relaxed/simple; bh=hMQFjT3uGxqAUnsItvXFLjLQLDAcRV2pgqW/JVBhCWo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-type; b=ndRCucqUpIuMSNHfvSQcTehFBRxMuMlJNGLjLEktlQl+7el1IZ34J1lAVYYXhAndRo4hwgRt6CiFKGM+u1xSLenaSPCgRIlsvbP2tdYS4FgUog81FRZPR+pHGDUGSQh/SdPl/oynSzm6mlHgeRK5uOXc43m+fFoovfFn4AL3A/M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=ifkm9oPk; arc=none smtp.client-ip=95.215.58.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="ifkm9oPk" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1709657214; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ltUYcxc+rFtMPyFajsIO3yKtSJVFaLdg4iRMd5MczYU=; b=ifkm9oPk1F1dukFiU6sJ4WaiOt3VVjuVGhvc51HcBppVQNDkTu0y+e/af90Zko4xP93xTC 1LOTMzCKR4R8Fi1SRw/EkyV/t4vruEjE0RegRbC3XHe91SAJ3kjynDzumYch5DhNRTfn4X j7+Hq28ccWE0z0wP2zDaedKNgqBhT88= From: Andrew Jones To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: alexandru.elisei@arm.com, eric.auger@redhat.com, nikos.nikoleris@arm.com, shahuang@redhat.com, pbonzini@redhat.com, thuth@redhat.com Subject: [kvm-unit-tests PATCH v3 09/18] lib/efi: Add support for loading the initrd Date: Tue, 5 Mar 2024 17:46:33 +0100 Message-ID: <20240305164623.379149-29-andrew.jones@linux.dev> In-Reply-To: <20240305164623.379149-20-andrew.jones@linux.dev> References: <20240305164623.379149-20-andrew.jones@linux.dev> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-type: text/plain X-Migadu-Flow: FLOW_OUT When loading non-efi tests with QEMU's '-kernel' option we also load an environ with the '-initrd' option. Now that efi tests can also be loaded with the '-kernel' option also provide the '-initrd' environ. For EFI, we use the EFI_LOAD_FILE2_PROTOCOL_GUID protocol to load LINUX_EFI_INITRD_MEDIA_GUID. Each architecture which wants to use the initrd for the environ will need to call setup_env() on the initrd data. As usual, the new efi function is heavily influenced by Linux's implementation. Reviewed-by: Nikos Nikoleris Signed-off-by: Andrew Jones --- lib/efi.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++ lib/linux/efi.h | 27 ++++++++++++++++++++ 2 files changed, 92 insertions(+) diff --git a/lib/efi.c b/lib/efi.c index 4d1126b4a64e..12c66c6ffd1f 100644 --- a/lib/efi.c +++ b/lib/efi.c @@ -14,6 +14,10 @@ #include "efi.h" #include "libfdt/libfdt.h" +/* From each arch */ +extern char *initrd; +extern u32 initrd_size; + /* From lib/argv.c */ extern int __argc, __envc; extern char *__argv[100]; @@ -302,6 +306,65 @@ static void *efi_get_fdt(efi_handle_t handle, struct efi_loaded_image_64 *image) return fdt_check_header(fdt) == 0 ? fdt : NULL; } +static const struct { + struct efi_vendor_dev_path vendor; + struct efi_generic_dev_path end; +} __packed initrd_dev_path = { + { + { + EFI_DEV_MEDIA, + EFI_DEV_MEDIA_VENDOR, + sizeof(struct efi_vendor_dev_path), + }, + LINUX_EFI_INITRD_MEDIA_GUID + }, { + EFI_DEV_END_PATH, + EFI_DEV_END_ENTIRE, + sizeof(struct efi_generic_dev_path) + } +}; + +static void efi_load_initrd(void) +{ + efi_guid_t lf2_proto_guid = EFI_LOAD_FILE2_PROTOCOL_GUID; + efi_device_path_protocol_t *dp; + efi_load_file2_protocol_t *lf2; + efi_handle_t handle; + efi_status_t status; + unsigned long file_size = 0; + + initrd = NULL; + initrd_size = 0; + + dp = (efi_device_path_protocol_t *)&initrd_dev_path; + status = efi_bs_call(locate_device_path, &lf2_proto_guid, &dp, &handle); + if (status != EFI_SUCCESS) + return; + + status = efi_bs_call(handle_protocol, handle, &lf2_proto_guid, (void **)&lf2); + assert(status == EFI_SUCCESS); + + status = efi_call_proto(lf2, load_file, dp, false, &file_size, NULL); + assert(status == EFI_BUFFER_TOO_SMALL); + + status = efi_bs_call(allocate_pool, EFI_LOADER_DATA, file_size, (void **)&initrd); + assert(status == EFI_SUCCESS); + + status = efi_call_proto(lf2, load_file, dp, false, &file_size, (void *)initrd); + assert(status == EFI_SUCCESS); + + initrd_size = (u32)file_size; + + /* + * UEFI appends initrd=initrd to the command line when an initrd is present. + * Remove it in order to avoid confusing unit tests. + */ + if (!strcmp(__argv[__argc - 1], "initrd=initrd")) { + __argv[__argc - 1] = NULL; + __argc -= 1; + } +} + efi_status_t efi_main(efi_handle_t handle, efi_system_table_t *sys_tab) { int ret; @@ -340,6 +403,8 @@ efi_status_t efi_main(efi_handle_t handle, efi_system_table_t *sys_tab) } setup_args(cmdline_ptr); + efi_load_initrd(); + efi_bootinfo.fdt = efi_get_fdt(handle, image); /* Set up efi_bootinfo */ efi_bootinfo.mem_map.map = ↦ diff --git a/lib/linux/efi.h b/lib/linux/efi.h index 92d798f79767..8fa23ad078ce 100644 --- a/lib/linux/efi.h +++ b/lib/linux/efi.h @@ -70,6 +70,9 @@ typedef guid_t efi_guid_t; #define LOADED_IMAGE_PROTOCOL_GUID EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b) +#define EFI_LOAD_FILE2_PROTOCOL_GUID EFI_GUID(0x4006c0c1, 0xfcb3, 0x403e, 0x99, 0x6d, 0x4a, 0x6c, 0x87, 0x24, 0xe0, 0x6d) +#define LINUX_EFI_INITRD_MEDIA_GUID EFI_GUID(0x5568e427, 0x68fc, 0x4f3d, 0xac, 0x74, 0xca, 0x55, 0x52, 0x31, 0xcc, 0x68) + typedef struct { efi_guid_t guid; void *table; @@ -248,6 +251,12 @@ struct efi_generic_dev_path { u16 length; } __packed; +struct efi_vendor_dev_path { + struct efi_generic_dev_path header; + efi_guid_t vendorguid; + u8 vendordata[]; +} __packed; + typedef struct efi_generic_dev_path efi_device_path_protocol_t; /* @@ -449,6 +458,19 @@ typedef struct _efi_simple_file_system_protocol efi_simple_file_system_protocol_ typedef struct _efi_file_protocol efi_file_protocol_t; typedef efi_simple_file_system_protocol_t efi_file_io_interface_t; typedef efi_file_protocol_t efi_file_t; +typedef union efi_load_file_protocol efi_load_file_protocol_t; +typedef union efi_load_file_protocol efi_load_file2_protocol_t; + +union efi_load_file_protocol { + struct { + efi_status_t (__efiapi *load_file)(efi_load_file_protocol_t *, + efi_device_path_protocol_t *, + bool, unsigned long *, void *); + }; + struct { + u32 load_file; + } mixed_mode; +}; typedef efi_status_t efi_simple_file_system_protocol_open_volume( efi_simple_file_system_protocol_t *this, @@ -544,7 +566,12 @@ typedef struct { efi_char16_t file_name[1]; } efi_file_info_t; +#define efi_fn_call(inst, func, ...) (inst)->func(__VA_ARGS__) #define efi_bs_call(func, ...) efi_system_table->boottime->func(__VA_ARGS__) #define efi_rs_call(func, ...) efi_system_table->runtime->func(__VA_ARGS__) +#define efi_call_proto(inst, func, ...) ({ \ + __typeof__(inst) __inst = (inst); \ + efi_fn_call(__inst, func, __inst, ##__VA_ARGS__); \ +}) #endif /* __LINUX_UEFI_H */ From patchwork Tue Mar 5 16:46:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 13582722 Received: from out-175.mta0.migadu.com (out-175.mta0.migadu.com [91.218.175.175]) (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 8868ADDAE for ; Tue, 5 Mar 2024 16:46:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657221; cv=none; b=nxbwuRXvFWp4FXYhynHPRsKuJW8q8v87eW+8e5gaIH2NuFUJseXt0mcilQI2NOp3Dhn19+tJGkkrKLZGQvZdvlqjmLZBXEjcVK6LFh57ipj/twWe4I6/WB9kfkG6bmTRYLsLFfOzCb6wGQ8lUnCoy7D5TPpKNezAZf33SwpmSho= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657221; c=relaxed/simple; bh=yJc3tu6HHxziGlp2mMFCYKnmg2pzvSM8uqQWe6HEnfo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-type; b=By6afTUgCfa9h/C1q3jmzzYiPpiRctQWfCfs6dePKMfMoetssJip/Fmvj/dUUjXKz3nHcRNXxwbIUKtDM3Vx8ipxcbPlGAeD/o25O3BJVuLjekEcqvepoAjjK2yKSvFCcHwtYftN9cdX0+9dQm2OjXYahARrjswQquYGW7R6Z7A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=ibPNOD7M; arc=none smtp.client-ip=91.218.175.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="ibPNOD7M" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1709657217; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JMFQJachdD4MGpLHrdXbqKLfNhIFHRyDk1y7TwCZKgY=; b=ibPNOD7M0rOQYi59nh+3ApFjDyWl20Gs91qWH6XUlo3TI4OnI4bHL9lWzI0vCxkvm6svzH lH0MTIUAcfhvbm/gnJhTfFIpayCF1/TGs7AdD6YX5p7hVJCiL7Y1fUESaxbUrZ6DdxHrMQ CjNaq1E/4UtSAO8iaGypSE8muE/bvpc= From: Andrew Jones To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: alexandru.elisei@arm.com, eric.auger@redhat.com, nikos.nikoleris@arm.com, shahuang@redhat.com, pbonzini@redhat.com, thuth@redhat.com Subject: [kvm-unit-tests PATCH v3 10/18] arm64: efi: Allow running tests directly Date: Tue, 5 Mar 2024 17:46:34 +0100 Message-ID: <20240305164623.379149-30-andrew.jones@linux.dev> In-Reply-To: <20240305164623.379149-20-andrew.jones@linux.dev> References: <20240305164623.379149-20-andrew.jones@linux.dev> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-type: text/plain X-Migadu-Flow: FLOW_OUT Since it's possible to run tests with UEFI and the QEMU -kernel option (and now the DTB will be found and even the environ will be set up from an initrd if given with the -initrd option), then we can skip the loading of EFI tests into a file system and booting to the shell to run them. Just run them directly. Running directly is waaaaaay faster than booting the shell first. We keep the UEFI shell as the default behavior, though, and provide a new configure option to enable the direct running. Reviewed-by: Nikos Nikoleris Signed-off-by: Andrew Jones --- arm/efi/run | 18 +++++++++++++++--- arm/run | 4 +++- configure | 17 +++++++++++++++++ 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/arm/efi/run b/arm/efi/run index b7a8418a07f8..f07a6e55c381 100755 --- a/arm/efi/run +++ b/arm/efi/run @@ -18,10 +18,12 @@ elif [ -f /usr/share/edk2/aarch64/QEMU_EFI.silent.fd ]; then DEFAULT_UEFI=/usr/share/edk2/aarch64/QEMU_EFI.silent.fd fi +KERNEL_NAME=$1 + : "${EFI_SRC:=$TEST_DIR}" : "${EFI_UEFI:=$DEFAULT_UEFI}" : "${EFI_TEST:=efi-tests}" -: "${EFI_CASE:=$(basename $1 .efi)}" +: "${EFI_CASE:=$(basename $KERNEL_NAME .efi)}" : "${EFI_TESTNAME:=$TESTNAME}" : "${EFI_TESTNAME:=$EFI_CASE}" : "${EFI_CASE_DIR:="$EFI_TEST/$EFI_TESTNAME"}" @@ -49,6 +51,9 @@ while (( "$#" )); do shift 1 fi done +if [ "$EFI_USE_ACPI" != "y" ]; then + qemu_args+=(-machine acpi=off) +fi if [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then EFI_CASE_DIR="$EFI_TEST/dummy" @@ -67,7 +72,6 @@ uefi_shell_run() cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_DIR/" echo "@echo -off" > "$EFI_CASE_DIR/startup.nsh" if [ "$EFI_USE_ACPI" != "y" ]; then - qemu_args+=(-machine acpi=off) FDT_BASENAME="dtb" UEFI_SHELL_RUN=y $TEST_DIR/run -machine dumpdtb="$EFI_CASE_DIR/$FDT_BASENAME" "${qemu_args[@]}" echo "setvar fdtfile -guid $EFI_VAR_GUID -rt =L\"$FDT_BASENAME\"" >> "$EFI_CASE_DIR/startup.nsh" @@ -80,4 +84,12 @@ uefi_shell_run() "${qemu_args[@]}" } -uefi_shell_run +if [ "$EFI_DIRECT" = "y" ]; then + $TEST_DIR/run \ + $KERNEL_NAME \ + -append "$(basename $KERNEL_NAME) ${cmd_args[@]}" \ + -bios "$EFI_UEFI" \ + "${qemu_args[@]}" +else + uefi_shell_run +fi diff --git a/arm/run b/arm/run index 40c2ca66ba7e..efdd44ce86a7 100755 --- a/arm/run +++ b/arm/run @@ -60,7 +60,7 @@ if ! $qemu $M -chardev '?' | grep -q testdev; then exit 2 fi -if [ "$UEFI_SHELL_RUN" != "y" ]; then +if [ "$UEFI_SHELL_RUN" != "y" ] && [ "$EFI_USE_ACPI" != "y" ]; then chr_testdev='-device virtio-serial-device' chr_testdev+=' -device virtconsole,chardev=ctd -chardev testdev,id=ctd' fi @@ -77,6 +77,8 @@ command="$(migration_cmd) $(timeout_cmd) $command" if [ "$UEFI_SHELL_RUN" = "y" ]; then ENVIRON_DEFAULT=n run_qemu_status $command "$@" +elif [ "$EFI_USE_ACPI" = "y" ]; then + run_qemu_status $command -kernel "$@" else run_qemu $command -kernel "$@" fi diff --git a/configure b/configure index 4a00bdfeb8fd..51edee8cd21b 100755 --- a/configure +++ b/configure @@ -32,6 +32,7 @@ enable_dump=no page_size= earlycon= efi= +efi_direct= # Enable -Werror by default for git repositories only (i.e. developer builds) if [ -e "$srcdir"/.git ]; then @@ -90,6 +91,11 @@ usage() { --[enable|disable]-efi Boot and run from UEFI (disabled by default, x86_64 and arm64 only) --[enable|disable]-werror Select whether to compile with the -Werror compiler flag + --[enable|disable]-efi-direct + Select whether to run EFI tests directly with QEMU's -kernel + option. When not enabled, tests will be placed in an EFI file + system and run from the UEFI shell. Ignored when efi isn't enabled. + (arm64 only) EOF exit 1 } @@ -169,6 +175,12 @@ while [[ "$1" = -* ]]; do --disable-efi) efi=n ;; + --enable-efi-direct) + efi_direct=y + ;; + --disable-efi-direct) + efi_direct=n + ;; --enable-werror) werror=-Werror ;; @@ -186,6 +198,10 @@ while [[ "$1" = -* ]]; do esac done +if [ -z "$efi" ] || [ "$efi" = "n" ]; then + [ "$efi_direct" = "y" ] && efi_direct= +fi + if [ -n "$host_key_document" ] && [ ! -f "$host_key_document" ]; then echo "Host key document doesn't exist at the specified location." exit 1 @@ -428,6 +444,7 @@ GENPROTIMG=${GENPROTIMG-genprotimg} HOST_KEY_DOCUMENT=$host_key_document CONFIG_DUMP=$enable_dump CONFIG_EFI=$efi +EFI_DIRECT=$efi_direct CONFIG_WERROR=$werror GEN_SE_HEADER=$gen_se_header EOF From patchwork Tue Mar 5 16:46:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 13582723 Received: from out-178.mta0.migadu.com (out-178.mta0.migadu.com [91.218.175.178]) (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 7F92412B95 for ; Tue, 5 Mar 2024 16:47:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657223; cv=none; b=ELB2PZaQPI/nwFiPXWcl8aRc7ef5hjxPuWj0cwC1Nb/Sl+0G3uCYXknCx5B88bBt0Uyz4zmdpdnI5dzshcdqNqfj++zlasfrYEE3MTTZ00VrSruRU93U0MB/xasBIuFWo7amfv0iN4bwnhArzxTnNCGfB8R7OMPlWdDEwHDbVDE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657223; c=relaxed/simple; bh=BRyzR1N6qoiuhdGPe3Cildp1pqOUJI+St6VAbDZtbpY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-type; b=Lay9Jdblvqx3tzSWj2Ff5zyl50nSSvJgGtOKw9hz+///LWcBn/t0ChKbdH020n8Zd7K8Hig/3kLNgtr9bfoG0798dyOl7XKmYn446I+Dpe6/I042yTplxAnF4BO5GtjN2phB8S08+lBIp9hWAhMLSsiO59garYYwlUBBv1bHKtM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=wOTt9O0L; arc=none smtp.client-ip=91.218.175.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="wOTt9O0L" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1709657219; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Dqc8QWk0JmKETB1/0K1/J4fZdeEt4YcHxzr8v1+J8yM=; b=wOTt9O0Lcm3ypMms9VBtAIinC0mxuJpeXabPXeoyZJmKhEhREOmlaiaWBfs5zFkqcUGYoZ DK2Y5u4IpxNp//X8ernPGLtfaWSf1PPHtu9QVla4VLra+4y3ltR6u1mDEPCy1Oq2Kv4QIx mEbznVRdxX+kKOidk9iIQcSz/eSWMjc= From: Andrew Jones To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: alexandru.elisei@arm.com, eric.auger@redhat.com, nikos.nikoleris@arm.com, shahuang@redhat.com, pbonzini@redhat.com, thuth@redhat.com Subject: [kvm-unit-tests PATCH v3 11/18] arm/arm64: Factor out some initial setup Date: Tue, 5 Mar 2024 17:46:35 +0100 Message-ID: <20240305164623.379149-31-andrew.jones@linux.dev> In-Reply-To: <20240305164623.379149-20-andrew.jones@linux.dev> References: <20240305164623.379149-20-andrew.jones@linux.dev> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-type: text/plain X-Migadu-Flow: FLOW_OUT Factor out some initial setup code into separate functions in order to share more code between setup() and setup_efi(). Reviewed-by: Nikos Nikoleris Signed-off-by: Andrew Jones --- lib/arm/setup.c | 82 +++++++++++++++++++++++++++++-------------------- 1 file changed, 48 insertions(+), 34 deletions(-) diff --git a/lib/arm/setup.c b/lib/arm/setup.c index 0382cbdaf5a1..80f952377cf9 100644 --- a/lib/arm/setup.c +++ b/lib/arm/setup.c @@ -182,32 +182,57 @@ static void mem_init(phys_addr_t freemem_start) page_alloc_ops_enable(); } -void setup(const void *fdt, phys_addr_t freemem_start) +static void freemem_push_fdt(void **freemem, const void *fdt) { - void *freemem; - const char *bootargs, *tmp; u32 fdt_size; int ret; - assert(sizeof(long) == 8 || freemem_start < (3ul << 30)); - freemem = (void *)(unsigned long)freemem_start; - - /* Move the FDT to the base of free memory */ fdt_size = fdt_totalsize(fdt); - ret = fdt_move(fdt, freemem, fdt_size); + ret = fdt_move(fdt, *freemem, fdt_size); assert(ret == 0); - ret = dt_init(freemem); + ret = dt_init(*freemem); assert(ret == 0); - freemem += fdt_size; + *freemem += fdt_size; +} + +static void freemem_push_dt_initrd(void **freemem) +{ + const char *tmp; + int ret; - /* Move the initrd to the top of the FDT */ ret = dt_get_initrd(&tmp, &initrd_size); assert(ret == 0 || ret == -FDT_ERR_NOTFOUND); if (ret == 0) { - initrd = freemem; + initrd = *freemem; memmove(initrd, tmp, initrd_size); - freemem += initrd_size; + *freemem += initrd_size; } +} + +static void initrd_setup(void) +{ + char *env; + + if (!initrd) + return; + + /* environ is currently the only file in the initrd */ + env = malloc(initrd_size); + memcpy(env, initrd, initrd_size); + setup_env(env, initrd_size); +} + +void setup(const void *fdt, phys_addr_t freemem_start) +{ + void *freemem; + const char *bootargs; + int ret; + + assert(sizeof(long) == 8 || freemem_start < (3ul << 30)); + freemem = (void *)(unsigned long)freemem_start; + + freemem_push_fdt(&freemem, fdt); + freemem_push_dt_initrd(&freemem); memregions_init(arm_mem_regions, NR_MEM_REGIONS); memregions_add_dt_regions(MAX_DT_MEM_REGIONS); @@ -229,12 +254,7 @@ void setup(const void *fdt, phys_addr_t freemem_start) assert(ret == 0 || ret == -FDT_ERR_NOTFOUND); setup_args_progname(bootargs); - if (initrd) { - /* environ is currently the only file in the initrd */ - char *env = malloc(initrd_size); - memcpy(env, initrd, initrd_size); - setup_env(env, initrd_size); - } + initrd_setup(); if (!(auxinfo.flags & AUXINFO_MMU_OFF)) setup_vm(); @@ -277,7 +297,6 @@ static efi_status_t efi_mem_init(efi_bootinfo_t *efi_bootinfo) uintptr_t text = (uintptr_t)&_text, etext = ALIGN((uintptr_t)&_etext, 4096); uintptr_t data = (uintptr_t)&_data, edata = ALIGN((uintptr_t)&_edata, 4096); const void *fdt = efi_bootinfo->fdt; - int fdt_size, ret; /* * Record the largest free EFI_CONVENTIONAL_MEMORY region @@ -342,15 +361,15 @@ static efi_status_t efi_mem_init(efi_bootinfo_t *efi_bootinfo) } memregions_add(&r); } + if (fdt) { - /* Move the FDT to the base of free memory */ - fdt_size = fdt_totalsize(fdt); - ret = fdt_move(fdt, (void *)free_mem_start, fdt_size); - assert(ret == 0); - ret = dt_init((void *)free_mem_start); - assert(ret == 0); - free_mem_start += ALIGN(fdt_size, EFI_PAGE_SIZE); - free_mem_pages -= ALIGN(fdt_size, EFI_PAGE_SIZE) >> EFI_PAGE_SHIFT; + unsigned long old_start = free_mem_start; + void *freemem = (void *)free_mem_start; + + freemem_push_fdt(&freemem, fdt); + + free_mem_start = ALIGN((unsigned long)freemem, EFI_PAGE_SIZE); + free_mem_pages = (free_mem_start - old_start) >> EFI_PAGE_SHIFT; } __phys_end &= PHYS_MASK; @@ -418,13 +437,8 @@ efi_status_t setup_efi(efi_bootinfo_t *efi_bootinfo) io_init(); timer_save_state(); - if (initrd) { - /* environ is currently the only file in the initrd */ - char *env = malloc(initrd_size); - memcpy(env, initrd, initrd_size); - setup_env(env, initrd_size); - } + initrd_setup(); if (!(auxinfo.flags & AUXINFO_MMU_OFF)) setup_vm(); From patchwork Tue Mar 5 16:46:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 13582724 Received: from out-176.mta1.migadu.com (out-176.mta1.migadu.com [95.215.58.176]) (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 DBF86D268 for ; Tue, 5 Mar 2024 16:47:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657228; cv=none; b=FwOOFfduYqkWvVF0zvtLZdThScYHg39U/Tyqc+bB4H+2HFFchRNFnWvwSPHn50lKgL6f9iC/HVX1rVC8Y1Hm0+cSptEGrLuLhdEwU7uVy2KJIRNdOKOkgNF81uVSK5fG5Wl5FIbA6lPGXDyuLFPZfvvq/T0411ejziKKq4lZEqE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657228; c=relaxed/simple; bh=h6O3seZiA9b8+3PlXp4vhDu0pZ/VP4dGBA1KJ8NykTM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-type; b=EghM1Pwuh+cgnYGSUnSiSlVlS74Tm2TgImUD0wJXtN5PyB7jsy42UfPbxRpdDW1Lq1qBS88vtQLae7TKHiDQbLaLJqI3ow3L0TVSX3M8simjl38Ssh85GPbf6vK2lYE9gAF5I8XeZYsMeBUTV2E1f6ur9gPhPs9zoQNG8xijEec= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=lgEcWn07; arc=none smtp.client-ip=95.215.58.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="lgEcWn07" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1709657225; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=BwLFefKq+oA9hZOQVmfzE0aV7cVOxT8zoDlTx543JRg=; b=lgEcWn07uME9WllqvL1VzgxqsFqZ07Rxnz+gHLLsqsLA7morooWt/pnX7rqTjLdMioXcOP 7gQrSBCxVzZMBvKD3PAZb9kyz4NlHw/3JB9DarGPukGNYWhjbZPXR/0wqrtjJmtn3THKed hYPGESL6HBJKKXbCt87EM6BSxkRAQi4= From: Andrew Jones To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: alexandru.elisei@arm.com, eric.auger@redhat.com, nikos.nikoleris@arm.com, shahuang@redhat.com, pbonzini@redhat.com, thuth@redhat.com Subject: [kvm-unit-tests PATCH v3 12/18] arm/arm64: Factor out allocator init from mem_init Date: Tue, 5 Mar 2024 17:46:36 +0100 Message-ID: <20240305164623.379149-32-andrew.jones@linux.dev> In-Reply-To: <20240305164623.379149-20-andrew.jones@linux.dev> References: <20240305164623.379149-20-andrew.jones@linux.dev> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-type: text/plain X-Migadu-Flow: FLOW_OUT The allocator init is identical for mem_init() and efi_mem_init(). Share it. Reviewed-by: Nikos Nikoleris Signed-off-by: Andrew Jones --- lib/arm/setup.c | 46 ++++++++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/lib/arm/setup.c b/lib/arm/setup.c index 80f952377cf9..7f2043907634 100644 --- a/lib/arm/setup.c +++ b/lib/arm/setup.c @@ -136,9 +136,28 @@ static void arm_memregions_add_assumed(void) #endif } -static void mem_init(phys_addr_t freemem_start) +static void mem_allocator_init(phys_addr_t freemem_start, phys_addr_t freemem_end) { phys_addr_t base, top; + + freemem_start = PAGE_ALIGN(freemem_start); + freemem_end &= PAGE_MASK; + + phys_alloc_init(freemem_start, freemem_end - freemem_start); + phys_alloc_set_minimum_alignment(SMP_CACHE_BYTES); + + phys_alloc_get_unused(&base, &top); + base = PAGE_ALIGN(base); + top &= PAGE_MASK; + assert(sizeof(long) == 8 || !(base >> 32)); + if (sizeof(long) != 8 && (top >> 32) != 0) + top = ((uint64_t)1 << 32); + page_alloc_init_area(0, base >> PAGE_SHIFT, top >> PAGE_SHIFT); + page_alloc_ops_enable(); +} + +static void mem_init(phys_addr_t freemem_start) +{ struct mem_region *freemem, *r, mem = { .start = (phys_addr_t)-1, }; @@ -169,17 +188,7 @@ static void mem_init(phys_addr_t freemem_start) __phys_offset = mem.start; /* PHYS_OFFSET */ __phys_end = mem.end; /* PHYS_END */ - phys_alloc_init(freemem_start, freemem->end - freemem_start); - phys_alloc_set_minimum_alignment(SMP_CACHE_BYTES); - - phys_alloc_get_unused(&base, &top); - base = PAGE_ALIGN(base); - top = top & PAGE_MASK; - assert(sizeof(long) == 8 || !(base >> 32)); - if (sizeof(long) != 8 && (top >> 32) != 0) - top = ((uint64_t)1 << 32); - page_alloc_init_area(0, base >> PAGE_SHIFT, top >> PAGE_SHIFT); - page_alloc_ops_enable(); + mem_allocator_init(freemem_start, freemem->end); } static void freemem_push_fdt(void **freemem, const void *fdt) @@ -292,7 +301,6 @@ static efi_status_t efi_mem_init(efi_bootinfo_t *efi_bootinfo) struct efi_boot_memmap *map = &(efi_bootinfo->mem_map); efi_memory_desc_t *buffer = *map->map; efi_memory_desc_t *d = NULL; - phys_addr_t base, top; struct mem_region r; uintptr_t text = (uintptr_t)&_text, etext = ALIGN((uintptr_t)&_etext, 4096); uintptr_t data = (uintptr_t)&_data, edata = ALIGN((uintptr_t)&_edata, 4096); @@ -380,17 +388,7 @@ static efi_status_t efi_mem_init(efi_bootinfo_t *efi_bootinfo) assert(sizeof(long) == 8 || free_mem_start < (3ul << 30)); - phys_alloc_init(free_mem_start, free_mem_pages << EFI_PAGE_SHIFT); - phys_alloc_set_minimum_alignment(SMP_CACHE_BYTES); - - phys_alloc_get_unused(&base, &top); - base = PAGE_ALIGN(base); - top = top & PAGE_MASK; - assert(sizeof(long) == 8 || !(base >> 32)); - if (sizeof(long) != 8 && (top >> 32) != 0) - top = ((uint64_t)1 << 32); - page_alloc_init_area(0, base >> PAGE_SHIFT, top >> PAGE_SHIFT); - page_alloc_ops_enable(); + mem_allocator_init(free_mem_start, free_mem_start + (free_mem_pages << EFI_PAGE_SHIFT)); return EFI_SUCCESS; } From patchwork Tue Mar 5 16:46:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 13582725 Received: from out-180.mta0.migadu.com (out-180.mta0.migadu.com [91.218.175.180]) (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 812DAD271 for ; Tue, 5 Mar 2024 16:47:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657235; cv=none; b=umNIgBWQHlGN5nnnmhPIRzyPY+Qfu4F55DhNJRHM8BCuYM9EhxwBSR2CgIbJlxJEwSl1JLZ1zDNp3xaMS95o/FltM2bFBrq2CxDE2WNNeN8zkblk03gr2uP5H8titQW+AlN5PwRM2am0SSKNYDnx2knu47PXfhIWtmBfAZzMPcE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657235; c=relaxed/simple; bh=j1EKqWAzlpHa1+kUnwwWvWM65Jsb0fYM/Z//tj53g+s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-type; b=ajXf9TWaVS/DTN1+WvMqVCMqoaZp6/qYU01/bIWHIXgBNYjsFPJEBRmXTW+D6TponkCchNzJd1mgCj7jX5SbakkUW/XHwEdPuW060W2X6qog2pMNJaahwyO71sXNg5Dwb/tesRT2B0LUVu/eMDKsjIEhsZ/QjghCqMTVFskZ9cQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=Ov/y7R7u; arc=none smtp.client-ip=91.218.175.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="Ov/y7R7u" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1709657229; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=dH+fV3gyfx8+OxNIUICQcE5u8Z7VrJ8xj0gMnCCl3o8=; b=Ov/y7R7uEwoY6gp23HjZQg9WEPSB6H7UUZc+F4G7x8DD+USoBBXjW3yrthYv/Gzik7TuX6 v/bJpsqgFNNyZd3jvPfKblpIDOyc6WDqKQ5u223u13pocPZK22/NGZbfoOf5fyAhuHq6UZ aVqJrVdhPsI2d2vyQxqtXuhVfUwEPlo= From: Andrew Jones To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: alexandru.elisei@arm.com, eric.auger@redhat.com, nikos.nikoleris@arm.com, shahuang@redhat.com, pbonzini@redhat.com, thuth@redhat.com Subject: [kvm-unit-tests PATCH v3 13/18] arm64: Simplify efi_mem_init Date: Tue, 5 Mar 2024 17:46:37 +0100 Message-ID: <20240305164623.379149-33-andrew.jones@linux.dev> In-Reply-To: <20240305164623.379149-20-andrew.jones@linux.dev> References: <20240305164623.379149-20-andrew.jones@linux.dev> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-type: text/plain X-Migadu-Flow: FLOW_OUT Reduce the EFI mem_map loop to only setting flags and finding the largest free memory region. Then, apply memregions_split() for the code/data region split (which requires ensuring _etext is page aligned). Finally, do the rest of the things that used to be done in the EFI mem_map loop in a separate mem_region loop. Reviewed-by: Nikos Nikoleris Signed-off-by: Andrew Jones --- arm/efi/elf_aarch64_efi.lds | 1 + lib/arm/setup.c | 45 +++++++++++++++++-------------------- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/arm/efi/elf_aarch64_efi.lds b/arm/efi/elf_aarch64_efi.lds index 836d98255d88..7a4192b77900 100644 --- a/arm/efi/elf_aarch64_efi.lds +++ b/arm/efi/elf_aarch64_efi.lds @@ -13,6 +13,7 @@ SECTIONS *(.rodata*) . = ALIGN(16); } + . = ALIGN(4096); _etext = .; _text_size = . - _text; .dynamic : { *(.dynamic) } diff --git a/lib/arm/setup.c b/lib/arm/setup.c index 7f2043907634..b8c88b5bf011 100644 --- a/lib/arm/setup.c +++ b/lib/arm/setup.c @@ -301,9 +301,7 @@ static efi_status_t efi_mem_init(efi_bootinfo_t *efi_bootinfo) struct efi_boot_memmap *map = &(efi_bootinfo->mem_map); efi_memory_desc_t *buffer = *map->map; efi_memory_desc_t *d = NULL; - struct mem_region r; - uintptr_t text = (uintptr_t)&_text, etext = ALIGN((uintptr_t)&_etext, 4096); - uintptr_t data = (uintptr_t)&_data, edata = ALIGN((uintptr_t)&_edata, 4096); + struct mem_region r, *code, *data; const void *fdt = efi_bootinfo->fdt; /* @@ -337,21 +335,7 @@ static efi_status_t efi_mem_init(efi_bootinfo_t *efi_bootinfo) r.flags = MR_F_IO; break; case EFI_LOADER_CODE: - if (r.start <= text && r.end > text) { - /* This is the unit test region. Flag the code separately. */ - phys_addr_t tmp = r.end; - - assert(etext <= data); - assert(edata <= r.end); - r.flags = MR_F_CODE; - r.end = data; - memregions_add(&r); - r.start = data; - r.end = tmp; - r.flags = 0; - } else { - r.flags = MR_F_RESERVED; - } + r.flags = MR_F_CODE; break; case EFI_CONVENTIONAL_MEMORY: if (free_mem_pages < d->num_pages) { @@ -361,15 +345,27 @@ static efi_status_t efi_mem_init(efi_bootinfo_t *efi_bootinfo) break; } - if (!(r.flags & MR_F_IO)) { - if (r.start < __phys_offset) - __phys_offset = r.start; - if (r.end > __phys_end) - __phys_end = r.end; - } memregions_add(&r); } + memregions_split((unsigned long)&_etext, &code, &data); + assert(code && (code->flags & MR_F_CODE)); + if (data) + data->flags &= ~MR_F_CODE; + + for (struct mem_region *m = mem_regions; m->end; ++m) { + if (m != code && (m->flags & MR_F_CODE)) + m->flags = MR_F_RESERVED; + + if (!(m->flags & MR_F_IO)) { + if (m->start < __phys_offset) + __phys_offset = m->start; + if (m->end > __phys_end) + __phys_end = m->end; + } + } + __phys_end &= PHYS_MASK; + if (fdt) { unsigned long old_start = free_mem_start; void *freemem = (void *)free_mem_start; @@ -380,7 +376,6 @@ static efi_status_t efi_mem_init(efi_bootinfo_t *efi_bootinfo) free_mem_pages = (free_mem_start - old_start) >> EFI_PAGE_SHIFT; } - __phys_end &= PHYS_MASK; asm_mmu_disable(); if (free_mem_pages == 0) From patchwork Tue Mar 5 16:46:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 13582726 Received: from out-189.mta1.migadu.com (out-189.mta1.migadu.com [95.215.58.189]) (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 77DF2D268 for ; Tue, 5 Mar 2024 16:47:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.189 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657235; cv=none; b=F6twIYpDQbwMTkmu32RjJ+OxXynEffvS8e6Qu4TAQF9mGKs34Bj/VXxsTELUDQ3rnjrRDRMuzS9JZBHPVI55D/OrybASX+3cS4NwvRoYGQMfWFBBxc84gS4uKL7x07KuoeV8w8BzDvTvXOXJLkKlsOehjc691q960oGR79NrnkY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657235; c=relaxed/simple; bh=nmehJeG09arD0MaJTS0r158jHqTVKDhu7zVwG0sIfPc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-type; b=DtLgCt1bn87Th9qaM2zxuzoX9D33ywtUCeoDKGZucQp+epKfm5ySPpgoaw3ivp4ciCbwK1LTG+Hqoch2uso3B23triP3bwMBshy8gNWDR5MjTQSq1zmN5YbHTFzWp+UWrNz1Uu6nyjXkX0kp+1y8PIGfHS2E3ALO0Yd4zx/Jr1c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=jsDKjqAc; arc=none smtp.client-ip=95.215.58.189 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="jsDKjqAc" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1709657231; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=WkHOaSsaLXlA1l6WB933kJgmde4VgVqbGMRv3lcOX9s=; b=jsDKjqAcreVuwFsj6Beqfgv+XDD6ozxJSmas7dXIPZuI8SSzHpSK50TSKqv1OlzUyuJ5HY E1IPaEZPu7VYRReGEN7ve8JlmxjWT7C3qa9nqB7amAxLvCgtUvGRc+w8QugftAnYh6jRwv 06xFlq++tQDt/wxXuRkGcGfMGp6OXnY= From: Andrew Jones To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: alexandru.elisei@arm.com, eric.auger@redhat.com, nikos.nikoleris@arm.com, shahuang@redhat.com, pbonzini@redhat.com, thuth@redhat.com Subject: [kvm-unit-tests PATCH v3 14/18] arm64: Add memregions_efi_init Date: Tue, 5 Mar 2024 17:46:38 +0100 Message-ID: <20240305164623.379149-34-andrew.jones@linux.dev> In-Reply-To: <20240305164623.379149-20-andrew.jones@linux.dev> References: <20240305164623.379149-20-andrew.jones@linux.dev> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-type: text/plain X-Migadu-Flow: FLOW_OUT Provide a memregions function which initialized memregions from an EFI memory map. Add a new memregions flag (MR_F_PERSISTENT) for EFI_PERSISTENT_MEMORY since that type should not be reserved, but it should also be distinct from conventional memory. The function also points out the largest conventional memory region by returning a pointer to it in the freemem parameter. Immediately apply this function to arm64's efi_mem_init(). riscv will make use of it as well. Reviewed-by: Nikos Nikoleris Signed-off-by: Andrew Jones --- lib/arm/setup.c | 76 ++++++++---------------------------------------- lib/memregions.c | 51 ++++++++++++++++++++++++++++++++ lib/memregions.h | 6 ++++ 3 files changed, 69 insertions(+), 64 deletions(-) diff --git a/lib/arm/setup.c b/lib/arm/setup.c index b8c88b5bf011..f5dbb48e721a 100644 --- a/lib/arm/setup.c +++ b/lib/arm/setup.c @@ -295,58 +295,13 @@ static efi_status_t setup_rsdp(efi_bootinfo_t *efi_bootinfo) static efi_status_t efi_mem_init(efi_bootinfo_t *efi_bootinfo) { - int i; - unsigned long free_mem_pages = 0; - unsigned long free_mem_start = 0; - struct efi_boot_memmap *map = &(efi_bootinfo->mem_map); - efi_memory_desc_t *buffer = *map->map; - efi_memory_desc_t *d = NULL; - struct mem_region r, *code, *data; - const void *fdt = efi_bootinfo->fdt; - - /* - * Record the largest free EFI_CONVENTIONAL_MEMORY region - * which will be used to set up the memory allocator, so that - * the memory allocator can work in the largest free - * continuous memory region. - */ - for (i = 0; i < *(map->map_size); i += *(map->desc_size)) { - d = (efi_memory_desc_t *)(&((u8 *)buffer)[i]); - - r.start = d->phys_addr; - r.end = d->phys_addr + d->num_pages * EFI_PAGE_SIZE; - r.flags = 0; - - switch (d->type) { - case EFI_RESERVED_TYPE: - case EFI_LOADER_DATA: - case EFI_BOOT_SERVICES_CODE: - case EFI_BOOT_SERVICES_DATA: - case EFI_RUNTIME_SERVICES_CODE: - case EFI_RUNTIME_SERVICES_DATA: - case EFI_UNUSABLE_MEMORY: - case EFI_ACPI_RECLAIM_MEMORY: - case EFI_ACPI_MEMORY_NVS: - case EFI_PAL_CODE: - r.flags = MR_F_RESERVED; - break; - case EFI_MEMORY_MAPPED_IO: - case EFI_MEMORY_MAPPED_IO_PORT_SPACE: - r.flags = MR_F_IO; - break; - case EFI_LOADER_CODE: - r.flags = MR_F_CODE; - break; - case EFI_CONVENTIONAL_MEMORY: - if (free_mem_pages < d->num_pages) { - free_mem_pages = d->num_pages; - free_mem_start = d->phys_addr; - } - break; - } + struct mem_region *freemem_mr = NULL, *code, *data; + phys_addr_t freemem_start; + void *freemem; - memregions_add(&r); - } + memregions_efi_init(&efi_bootinfo->mem_map, &freemem_mr); + if (!freemem_mr) + return EFI_OUT_OF_RESOURCES; memregions_split((unsigned long)&_etext, &code, &data); assert(code && (code->flags & MR_F_CODE)); @@ -366,24 +321,17 @@ static efi_status_t efi_mem_init(efi_bootinfo_t *efi_bootinfo) } __phys_end &= PHYS_MASK; - if (fdt) { - unsigned long old_start = free_mem_start; - void *freemem = (void *)free_mem_start; + freemem = (void *)PAGE_ALIGN(freemem_mr->start); - freemem_push_fdt(&freemem, fdt); + if (efi_bootinfo->fdt) + freemem_push_fdt(&freemem, efi_bootinfo->fdt); - free_mem_start = ALIGN((unsigned long)freemem, EFI_PAGE_SIZE); - free_mem_pages = (free_mem_start - old_start) >> EFI_PAGE_SHIFT; - } + freemem_start = PAGE_ALIGN((unsigned long)freemem); + assert(sizeof(long) == 8 || freemem_start < (3ul << 30)); asm_mmu_disable(); - if (free_mem_pages == 0) - return EFI_OUT_OF_RESOURCES; - - assert(sizeof(long) == 8 || free_mem_start < (3ul << 30)); - - mem_allocator_init(free_mem_start, free_mem_start + (free_mem_pages << EFI_PAGE_SHIFT)); + mem_allocator_init(freemem_start, freemem_mr->end); return EFI_SUCCESS; } diff --git a/lib/memregions.c b/lib/memregions.c index 96de86b27333..9cdbb639ab62 100644 --- a/lib/memregions.c +++ b/lib/memregions.c @@ -80,3 +80,54 @@ void memregions_add_dt_regions(size_t max_nr) }); } } + +#ifdef CONFIG_EFI +/* + * Add memory regions based on the EFI memory map. Also set a pointer to the + * memory region which corresponds to the largest EFI_CONVENTIONAL_MEMORY + * region, as that region is the largest free, continuous region, making it + * a good choice for the memory allocator. + */ +void memregions_efi_init(struct efi_boot_memmap *mem_map, + struct mem_region **freemem) +{ + u8 *buffer = (u8 *)*mem_map->map; + u64 freemem_pages = 0; + + *freemem = NULL; + + for (int i = 0; i < *mem_map->map_size; i += *mem_map->desc_size) { + efi_memory_desc_t *d = (efi_memory_desc_t *)&buffer[i]; + struct mem_region r = { + .start = d->phys_addr, + .end = d->phys_addr + d->num_pages * EFI_PAGE_SIZE, + .flags = 0, + }; + + switch (d->type) { + case EFI_MEMORY_MAPPED_IO: + case EFI_MEMORY_MAPPED_IO_PORT_SPACE: + r.flags = MR_F_IO; + break; + case EFI_LOADER_CODE: + r.flags = MR_F_CODE; + break; + case EFI_PERSISTENT_MEMORY: + r.flags = MR_F_PERSISTENT; + break; + case EFI_CONVENTIONAL_MEMORY: + if (freemem_pages < d->num_pages) { + freemem_pages = d->num_pages; + *freemem = memregions_add(&r); + continue; + } + break; + default: + r.flags = MR_F_RESERVED; + break; + } + + memregions_add(&r); + } +} +#endif /* CONFIG_EFI */ diff --git a/lib/memregions.h b/lib/memregions.h index 9a8e33182fe5..1600530ad7bf 100644 --- a/lib/memregions.h +++ b/lib/memregions.h @@ -9,6 +9,7 @@ #define MR_F_IO BIT(0) #define MR_F_CODE BIT(1) #define MR_F_RESERVED BIT(2) +#define MR_F_PERSISTENT BIT(3) #define MR_F_UNKNOWN BIT(31) struct mem_region { @@ -26,4 +27,9 @@ uint32_t memregions_get_flags(phys_addr_t paddr); void memregions_split(phys_addr_t addr, struct mem_region **r1, struct mem_region **r2); void memregions_add_dt_regions(size_t max_nr); +#ifdef CONFIG_EFI +#include +void memregions_efi_init(struct efi_boot_memmap *mem_map, struct mem_region **freemem); +#endif + #endif /* _MEMREGIONS_H_ */ From patchwork Tue Mar 5 16:46:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 13582727 Received: from out-181.mta1.migadu.com (out-181.mta1.migadu.com [95.215.58.181]) (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 E0A0F17991 for ; Tue, 5 Mar 2024 16:47:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657237; cv=none; b=uVnZSUwfP2V0wnchd+dzqvi2TOOXoYC05/86PiSF/SHUpAOfe4AYEp6RwzqB0ixmVRGt43xQk3/qMxa2X1TViqKWQCVKMDZBgReh1gXt3DxhIw752Ih0DTazxjWVEe2Od7TXLz9vNUtRVrelxdBcNPqmJPZKUaq4MUsnAvqevZE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657237; c=relaxed/simple; bh=XBJZp6ep8E7+cVBx43W9FeQM1BKgBcJ15SCjBL3J220=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-type; b=kk63+Wj1w3eUFWECYp1zbjBPH3tyym2PM4vIvWmWsWaEhh0le87N2VBm7RAU9NDOZGm6dGRTAf3zb8h19/FTbb37cv/kAbB2JVr0nrf3b4G1gtaQhDZcYfl2TxsmPzPzg2bWE++RN1cGXM2IdXbo+RVphiwE6FNtMa+vgGVxYbA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=AXZXHZqC; arc=none smtp.client-ip=95.215.58.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="AXZXHZqC" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1709657234; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=vJm1m+a6ogkgQ7YvI/xJOAAFGjcodxS9hnq7BUF+HMU=; b=AXZXHZqCY0XghW3jF/URRyYKeBvrwwlGMxv/UQ9paHtzEe2qVaeBCiBeI2v8oLmYAwHYsA C8FhONQ2TwG5VUXw+FR3esJ83DqA4IiYByn3ljpffg7dAoNycHsa+y5nahUf2WR4nobqDS j1pgJFxqtkcK3aMRaSVH0NaCloYepUc= From: Andrew Jones To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: alexandru.elisei@arm.com, eric.auger@redhat.com, nikos.nikoleris@arm.com, shahuang@redhat.com, pbonzini@redhat.com, thuth@redhat.com Subject: [kvm-unit-tests PATCH v3 15/18] arm64: efi: Don't map reserved regions Date: Tue, 5 Mar 2024 17:46:39 +0100 Message-ID: <20240305164623.379149-35-andrew.jones@linux.dev> In-Reply-To: <20240305164623.379149-20-andrew.jones@linux.dev> References: <20240305164623.379149-20-andrew.jones@linux.dev> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-type: text/plain X-Migadu-Flow: FLOW_OUT We shouldn't need to map all the regions that the EFI memory map contains. Just map EFI_LOADER_CODE and EFI_LOADER_DATA, since those are for the loaded unit test, and any region types which could be used by the unit test for its own memory allocations. We still map EFI_BOOT_SERVICES_DATA since the primary stack is on a region of that type. In a later patch we'll switch to a stack we allocate ourselves to drop that one too. Reviewed-by: Nikos Nikoleris Signed-off-by: Andrew Jones --- lib/arm/mmu.c | 6 +----- lib/arm/setup.c | 4 ++-- lib/memregions.c | 8 ++++++++ 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/arm/mmu.c b/lib/arm/mmu.c index eb5e82a95f06..9dce7da85709 100644 --- a/lib/arm/mmu.c +++ b/lib/arm/mmu.c @@ -221,12 +221,8 @@ void *setup_mmu(phys_addr_t phys_end, void *unused) mmu_idmap = alloc_page(); for (r = mem_regions; r->end; ++r) { - if (r->flags & MR_F_IO) { + if (r->flags & (MR_F_IO | MR_F_RESERVED)) { continue; - } else if (r->flags & MR_F_RESERVED) { - /* Reserved pages need to be writable for whatever reserved them */ - mmu_set_range_ptes(mmu_idmap, r->start, r->start, r->end, - __pgprot(PTE_WBWA)); } else if (r->flags & MR_F_CODE) { /* armv8 requires code shared between EL1 and EL0 to be read-only */ mmu_set_range_ptes(mmu_idmap, r->start, r->start, r->end, diff --git a/lib/arm/setup.c b/lib/arm/setup.c index f5dbb48e721a..50a3bb65d865 100644 --- a/lib/arm/setup.c +++ b/lib/arm/setup.c @@ -309,8 +309,8 @@ static efi_status_t efi_mem_init(efi_bootinfo_t *efi_bootinfo) data->flags &= ~MR_F_CODE; for (struct mem_region *m = mem_regions; m->end; ++m) { - if (m != code && (m->flags & MR_F_CODE)) - m->flags = MR_F_RESERVED; + if (m != code) + assert(!(m->flags & MR_F_CODE)); if (!(m->flags & MR_F_IO)) { if (m->start < __phys_offset) diff --git a/lib/memregions.c b/lib/memregions.c index 9cdbb639ab62..3c6f751eb4f2 100644 --- a/lib/memregions.c +++ b/lib/memregions.c @@ -112,6 +112,14 @@ void memregions_efi_init(struct efi_boot_memmap *mem_map, case EFI_LOADER_CODE: r.flags = MR_F_CODE; break; + case EFI_LOADER_DATA: + break; + case EFI_BOOT_SERVICES_DATA: + /* + * FIXME: This would ideally be MR_F_RESERVED, but the + * primary stack is in a region of this EFI type. + */ + break; case EFI_PERSISTENT_MEMORY: r.flags = MR_F_PERSISTENT; break; From patchwork Tue Mar 5 16:46:40 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 13582728 Received: from out-173.mta1.migadu.com (out-173.mta1.migadu.com [95.215.58.173]) (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 B486817BC9 for ; Tue, 5 Mar 2024 16:47:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657240; cv=none; b=esk8vr2pbr/ct4tnB4eVWAI2rGCA40veU0QFfjLD3K2ihShSaOEg+r7E2LyGBSWfPcvxniLyAvt6w+huXqs05xnGr07gCvVqS36BT2RYtXB6UmpiUeOCMUWQ/slCBV9IzlZigtmGLj/AWR9lbEEVuC/QY//Mr3jGFAxNjyvirgQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657240; c=relaxed/simple; bh=kfbksDLU0oleM1n33Ubs0/lI7k/baHZ41Yowlo/h3P4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-type; b=plDX0pwyvVa9UrspSp+h8Faa5mIeW+mZECOwP/HeyqgeprVVKyziuVTN2tRZN6pZ5RkTFZYJ1zGo1Oyppb0unjFuy7zcbLaF4Z7zySdjwLJ3n3dxQrYlsCp8MGmy4+HRsyX/fPsRLluiiCF1LQtzuIFlutqD4VuPzEt/3lJ3nK0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=OAmT32Y0; arc=none smtp.client-ip=95.215.58.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="OAmT32Y0" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1709657237; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=HQ4JA+Ier4tRHU77UaIWMK8ZDxNHJNGYciw82FNflFs=; b=OAmT32Y0Wh/VQvoBgz8tkirmX3Ztr3HYnqKP17a3jHEy8r+HvG2Z4DgRVTPePsEvAbOiLN UPygaXS9m06KcVA9NVktu8PjEnSFGzh3+S1Cf8B2WSZSj/Gre2xbQCR2AhEj/twXq/jazI hzYhwSOcCJQjsVKFwkldU5P8sniyodk= From: Andrew Jones To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: alexandru.elisei@arm.com, eric.auger@redhat.com, nikos.nikoleris@arm.com, shahuang@redhat.com, pbonzini@redhat.com, thuth@redhat.com Subject: [kvm-unit-tests PATCH v3 16/18] arm64: efi: Fix _start returns from failed _relocate Date: Tue, 5 Mar 2024 17:46:40 +0100 Message-ID: <20240305164623.379149-36-andrew.jones@linux.dev> In-Reply-To: <20240305164623.379149-20-andrew.jones@linux.dev> References: <20240305164623.379149-20-andrew.jones@linux.dev> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-type: text/plain X-Migadu-Flow: FLOW_OUT If _relocate fails we need to restore the frame pointer and the link register and return from _start. But we've pushed x0 and x1 on below the fp and lr, so, as the code was, we'd restore the wrong values. Revert parts of the code back to the way they are in gnu-efi and move the stack alignment below the loading of x0 and x1, after we've confirmed _relocate didn't fail. Fixes: d231b539a41f ("arm64: Use code from the gnu-efi when booting with EFI") Reviewed-by: Nikos Nikoleris Signed-off-by: Andrew Jones --- arm/efi/crt0-efi-aarch64.S | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/arm/efi/crt0-efi-aarch64.S b/arm/efi/crt0-efi-aarch64.S index 5d0dc04af54a..5fd3dc94dae8 100644 --- a/arm/efi/crt0-efi-aarch64.S +++ b/arm/efi/crt0-efi-aarch64.S @@ -111,17 +111,10 @@ section_table: .align 12 _start: - stp x29, x30, [sp, #-16]! - - /* Align sp; this is necessary due to way we store cpu0's thread_info */ + stp x29, x30, [sp, #-32]! mov x29, sp - mov x30, sp - and x30, x30, #THREAD_MASK - mov sp, x30 - str x29, [sp, #-16]! - - stp x0, x1, [sp, #-16]! + stp x0, x1, [sp, #16] mov x2, x0 mov x3, x1 adr x0, ImageBase @@ -130,12 +123,20 @@ _start: bl _relocate cbnz x0, 0f - ldp x0, x1, [sp], #16 + ldp x0, x1, [sp, #16] + + /* Align sp; this is necessary due to way we store cpu0's thread_info */ + mov x29, sp + mov x30, sp + and x30, x30, #THREAD_MASK + mov sp, x30 + str x29, [sp, #-16]! + bl efi_main /* Restore sp */ ldr x30, [sp], #16 - mov sp, x30 + mov sp, x30 -0: ldp x29, x30, [sp], #16 +0: ldp x29, x30, [sp], #32 ret From patchwork Tue Mar 5 16:46:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 13582729 Received: from out-174.mta0.migadu.com (out-174.mta0.migadu.com [91.218.175.174]) (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 71C2718042 for ; Tue, 5 Mar 2024 16:47:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657245; cv=none; b=CSEfXAPHMmH3+mS/DZVNol19XtIXU9ApT5MUw6E1jqopKhIhzwSKUrU7umVs6Xnevhqx3xehyVfdh7x0TvdItE7rd5VGS0X1FF5YANzHRiv/ohcGraN1GpVGgZi7N9gpMmYxTESH0extXcjZErB7DI8RDlW1BUWTIEkMPUBWsgo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657245; c=relaxed/simple; bh=UiYLWy5gXfXcrCJwBk9W9L/rn/d/gXXaeO43wVMX9EA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-type; b=TudKYnqq9j7fcSojBTQYEtyKxKI0rBlT7NV/HN0qoei9fGx7SHKCuZjhVdz/7aCsjeabDcNhU0niYk5emwRSzIQfVVmpDuniD9dxTgERnem+Gi5szlncKODQ0Gb7LWzE/3Ol9+aPsM/+dP1Z3/F+JOdQAgbWP8JwDFJSjBR+LO4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=gwZz+/GL; arc=none smtp.client-ip=91.218.175.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="gwZz+/GL" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1709657241; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=H6sZCXOViSyeJFa4S/XErJyBLA/lVA6LoZVSPOhZj6k=; b=gwZz+/GLC1HW6Fvr2Fj4tKaypoutqWHKUouBDgSdODE8+4GrA5u71fYW9wq8C8EkVr2F2e 8SGoFdrrdRzyxz2bkmA/1pXM4lpNHwodsROXtqpAtNgbxcoitamHAv0nqSIs2ZUWRgOtgD 9YFiUAn7XS375KFScHSNgBo22UsMNQo= From: Andrew Jones To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: alexandru.elisei@arm.com, eric.auger@redhat.com, nikos.nikoleris@arm.com, shahuang@redhat.com, pbonzini@redhat.com, thuth@redhat.com Subject: [kvm-unit-tests PATCH v3 17/18] arm64: efi: Switch to our own stack Date: Tue, 5 Mar 2024 17:46:41 +0100 Message-ID: <20240305164623.379149-37-andrew.jones@linux.dev> In-Reply-To: <20240305164623.379149-20-andrew.jones@linux.dev> References: <20240305164623.379149-20-andrew.jones@linux.dev> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-type: text/plain X-Migadu-Flow: FLOW_OUT We don't want to map EFI_BOOT_SERVICES_DATA regions, so move the stack from its EFI_BOOT_SERVICES_DATA region to EFI_LOADER_CODE, which we always map. We'll still map the stack as R/W instead of R/X because we split EFI_LOADER_CODE regions on the _etext boundary and map addresses before _etext as R/X and the rest as R/W. Reviewed-by: Nikos Nikoleris Signed-off-by: Andrew Jones --- arm/efi/crt0-efi-aarch64.S | 22 +++++++++++++++++----- lib/arm/setup.c | 4 ---- lib/memregions.c | 6 ------ 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/arm/efi/crt0-efi-aarch64.S b/arm/efi/crt0-efi-aarch64.S index 5fd3dc94dae8..71ce2794f059 100644 --- a/arm/efi/crt0-efi-aarch64.S +++ b/arm/efi/crt0-efi-aarch64.S @@ -125,12 +125,18 @@ _start: ldp x0, x1, [sp, #16] - /* Align sp; this is necessary due to way we store cpu0's thread_info */ + /* + * Switch to our own stack and align sp; this is necessary due + * to way we store cpu0's thread_info + */ + adrp x2, stacktop + add x2, x2, :lo12:stacktop + and x2, x2, #THREAD_MASK + mov x3, sp + mov sp, x2 + stp xzr, xzr, [sp, #-16]! mov x29, sp - mov x30, sp - and x30, x30, #THREAD_MASK - mov sp, x30 - str x29, [sp, #-16]! + str x3, [sp, #-16]! bl efi_main @@ -140,3 +146,9 @@ _start: 0: ldp x29, x30, [sp], #32 ret + + .section .data + +.balign 65536 +.space 65536 +stacktop: diff --git a/lib/arm/setup.c b/lib/arm/setup.c index 50a3bb65d865..2f649aff5551 100644 --- a/lib/arm/setup.c +++ b/lib/arm/setup.c @@ -340,10 +340,6 @@ efi_status_t setup_efi(efi_bootinfo_t *efi_bootinfo) { efi_status_t status; - struct thread_info *ti = current_thread_info(); - - memset(ti, 0, sizeof(*ti)); - exceptions_init(); memregions_init(arm_mem_regions, NR_MEM_REGIONS); diff --git a/lib/memregions.c b/lib/memregions.c index 3c6f751eb4f2..53fc0c7cfc58 100644 --- a/lib/memregions.c +++ b/lib/memregions.c @@ -114,12 +114,6 @@ void memregions_efi_init(struct efi_boot_memmap *mem_map, break; case EFI_LOADER_DATA: break; - case EFI_BOOT_SERVICES_DATA: - /* - * FIXME: This would ideally be MR_F_RESERVED, but the - * primary stack is in a region of this EFI type. - */ - break; case EFI_PERSISTENT_MEMORY: r.flags = MR_F_PERSISTENT; break; From patchwork Tue Mar 5 16:46:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 13582730 Received: from out-178.mta0.migadu.com (out-178.mta0.migadu.com [91.218.175.178]) (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 5194B182DF for ; Tue, 5 Mar 2024 16:47:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657251; cv=none; b=l0u6D1NbQ584KnahgM2RY57dxl/6WL+H4MzRl0Il/pP448e8Bg4Go+a4lW/9uGWpIdvc9fY/w+OhdiOPEdeNJrHGmvK/B6cBKGuVi26/iqzEu7M6tgWwOzDvIt30KJZWI42R0+3XpxxYbmjDcgSnFHkNpAlQL1Eelx7kHLVDWSI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709657251; c=relaxed/simple; bh=e4bXbx2KTvcdc5d5nvAkdolPvnGndbkaYf/rBUAU94E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-type; b=U/IVVfwjX+qgQF++zxdD7AcK3bUl8nSo9htdOHOae5BsqaRhZVGHKyoKdlFPjJyrtu/MwqxvCE+vNKYGFdci4K3nREwf7mrIZdnD/zfrNPs/GDZRVCcPIwyfPklZP+Ppe5zTvBHvnzpgI1cA7z9Be9Q9WEK8AhoJ32AMbfLlizI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=nmBYy50P; arc=none smtp.client-ip=91.218.175.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="nmBYy50P" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1709657246; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=L+jSEC4/nnRJYhJ0h7r/3oDRG2E8rjWg83W2hl/qlns=; b=nmBYy50PjE2oyhy/nsjGkcSk/yrKuW3LfUHr9JJd4Xy/qikLIlPdfQP0/MHDBKn9FN3nd3 mUX3L2pUQzOShdhRXh222QwQJxITHn5SM+qZto3iPbT/prjLHMsFaP4Y/PawN0FpI8iFAr JHrsAJuJP3781DfaRH1Tm6aAih1zQ54= From: Andrew Jones To: kvm@vger.kernel.org, kvmarm@lists.linux.dev Cc: alexandru.elisei@arm.com, eric.auger@redhat.com, nikos.nikoleris@arm.com, shahuang@redhat.com, pbonzini@redhat.com, thuth@redhat.com Subject: [kvm-unit-tests PATCH v3 18/18] arm64: efi: Add gitlab CI Date: Tue, 5 Mar 2024 17:46:42 +0100 Message-ID: <20240305164623.379149-38-andrew.jones@linux.dev> In-Reply-To: <20240305164623.379149-20-andrew.jones@linux.dev> References: <20240305164623.379149-20-andrew.jones@linux.dev> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-type: text/plain X-Migadu-Flow: FLOW_OUT Now that we have efi-direct and tests run much faster, add a few (just selftests) to the CI. Test with both DT and ACPI. While touching the file update arm and arm64's pass/fail criteria to the new style that ensures they're not all skips. Reviewed-by: Nikos Nikoleris Signed-off-by: Andrew Jones --- .gitlab-ci.yml | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 71d986e9884e..ff34b1f5062e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -44,7 +44,35 @@ build-aarch64: selftest-vectors-user timer | tee results.txt - - if grep -q FAIL results.txt ; then exit 1 ; fi + - grep -q PASS results.txt && ! grep -q FAIL results.txt + +build-aarch64-efi: + extends: .intree_template + script: + - dnf install -y qemu-system-aarch64 gcc-aarch64-linux-gnu edk2-aarch64 + - ./configure --arch=aarch64 --cross-prefix=aarch64-linux-gnu- --enable-efi --enable-efi-direct + - make -j2 + - ACCEL=tcg MAX_SMP=8 ./run_tests.sh + selftest-setup + selftest-smp + selftest-vectors-kernel + selftest-vectors-user + | tee results.txt + - grep -q PASS results.txt && ! grep -q FAIL results.txt + +build-aarch64-efi-acpi: + extends: .intree_template + script: + - dnf install -y qemu-system-aarch64 gcc-aarch64-linux-gnu edk2-aarch64 + - ./configure --arch=aarch64 --cross-prefix=aarch64-linux-gnu- --enable-efi --enable-efi-direct + - make -j2 + - EFI_USE_ACPI=y ACCEL=tcg MAX_SMP=8 ./run_tests.sh + selftest-setup + selftest-smp + selftest-vectors-kernel + selftest-vectors-user + | tee results.txt + - grep -q PASS results.txt && ! grep -q FAIL results.txt build-arm: extends: .outoftree_template @@ -59,7 +87,7 @@ build-arm: pci-test pmu-cycle-counter gicv2-ipi gicv2-mmio gicv3-ipi gicv2-active gicv3-active | tee results.txt - - if grep -q FAIL results.txt ; then exit 1 ; fi + - grep -q PASS results.txt && ! grep -q FAIL results.txt build-ppc64be: extends: .outoftree_template