Re: [kvm-unit-tests RFC 2/2] scripts: Set ACCEL in run_tests.sh if empty

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Mar 18, 2021 at 12:45:00PM +0000, Janosch Frank wrote:
> The current checks compare the env ACCEL to the unittests.conf
> provided accel. That's all fine as long as the user always specifies
> the ACCEL env variable.
> 
> If that's not the case and KVM is not available or if a test specifies
> tcg and we start a qemu with the kvm acceleration as it's the default
> we'll run into problems.
> 
> So let's fetch the accelerator before calling the arch/run script and
> check it against the test's specified accel. Yes, we now do that
> twice, once in the run_tests.sh and one in arch/run, but I don't think
> there's a good way around it since you can execute arch/run
> without run_tests.sh.
> 
> Signed-off-by: Janosch Frank <frankja@xxxxxxxxxxxxx>
> ---
>  run_tests.sh          |  6 ++++
>  s390x/run             |  6 +++-
>  scripts/accel.bash    | 63 +++++++++++++++++++++++++++++++++++++++++
>  scripts/arch-run.bash | 66 ++-----------------------------------------
>  scripts/runtime.bash  |  2 +-
>  5 files changed, 77 insertions(+), 66 deletions(-)
>  create mode 100644 scripts/accel.bash
> 
> diff --git a/run_tests.sh b/run_tests.sh
> index 65108e73..9ccb97bd 100755
> --- a/run_tests.sh
> +++ b/run_tests.sh
> @@ -10,6 +10,7 @@ if [ ! -f config.mak ]; then
>  fi
>  source config.mak
>  source scripts/common.bash
> +source scripts/accel.bash
>  
>  function usage()
>  {
> @@ -164,6 +165,11 @@ if [[ $tap_output == "yes" ]]; then
>      echo "TAP version 13"
>  fi
>  
> +qemu=$(search_qemu_binary)
> +if [ -z "$ACCEL" ]; then
> +    ACCEL=$(get_qemu_accelerator)
> +fi
> +
>  trap "wait; exit 130" SIGINT
>  
>  (
> diff --git a/s390x/run b/s390x/run
> index 2ec6da70..df7ef5ca 100755
> --- a/s390x/run
> +++ b/s390x/run
> @@ -12,8 +12,12 @@ fi
>  qemu=$(search_qemu_binary) ||
>  	exit $?
>  
> -ACCEL=$(get_qemu_accelerator) ||
> +if [ -z "$DEF_ACCEL "]; then
> +    ACCEL=$(get_qemu_accelerator) ||
>  	exit $?
> +else
> +    ACCEL=$DEF_ACCEL
> +fi
>  
>  M='-machine s390-ccw-virtio'
>  M+=",accel=$ACCEL"
> diff --git a/scripts/accel.bash b/scripts/accel.bash
> new file mode 100644
> index 00000000..ea12412a
> --- /dev/null
> +++ b/scripts/accel.bash
> @@ -0,0 +1,63 @@
> +search_qemu_binary ()
> +{
> +	local save_path=$PATH
> +	local qemucmd qemu
> +
> +	export PATH=$PATH:/usr/libexec
> +	for qemucmd in ${QEMU:-qemu-system-$ARCH_NAME qemu-kvm}; do
> +		if $qemucmd --help 2>/dev/null | grep -q 'QEMU'; then
> +			qemu="$qemucmd"
> +			break
> +		fi
> +	done
> +
> +	if [ -z "$qemu" ]; then
> +		echo "A QEMU binary was not found." >&2
> +		echo "You can set a custom location by using the QEMU=<path> environment variable." >&2
> +		return 2
> +	fi
> +	command -v $qemu
> +	export PATH=$save_path
> +}
> +
> +kvm_available ()
> +{
> +	if $($qemu -accel kvm 2> /dev/null); then
> +		return 0;
> +	else
> +		return 1;
> +	fi
> +
> +	[ "$HOST" = "$ARCH_NAME" ] ||
> +		( [ "$HOST" = aarch64 ] && [ "$ARCH" = arm ] ) ||
> +		( [ "$HOST" = x86_64 ] && [ "$ARCH" = i386 ] )
> +}
> +
> +hvf_available ()
> +{
> +	[ "$(sysctl -n kern.hv_support 2>/dev/null)" = "1" ] || return 1
> +	[ "$HOST" = "$ARCH_NAME" ] ||
> +		( [ "$HOST" = x86_64 ] && [ "$ARCH" = i386 ] )
> +}
> +
> +get_qemu_accelerator ()
> +{
> +	if [ "$ACCEL" = "kvm" ] && ! kvm_available; then
> +		echo "KVM is needed, but not available on this host" >&2
> +		return 2
> +	fi
> +	if [ "$ACCEL" = "hvf" ] && ! hvf_available; then
> +		echo "HVF is needed, but not available on this host" >&2
> +		return 2
> +	fi
> +
> +	if [ "$ACCEL" ]; then
> +		echo $ACCEL
> +	elif kvm_available; then
> +		echo kvm
> +	elif hvf_available; then
> +		echo hvf
> +	else
> +		echo tcg
> +	fi
> +}
> diff --git a/scripts/arch-run.bash b/scripts/arch-run.bash
> index 8cc9a61e..85c07792 100644
> --- a/scripts/arch-run.bash
> +++ b/scripts/arch-run.bash
> @@ -24,6 +24,8 @@
>  # 1..127 - FAILURE (could be QEMU, a run script, or the unittest)
>  # >= 128 - Signal (signum = status - 128)
>  ##############################################################################
> +source scripts/accel.bash
> +
>  run_qemu ()
>  {
>  	local stdout errors ret sig
> @@ -171,28 +173,6 @@ migration_cmd ()
>  	fi
>  }
>  
> -search_qemu_binary ()
> -{
> -	local save_path=$PATH
> -	local qemucmd qemu
> -
> -	export PATH=$PATH:/usr/libexec
> -	for qemucmd in ${QEMU:-qemu-system-$ARCH_NAME qemu-kvm}; do
> -		if $qemucmd --help 2>/dev/null | grep -q 'QEMU'; then
> -			qemu="$qemucmd"
> -			break
> -		fi
> -	done
> -
> -	if [ -z "$qemu" ]; then
> -		echo "A QEMU binary was not found." >&2
> -		echo "You can set a custom location by using the QEMU=<path> environment variable." >&2
> -		return 2
> -	fi
> -	command -v $qemu
> -	export PATH=$save_path
> -}
> -
>  initrd_create ()
>  {
>  	if [ "$ENVIRON_DEFAULT" = "yes" ]; then
> @@ -339,45 +319,3 @@ trap_exit_push ()
>  	local old_exit=$(trap -p EXIT | sed "s/^[^']*'//;s/'[^']*$//")
>  	trap -- "$1; $old_exit" EXIT
>  }
> -
> -kvm_available ()
> -{
> -	if $($qemu -accel kvm 2> /dev/null); then
> -		return 0;
> -	else
> -		return 1;
> -	fi
> -
> -	[ "$HOST" = "$ARCH_NAME" ] ||
> -		( [ "$HOST" = aarch64 ] && [ "$ARCH" = arm ] ) ||
> -		( [ "$HOST" = x86_64 ] && [ "$ARCH" = i386 ] )
> -}
> -
> -hvf_available ()
> -{
> -	[ "$(sysctl -n kern.hv_support 2>/dev/null)" = "1" ] || return 1
> -	[ "$HOST" = "$ARCH_NAME" ] ||
> -		( [ "$HOST" = x86_64 ] && [ "$ARCH" = i386 ] )
> -}
> -
> -get_qemu_accelerator ()
> -{
> -	if [ "$ACCEL" = "kvm" ] && ! kvm_available; then
> -		echo "KVM is needed, but not available on this host" >&2
> -		return 2
> -	fi
> -	if [ "$ACCEL" = "hvf" ] && ! hvf_available; then
> -		echo "HVF is needed, but not available on this host" >&2
> -		return 2
> -	fi
> -
> -	if [ "$ACCEL" ]; then
> -		echo $ACCEL
> -	elif kvm_available; then
> -		echo kvm
> -	elif hvf_available; then
> -		echo hvf
> -	else
> -		echo tcg
> -	fi
> -}
> diff --git a/scripts/runtime.bash b/scripts/runtime.bash
> index 132389c7..5d444db4 100644
> --- a/scripts/runtime.bash
> +++ b/scripts/runtime.bash
> @@ -30,7 +30,7 @@ premature_failure()
>  get_cmdline()
>  {
>      local kernel=$1
> -    echo "TESTNAME=$testname TIMEOUT=$timeout ACCEL=$accel $RUNTIME_arch_run $kernel -smp $smp $opts"
> +    echo "TESTNAME=$testname TIMEOUT=$timeout DEF_ACCEL=$accel $RUNTIME_arch_run $kernel -smp $smp $opts"

I think this name change can break any $TEST_DIR/run files that aren't
updated to check DEF_ACCEL. This patch only updates the runner for s390.

Also, it'd be better to do the code movement (scripts/accel.bash) of this
patch separately with a patch that does not have any functional change.

Thanks,
drew




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux