All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nicholas Piggin <npiggin@gmail.com>
To: kvm-riscv@lists.infradead.org
Subject: [kvm-unit-tests PATCH v3 4/8] migration: Support multiple migrations
Date: Fri, 09 Feb 2024 18:39:15 +1000	[thread overview]
Message-ID: <CZ0EVI7IZ9YY.3EF4ZKA9IXM5I@wheely> (raw)
In-Reply-To: <74f469c3-76ee-4589-b3ec-17a8b7428950@redhat.com>

On Fri Feb 9, 2024 at 6:19 PM AEST, Thomas Huth wrote:
> On 09/02/2024 08.01, Nicholas Piggin wrote:
> > Support multiple migrations by flipping dest file/socket variables to
> > source after the migration is complete, ready to start again. A new
> > destination is created if the test outputs the migrate line again.
> > Test cases may now switch to calling migrate() one or more times.
> > 
> > Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> > ---
> ...
> > diff --git a/scripts/arch-run.bash b/scripts/arch-run.bash
> > index 3689d7c2..a914ba17 100644
> > --- a/scripts/arch-run.bash
> > +++ b/scripts/arch-run.bash
> > @@ -129,12 +129,16 @@ run_migration ()
> >   		return 77
> >   	fi
> >   
> > +	migcmdline=$@
> > +
> >   	trap 'trap - TERM ; kill 0 ; exit 2' INT TERM
> > -	trap 'rm -f ${migout1} ${migout_fifo1} ${migsock} ${qmp1} ${qmp2} ${fifo}' RETURN EXIT
> > +	trap 'rm -f ${migout1} ${migout2} ${migout_fifo1} ${migout_fifo2} ${migsock} ${qmp1} ${qmp2} ${fifo}' RETURN EXIT
> >   
> >   	migsock=$(mktemp -u -t mig-helper-socket.XXXXXXXXXX)
> >   	migout1=$(mktemp -t mig-helper-stdout1.XXXXXXXXXX)
> >   	migout_fifo1=$(mktemp -u -t mig-helper-fifo-stdout1.XXXXXXXXXX)
> > +	migout2=$(mktemp -t mig-helper-stdout2.XXXXXXXXXX)
> > +	migout_fifo2=$(mktemp -u -t mig-helper-fifo-stdout2.XXXXXXXXXX)
> >   	qmp1=$(mktemp -u -t mig-helper-qmp1.XXXXXXXXXX)
> >   	qmp2=$(mktemp -u -t mig-helper-qmp2.XXXXXXXXXX)
> >   	fifo=$(mktemp -u -t mig-helper-fifo.XXXXXXXXXX)
> > @@ -142,18 +146,61 @@ run_migration ()
> >   	qmpout2=/dev/null
> >   
> >   	mkfifo ${migout_fifo1}
> > -	eval "$@" -chardev socket,id=mon1,path=${qmp1},server=on,wait=off \
> > +	mkfifo ${migout_fifo2}
> > +
> > +	eval "$migcmdline" \
> > +		-chardev socket,id=mon1,path=${qmp1},server=on,wait=off \
> >   		-mon chardev=mon1,mode=control > ${migout_fifo1} &
> >   	live_pid=$!
> >   	cat ${migout_fifo1} | tee ${migout1} &
> >   
> > -	# We have to use cat to open the named FIFO, because named FIFO's, unlike
> > -	# pipes, will block on open() until the other end is also opened, and that
> > -	# totally breaks QEMU...
> > +	# The test must prompt the user to migrate, so wait for the "migrate"
> > +	# keyword
> > +	while ! grep -q -i "Now migrate the VM" < ${migout1} ; do
> > +		if ! ps -p ${live_pid} > /dev/null ; then
> > +			echo "ERROR: Test exit before migration point." >&2
> > +			qmp ${qmp1} '"quit"'> ${qmpout1} 2>/dev/null
> > +			return 3
> > +		fi
> > +		sleep 0.1
> > +	done
> > +
> > +	# This starts the first source QEMU in advance of the test reaching the
> > +	# migration point, since we expect at least one migration. Subsequent
> > +	# sources are started as the test hits migrate keywords.
> > +	do_migration || return $?
> > +
> > +	while ps -p ${live_pid} > /dev/null ; do
> > +		# Wait for EXIT or further migrations
> > +		if ! grep -q -i "Now migrate the VM" < ${migout1} ; then
> > +			sleep 0.1
> > +		else
> > +			do_migration || return $?
> > +		fi
> > +	done
> > +
> > +	wait ${live_pid}
> > +	ret=$?
> > +
> > +	while (( $(jobs -r | wc -l) > 0 )); do
> > +		sleep 0.1
> > +	done
> > +
> > +	return $ret
> > +}
> > +
> > +do_migration ()
> > +{
> > +	# We have to use cat to open the named FIFO, because named FIFO's,
> > +	# unlike pipes, will block on open() until the other end is also
> > +	# opened, and that totally breaks QEMU...
> >   	mkfifo ${fifo}
> > -	eval "$@" -chardev socket,id=mon2,path=${qmp2},server=on,wait=off \
> > -		-mon chardev=mon2,mode=control -incoming unix:${migsock} < <(cat ${fifo}) &
> > +	eval "$migcmdline" \
> > +		-chardev socket,id=mon2,path=${qmp2},server=on,wait=off \
> > +		-mon chardev=mon2,mode=control -incoming unix:${migsock} \
> > +		< <(cat ${fifo}) > ${migout_fifo2} &
> >   	incoming_pid=$!
> > +	cat ${migout_fifo2} | tee ${migout2} &
> >   
> >   	# The test must prompt the user to migrate, so wait for the "migrate" keyword
> >   	while ! grep -q -i "Now migrate the VM" < ${migout1} ; do
>
> So the old check for the "migrate" keyword is also still around?

It's just the comment is staleish, it only checks "Now migrate...".

> Why do we 
> need to wait on two spots for the "Now mirgrate..." string now?

So that the it ensures we do one migration, subsequent ones are
optional.

I was thinking we could just remove that, and possibly even
remove the MIGRATION=yes/no paths and always just use the same
code here. But that's for another time.

Actually there is some weirdness here. There are *three* spots
where it waits for migration. The first one in run_migration
can be removed, because it can call do_migration right away
to start up the destination qemu process ahead of the first
migration message as-per comment. I'll respin with that change.

Thanks,
Nick


WARNING: multiple messages have this Message-ID (diff)
From: "Nicholas Piggin" <npiggin@gmail.com>
To: "Thomas Huth" <thuth@redhat.com>
Cc: <kvm@vger.kernel.org>, "Laurent Vivier" <lvivier@redhat.com>,
	"Shaoqin Huang" <shahuang@redhat.com>,
	"Andrew Jones" <andrew.jones@linux.dev>,
	"Nico Boehr" <nrb@linux.ibm.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Alexandru Elisei" <alexandru.elisei@arm.com>,
	"Eric Auger" <eric.auger@redhat.com>,
	"Janosch Frank" <frankja@linux.ibm.com>,
	"Claudio Imbrenda" <imbrenda@linux.ibm.com>,
	"David Hildenbrand" <david@redhat.com>,
	"Marc Hartmayer" <mhartmay@linux.ibm.com>,
	<linuxppc-dev@lists.ozlabs.org>, <linux-s390@vger.kernel.org>,
	<kvmarm@lists.linux.dev>, <kvm-riscv@lists.infradead.org>
Subject: Re: [kvm-unit-tests PATCH v3 4/8] migration: Support multiple migrations
Date: Fri, 09 Feb 2024 18:39:15 +1000	[thread overview]
Message-ID: <CZ0EVI7IZ9YY.3EF4ZKA9IXM5I@wheely> (raw)
In-Reply-To: <74f469c3-76ee-4589-b3ec-17a8b7428950@redhat.com>

On Fri Feb 9, 2024 at 6:19 PM AEST, Thomas Huth wrote:
> On 09/02/2024 08.01, Nicholas Piggin wrote:
> > Support multiple migrations by flipping dest file/socket variables to
> > source after the migration is complete, ready to start again. A new
> > destination is created if the test outputs the migrate line again.
> > Test cases may now switch to calling migrate() one or more times.
> > 
> > Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> > ---
> ...
> > diff --git a/scripts/arch-run.bash b/scripts/arch-run.bash
> > index 3689d7c2..a914ba17 100644
> > --- a/scripts/arch-run.bash
> > +++ b/scripts/arch-run.bash
> > @@ -129,12 +129,16 @@ run_migration ()
> >   		return 77
> >   	fi
> >   
> > +	migcmdline=$@
> > +
> >   	trap 'trap - TERM ; kill 0 ; exit 2' INT TERM
> > -	trap 'rm -f ${migout1} ${migout_fifo1} ${migsock} ${qmp1} ${qmp2} ${fifo}' RETURN EXIT
> > +	trap 'rm -f ${migout1} ${migout2} ${migout_fifo1} ${migout_fifo2} ${migsock} ${qmp1} ${qmp2} ${fifo}' RETURN EXIT
> >   
> >   	migsock=$(mktemp -u -t mig-helper-socket.XXXXXXXXXX)
> >   	migout1=$(mktemp -t mig-helper-stdout1.XXXXXXXXXX)
> >   	migout_fifo1=$(mktemp -u -t mig-helper-fifo-stdout1.XXXXXXXXXX)
> > +	migout2=$(mktemp -t mig-helper-stdout2.XXXXXXXXXX)
> > +	migout_fifo2=$(mktemp -u -t mig-helper-fifo-stdout2.XXXXXXXXXX)
> >   	qmp1=$(mktemp -u -t mig-helper-qmp1.XXXXXXXXXX)
> >   	qmp2=$(mktemp -u -t mig-helper-qmp2.XXXXXXXXXX)
> >   	fifo=$(mktemp -u -t mig-helper-fifo.XXXXXXXXXX)
> > @@ -142,18 +146,61 @@ run_migration ()
> >   	qmpout2=/dev/null
> >   
> >   	mkfifo ${migout_fifo1}
> > -	eval "$@" -chardev socket,id=mon1,path=${qmp1},server=on,wait=off \
> > +	mkfifo ${migout_fifo2}
> > +
> > +	eval "$migcmdline" \
> > +		-chardev socket,id=mon1,path=${qmp1},server=on,wait=off \
> >   		-mon chardev=mon1,mode=control > ${migout_fifo1} &
> >   	live_pid=$!
> >   	cat ${migout_fifo1} | tee ${migout1} &
> >   
> > -	# We have to use cat to open the named FIFO, because named FIFO's, unlike
> > -	# pipes, will block on open() until the other end is also opened, and that
> > -	# totally breaks QEMU...
> > +	# The test must prompt the user to migrate, so wait for the "migrate"
> > +	# keyword
> > +	while ! grep -q -i "Now migrate the VM" < ${migout1} ; do
> > +		if ! ps -p ${live_pid} > /dev/null ; then
> > +			echo "ERROR: Test exit before migration point." >&2
> > +			qmp ${qmp1} '"quit"'> ${qmpout1} 2>/dev/null
> > +			return 3
> > +		fi
> > +		sleep 0.1
> > +	done
> > +
> > +	# This starts the first source QEMU in advance of the test reaching the
> > +	# migration point, since we expect at least one migration. Subsequent
> > +	# sources are started as the test hits migrate keywords.
> > +	do_migration || return $?
> > +
> > +	while ps -p ${live_pid} > /dev/null ; do
> > +		# Wait for EXIT or further migrations
> > +		if ! grep -q -i "Now migrate the VM" < ${migout1} ; then
> > +			sleep 0.1
> > +		else
> > +			do_migration || return $?
> > +		fi
> > +	done
> > +
> > +	wait ${live_pid}
> > +	ret=$?
> > +
> > +	while (( $(jobs -r | wc -l) > 0 )); do
> > +		sleep 0.1
> > +	done
> > +
> > +	return $ret
> > +}
> > +
> > +do_migration ()
> > +{
> > +	# We have to use cat to open the named FIFO, because named FIFO's,
> > +	# unlike pipes, will block on open() until the other end is also
> > +	# opened, and that totally breaks QEMU...
> >   	mkfifo ${fifo}
> > -	eval "$@" -chardev socket,id=mon2,path=${qmp2},server=on,wait=off \
> > -		-mon chardev=mon2,mode=control -incoming unix:${migsock} < <(cat ${fifo}) &
> > +	eval "$migcmdline" \
> > +		-chardev socket,id=mon2,path=${qmp2},server=on,wait=off \
> > +		-mon chardev=mon2,mode=control -incoming unix:${migsock} \
> > +		< <(cat ${fifo}) > ${migout_fifo2} &
> >   	incoming_pid=$!
> > +	cat ${migout_fifo2} | tee ${migout2} &
> >   
> >   	# The test must prompt the user to migrate, so wait for the "migrate" keyword
> >   	while ! grep -q -i "Now migrate the VM" < ${migout1} ; do
>
> So the old check for the "migrate" keyword is also still around?

It's just the comment is staleish, it only checks "Now migrate...".

> Why do we 
> need to wait on two spots for the "Now mirgrate..." string now?

So that the it ensures we do one migration, subsequent ones are
optional.

I was thinking we could just remove that, and possibly even
remove the MIGRATION=yes/no paths and always just use the same
code here. But that's for another time.

Actually there is some weirdness here. There are *three* spots
where it waits for migration. The first one in run_migration
can be removed, because it can call do_migration right away
to start up the destination qemu process ahead of the first
migration message as-per comment. I'll respin with that change.

Thanks,
Nick

WARNING: multiple messages have this Message-ID (diff)
From: "Nicholas Piggin" <npiggin@gmail.com>
To: "Thomas Huth" <thuth@redhat.com>
Cc: Laurent Vivier <lvivier@redhat.com>,
	linux-s390@vger.kernel.org, Nico Boehr <nrb@linux.ibm.com>,
	Janosch Frank <frankja@linux.ibm.com>,
	kvm@vger.kernel.org, David Hildenbrand <david@redhat.com>,
	linuxppc-dev@lists.ozlabs.org,
	Shaoqin Huang <shahuang@redhat.com>,
	Andrew Jones <andrew.jones@linux.dev>,
	Eric Auger <eric.auger@redhat.com>,
	Marc Hartmayer <mhartmay@linux.ibm.com>,
	kvm-riscv@lists.infradead.org, kvmarm@lists.linux.dev,
	Paolo Bonzini <pbonzini@redhat.com>,
	Claudio Imbrenda <imbrenda@linux.ibm.com>,
	Alexandru Elisei <alexandru.elisei@arm.com>
Subject: Re: [kvm-unit-tests PATCH v3 4/8] migration: Support multiple migrations
Date: Fri, 09 Feb 2024 18:39:15 +1000	[thread overview]
Message-ID: <CZ0EVI7IZ9YY.3EF4ZKA9IXM5I@wheely> (raw)
In-Reply-To: <74f469c3-76ee-4589-b3ec-17a8b7428950@redhat.com>

On Fri Feb 9, 2024 at 6:19 PM AEST, Thomas Huth wrote:
> On 09/02/2024 08.01, Nicholas Piggin wrote:
> > Support multiple migrations by flipping dest file/socket variables to
> > source after the migration is complete, ready to start again. A new
> > destination is created if the test outputs the migrate line again.
> > Test cases may now switch to calling migrate() one or more times.
> > 
> > Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> > ---
> ...
> > diff --git a/scripts/arch-run.bash b/scripts/arch-run.bash
> > index 3689d7c2..a914ba17 100644
> > --- a/scripts/arch-run.bash
> > +++ b/scripts/arch-run.bash
> > @@ -129,12 +129,16 @@ run_migration ()
> >   		return 77
> >   	fi
> >   
> > +	migcmdline=$@
> > +
> >   	trap 'trap - TERM ; kill 0 ; exit 2' INT TERM
> > -	trap 'rm -f ${migout1} ${migout_fifo1} ${migsock} ${qmp1} ${qmp2} ${fifo}' RETURN EXIT
> > +	trap 'rm -f ${migout1} ${migout2} ${migout_fifo1} ${migout_fifo2} ${migsock} ${qmp1} ${qmp2} ${fifo}' RETURN EXIT
> >   
> >   	migsock=$(mktemp -u -t mig-helper-socket.XXXXXXXXXX)
> >   	migout1=$(mktemp -t mig-helper-stdout1.XXXXXXXXXX)
> >   	migout_fifo1=$(mktemp -u -t mig-helper-fifo-stdout1.XXXXXXXXXX)
> > +	migout2=$(mktemp -t mig-helper-stdout2.XXXXXXXXXX)
> > +	migout_fifo2=$(mktemp -u -t mig-helper-fifo-stdout2.XXXXXXXXXX)
> >   	qmp1=$(mktemp -u -t mig-helper-qmp1.XXXXXXXXXX)
> >   	qmp2=$(mktemp -u -t mig-helper-qmp2.XXXXXXXXXX)
> >   	fifo=$(mktemp -u -t mig-helper-fifo.XXXXXXXXXX)
> > @@ -142,18 +146,61 @@ run_migration ()
> >   	qmpout2=/dev/null
> >   
> >   	mkfifo ${migout_fifo1}
> > -	eval "$@" -chardev socket,id=mon1,path=${qmp1},server=on,wait=off \
> > +	mkfifo ${migout_fifo2}
> > +
> > +	eval "$migcmdline" \
> > +		-chardev socket,id=mon1,path=${qmp1},server=on,wait=off \
> >   		-mon chardev=mon1,mode=control > ${migout_fifo1} &
> >   	live_pid=$!
> >   	cat ${migout_fifo1} | tee ${migout1} &
> >   
> > -	# We have to use cat to open the named FIFO, because named FIFO's, unlike
> > -	# pipes, will block on open() until the other end is also opened, and that
> > -	# totally breaks QEMU...
> > +	# The test must prompt the user to migrate, so wait for the "migrate"
> > +	# keyword
> > +	while ! grep -q -i "Now migrate the VM" < ${migout1} ; do
> > +		if ! ps -p ${live_pid} > /dev/null ; then
> > +			echo "ERROR: Test exit before migration point." >&2
> > +			qmp ${qmp1} '"quit"'> ${qmpout1} 2>/dev/null
> > +			return 3
> > +		fi
> > +		sleep 0.1
> > +	done
> > +
> > +	# This starts the first source QEMU in advance of the test reaching the
> > +	# migration point, since we expect at least one migration. Subsequent
> > +	# sources are started as the test hits migrate keywords.
> > +	do_migration || return $?
> > +
> > +	while ps -p ${live_pid} > /dev/null ; do
> > +		# Wait for EXIT or further migrations
> > +		if ! grep -q -i "Now migrate the VM" < ${migout1} ; then
> > +			sleep 0.1
> > +		else
> > +			do_migration || return $?
> > +		fi
> > +	done
> > +
> > +	wait ${live_pid}
> > +	ret=$?
> > +
> > +	while (( $(jobs -r | wc -l) > 0 )); do
> > +		sleep 0.1
> > +	done
> > +
> > +	return $ret
> > +}
> > +
> > +do_migration ()
> > +{
> > +	# We have to use cat to open the named FIFO, because named FIFO's,
> > +	# unlike pipes, will block on open() until the other end is also
> > +	# opened, and that totally breaks QEMU...
> >   	mkfifo ${fifo}
> > -	eval "$@" -chardev socket,id=mon2,path=${qmp2},server=on,wait=off \
> > -		-mon chardev=mon2,mode=control -incoming unix:${migsock} < <(cat ${fifo}) &
> > +	eval "$migcmdline" \
> > +		-chardev socket,id=mon2,path=${qmp2},server=on,wait=off \
> > +		-mon chardev=mon2,mode=control -incoming unix:${migsock} \
> > +		< <(cat ${fifo}) > ${migout_fifo2} &
> >   	incoming_pid=$!
> > +	cat ${migout_fifo2} | tee ${migout2} &
> >   
> >   	# The test must prompt the user to migrate, so wait for the "migrate" keyword
> >   	while ! grep -q -i "Now migrate the VM" < ${migout1} ; do
>
> So the old check for the "migrate" keyword is also still around?

It's just the comment is staleish, it only checks "Now migrate...".

> Why do we 
> need to wait on two spots for the "Now mirgrate..." string now?

So that the it ensures we do one migration, subsequent ones are
optional.

I was thinking we could just remove that, and possibly even
remove the MIGRATION=yes/no paths and always just use the same
code here. But that's for another time.

Actually there is some weirdness here. There are *three* spots
where it waits for migration. The first one in run_migration
can be removed, because it can call do_migration right away
to start up the destination qemu process ahead of the first
migration message as-per comment. I'll respin with that change.

Thanks,
Nick

  reply	other threads:[~2024-02-09  8:39 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-09  7:01 [kvm-unit-tests PATCH v3 0/8] Multi-migration support Nicholas Piggin
2024-02-09  7:01 ` Nicholas Piggin
2024-02-09  7:01 ` Nicholas Piggin
2024-02-09  7:01 ` [kvm-unit-tests PATCH v3 1/8] arch-run: Fix TRAP handler recursion to remove temporary files properly Nicholas Piggin
2024-02-09  7:01   ` Nicholas Piggin
2024-02-09  7:01   ` Nicholas Piggin
2024-02-09  7:29   ` Thomas Huth
2024-02-09  7:29     ` Thomas Huth
2024-02-09  7:29     ` Thomas Huth
2024-02-09  7:01 ` [kvm-unit-tests PATCH v3 2/8] arch-run: Clean up initrd cleanup Nicholas Piggin
2024-02-09  7:01   ` Nicholas Piggin
2024-02-09  7:01   ` Nicholas Piggin
2024-02-09  7:32   ` Thomas Huth
2024-02-09  7:32     ` Thomas Huth
2024-02-09  7:32     ` Thomas Huth
2024-02-09  8:27     ` Nicholas Piggin
2024-02-09  8:27       ` Nicholas Piggin
2024-02-09  8:27       ` Nicholas Piggin
2024-02-09  7:01 ` [kvm-unit-tests PATCH v3 3/8] migration: use a more robust way to wait for background job Nicholas Piggin
2024-02-09  7:01   ` Nicholas Piggin
2024-02-09  7:01   ` Nicholas Piggin
2024-02-09  7:43   ` Thomas Huth
2024-02-09  7:43     ` Thomas Huth
2024-02-09  7:43     ` Thomas Huth
2024-02-09  7:01 ` [kvm-unit-tests PATCH v3 4/8] migration: Support multiple migrations Nicholas Piggin
2024-02-09  7:01   ` Nicholas Piggin
2024-02-09  7:01   ` Nicholas Piggin
2024-02-09  8:19   ` Thomas Huth
2024-02-09  8:19     ` Thomas Huth
2024-02-09  8:19     ` Thomas Huth
2024-02-09  8:39     ` Nicholas Piggin [this message]
2024-02-09  8:39       ` Nicholas Piggin
2024-02-09  8:39       ` Nicholas Piggin
2024-02-09  8:44       ` Thomas Huth
2024-02-09  8:44         ` Thomas Huth
2024-02-09  8:44         ` Thomas Huth
2024-02-09  7:01 ` [kvm-unit-tests PATCH v3 5/8] arch-run: rename migration variables Nicholas Piggin
2024-02-09  7:01   ` Nicholas Piggin
2024-02-09  7:01   ` Nicholas Piggin
2024-02-09  8:28   ` Thomas Huth
2024-02-09  8:28     ` Thomas Huth
2024-02-09  8:28     ` Thomas Huth
2024-02-09  7:01 ` [kvm-unit-tests PATCH v3 6/8] migration: Add quiet migration support Nicholas Piggin
2024-02-09  7:01   ` Nicholas Piggin
2024-02-09  7:01   ` Nicholas Piggin
2024-02-09  8:03   ` Thomas Huth
2024-02-09  8:03     ` Thomas Huth
2024-02-09  8:03     ` Thomas Huth
2024-02-09  7:01 ` [kvm-unit-tests PATCH v3 7/8] Add common/ directory for architecture-independent tests Nicholas Piggin
2024-02-09  7:01   ` Nicholas Piggin
2024-02-09  7:01   ` Nicholas Piggin
2024-02-09  8:29   ` Thomas Huth
2024-02-09  8:29     ` Thomas Huth
2024-02-09  8:29     ` Thomas Huth
2024-02-09  7:01 ` [kvm-unit-tests PATCH v3 8/8] migration: add a migration selftest Nicholas Piggin
2024-02-09  7:01   ` Nicholas Piggin
2024-02-09  7:01   ` Nicholas Piggin
2024-02-09  8:32   ` Thomas Huth
2024-02-09  8:32     ` Thomas Huth
2024-02-09  8:32     ` Thomas Huth

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CZ0EVI7IZ9YY.3EF4ZKA9IXM5I@wheely \
    --to=npiggin@gmail.com \
    --cc=kvm-riscv@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.