From: Nicholas Piggin <npiggin@gmail.com>
To: Thomas Huth <thuth@redhat.com>
Cc: Laurent Vivier <lvivier@redhat.com>,
kvm@vger.kernel.org, Nicholas Piggin <npiggin@gmail.com>,
Andrew Jones <andrew.jones@linux.dev>,
Paolo Bonzini <pbonzini@redhat.com>,
linuxppc-dev@lists.ozlabs.org
Subject: [kvm-unit-tests PATCH v7 03/35] migration: Add a migrate_skip command
Date: Tue, 19 Mar 2024 17:58:54 +1000 [thread overview]
Message-ID: <20240319075926.2422707-4-npiggin@gmail.com> (raw)
In-Reply-To: <20240319075926.2422707-1-npiggin@gmail.com>
Tests that are run with MIGRATION=yes but skip due to some requirement
not being met will show as a failure due to the harness requirement to
see one successful migration. The workaround for this is to migrate in
test's skip path. Add a new command that just tells the harness to not
expect a migration.
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
common/selftest-migration.c | 14 ++++++++-----
lib/migrate.c | 19 ++++++++++++++++-
lib/migrate.h | 2 ++
powerpc/unittests.cfg | 6 ++++++
s390x/unittests.cfg | 5 +++++
scripts/arch-run.bash | 41 +++++++++++++++++++++++++++++--------
6 files changed, 73 insertions(+), 14 deletions(-)
diff --git a/common/selftest-migration.c b/common/selftest-migration.c
index 54b5d6b2d..0afd8581c 100644
--- a/common/selftest-migration.c
+++ b/common/selftest-migration.c
@@ -14,14 +14,18 @@
int main(int argc, char **argv)
{
- int i = 0;
-
report_prefix_push("migration");
- for (i = 0; i < NR_MIGRATIONS; i++)
- migrate_quiet();
+ if (argc > 1 && !strcmp(argv[1], "skip")) {
+ migrate_skip();
+ report(true, "migration skipping");
+ } else {
+ int i;
- report(true, "simple harness stress test");
+ for (i = 0; i < NR_MIGRATIONS; i++)
+ migrate_quiet();
+ report(true, "simple harness stress");
+ }
report_prefix_pop();
diff --git a/lib/migrate.c b/lib/migrate.c
index 92d1d957d..1d22196b7 100644
--- a/lib/migrate.c
+++ b/lib/migrate.c
@@ -39,7 +39,24 @@ void migrate_once(void)
if (migrated)
return;
-
migrated = true;
+
migrate();
}
+
+/*
+ * When the test has been started in migration mode, but the test case is
+ * skipped and no migration point is reached, this can be used to tell the
+ * harness not to mark it as a failure to migrate.
+ */
+void migrate_skip(void)
+{
+ static bool did_migrate_skip;
+
+ if (did_migrate_skip)
+ return;
+ did_migrate_skip = true;
+
+ puts("Skipped VM migration (quiet)\n");
+ (void)getchar();
+}
diff --git a/lib/migrate.h b/lib/migrate.h
index 95b9102b0..db6e0c501 100644
--- a/lib/migrate.h
+++ b/lib/migrate.h
@@ -9,3 +9,5 @@
void migrate(void);
void migrate_quiet(void);
void migrate_once(void);
+
+void migrate_skip(void);
diff --git a/powerpc/unittests.cfg b/powerpc/unittests.cfg
index 1559bee98..cae4949e8 100644
--- a/powerpc/unittests.cfg
+++ b/powerpc/unittests.cfg
@@ -43,6 +43,12 @@ groups = selftest migration
# https://lore.kernel.org/qemu-devel/20240219061731.232570-1-npiggin@gmail.com/
accel = kvm
+[selftest-migration-skip]
+file = selftest-migration.elf
+machine = pseries
+groups = selftest migration
+extra_params = -append "skip"
+
[spapr_hcall]
file = spapr_hcall.elf
diff --git a/s390x/unittests.cfg b/s390x/unittests.cfg
index dac9e4db1..49e3e4608 100644
--- a/s390x/unittests.cfg
+++ b/s390x/unittests.cfg
@@ -31,6 +31,11 @@ groups = selftest migration
# https://lore.kernel.org/qemu-devel/20240219061731.232570-1-npiggin@gmail.com/
accel = kvm
+[selftest-migration-skip]
+file = selftest-migration.elf
+groups = selftest migration
+extra_params = -append "skip"
+
[intercept]
file = intercept.elf
diff --git a/scripts/arch-run.bash b/scripts/arch-run.bash
index 39419d4e2..4a1aab48d 100644
--- a/scripts/arch-run.bash
+++ b/scripts/arch-run.bash
@@ -124,12 +124,17 @@ qmp_events ()
filter_quiet_msgs ()
{
- grep -v "Now migrate the VM (quiet)"
+ grep -v "Now migrate the VM (quiet)" |
+ grep -v "Skipped VM migration (quiet)"
}
seen_migrate_msg ()
{
- grep -q -e "Now migrate the VM" < $1
+ if [ $skip_migration -eq 1 ]; then
+ grep -q -e "Now migrate the VM" < $1
+ else
+ grep -q -e "Now migrate the VM" -e "Skipped VM migration" < $1
+ fi
}
run_migration ()
@@ -142,7 +147,7 @@ run_migration ()
migcmdline=$@
trap 'trap - TERM ; kill 0 ; exit 2' INT TERM
- trap 'rm -f ${src_out} ${dst_out} ${src_outfifo} ${dst_outfifo} ${dst_incoming} ${src_qmp} ${dst_qmp} ${dst_infifo}' RETURN EXIT
+ trap 'rm -f ${src_out} ${dst_out} ${src_outfifo} ${dst_outfifo} ${dst_incoming} ${src_qmp} ${dst_qmp} ${src_infifo} ${dst_infifo}' RETURN EXIT
dst_incoming=$(mktemp -u -t mig-helper-socket-incoming.XXXXXXXXXX)
src_out=$(mktemp -t mig-helper-stdout1.XXXXXXXXXX)
@@ -151,21 +156,26 @@ run_migration ()
dst_outfifo=$(mktemp -u -t mig-helper-fifo-stdout2.XXXXXXXXXX)
src_qmp=$(mktemp -u -t mig-helper-qmp1.XXXXXXXXXX)
dst_qmp=$(mktemp -u -t mig-helper-qmp2.XXXXXXXXXX)
- dst_infifo=$(mktemp -u -t mig-helper-fifo-stdin.XXXXXXXXXX)
+ src_infifo=$(mktemp -u -t mig-helper-fifo-stdin1.XXXXXXXXXX)
+ dst_infifo=$(mktemp -u -t mig-helper-fifo-stdin2.XXXXXXXXXX)
src_qmpout=/dev/null
dst_qmpout=/dev/null
+ skip_migration=0
mkfifo ${src_outfifo}
mkfifo ${dst_outfifo}
# Holding both ends of the input fifo open prevents opens from
# blocking and readers getting EOF when a writer closes it.
+ mkfifo ${src_infifo}
mkfifo ${dst_infifo}
+ exec {src_infifo_fd}<>${src_infifo}
exec {dst_infifo_fd}<>${dst_infifo}
eval "$migcmdline" \
-chardev socket,id=mon,path=${src_qmp},server=on,wait=off \
- -mon chardev=mon,mode=control > ${src_outfifo} &
+ -mon chardev=mon,mode=control \
+ < ${src_infifo} > ${src_outfifo} &
live_pid=$!
cat ${src_outfifo} | tee ${src_out} | filter_quiet_msgs &
@@ -179,8 +189,11 @@ run_migration ()
# Wait for test exit or further migration messages.
if ! seen_migrate_msg ${src_out} ; then
sleep 0.1
- else
+ elif grep -q "Now migrate the VM" < ${src_out} ; then
do_migration || return $?
+ elif [ $skip_migration -eq 0 ] && grep -q "Skipped VM migration" < ${src_out} ; then
+ echo > ${src_infifo} # Resume src and carry on.
+ break;
fi
done
@@ -207,10 +220,10 @@ do_migration ()
# "Now migrate VM" or similar console message.
while ! seen_migrate_msg ${src_out} ; do
if ! ps -p ${live_pid} > /dev/null ; then
- echo "ERROR: Test exit before migration point." >&2
echo > ${dst_infifo}
- qmp ${src_qmp} '"quit"'> ${src_qmpout} 2>/dev/null
qmp ${dst_qmp} '"quit"'> ${dst_qmpout} 2>/dev/null
+ echo "ERROR: Test exit before migration point." >&2
+ qmp ${src_qmp} '"quit"'> ${src_qmpout} 2>/dev/null
return 3
fi
sleep 0.1
@@ -220,6 +233,15 @@ do_migration ()
while ! [ -S ${dst_incoming} ] ; do sleep 0.1 ; done
while ! [ -S ${dst_qmp} ] ; do sleep 0.1 ; done
+ if [ $skip_migration -eq 0 ] && grep -q "Skipped VM migration" < ${src_out} ; then
+ # May not get any migrations, exit to main loop for now...
+ echo > ${dst_infifo}
+ qmp ${dst_qmp} '"quit"'> ${dst_qmpout} 2>/dev/null
+ echo > ${src_infifo} # Resume src and carry on.
+ skip_migration=1
+ return 0
+ fi
+
qmp ${src_qmp} '"migrate", "arguments": { "uri": "unix:'${dst_incoming}'" }' > ${src_qmpout}
# Wait for the migration to complete
@@ -259,6 +281,9 @@ do_migration ()
tmp=${src_out}
src_out=${dst_out}
dst_out=${tmp}
+ tmp=${src_infifo}
+ src_infifo=${dst_infifo}
+ dst_infifo=${tmp}
tmp=${src_outfifo}
src_outfifo=${dst_outfifo}
dst_outfifo=${tmp}
--
2.42.0
next prev parent reply other threads:[~2024-03-19 8:02 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-19 7:58 [kvm-unit-tests PATCH v7 00/35] migration, powerpc improvements Nicholas Piggin
2024-03-19 7:58 ` [kvm-unit-tests PATCH v7 01/35] arch-run: Add functions to help handle migration directives from test Nicholas Piggin
2024-03-25 15:54 ` Thomas Huth
2024-03-19 7:58 ` [kvm-unit-tests PATCH v7 02/35] arch-run: Keep infifo open Nicholas Piggin
2024-03-19 7:58 ` Nicholas Piggin [this message]
2024-03-19 7:58 ` [kvm-unit-tests PATCH v7 04/35] (arm|s390): Use migrate_skip in test cases Nicholas Piggin
2024-03-19 7:58 ` [kvm-unit-tests PATCH v7 05/35] arch-run: Add a "continuous" migration option for tests Nicholas Piggin
2024-03-19 7:58 ` [kvm-unit-tests PATCH v7 06/35] gitlab-ci: Run migration selftest on s390x and powerpc Nicholas Piggin
2024-03-25 16:08 ` Thomas Huth
2024-03-28 8:16 ` Nicholas Piggin
2024-03-19 7:58 ` [kvm-unit-tests PATCH v7 07/35] common: add memory dirtying vs migration test Nicholas Piggin
2024-03-28 17:37 ` Thomas Huth
2024-04-05 4:54 ` Nicholas Piggin
2024-03-19 7:58 ` [kvm-unit-tests PATCH v7 08/35] powerpc: Fix KVM caps on POWER9 hosts Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 09/35] powerpc: Fix stack backtrace termination Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 10/35] powerpc: interrupt stack backtracing Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 11/35] powerpc/sprs: Specify SPRs with data rather than code Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 12/35] powerpc/sprs: Avoid taking PMU interrupts caused by register fuzzing Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 13/35] doc: start documentation directory with unittests.cfg doc Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 14/35] scripts: allow machine option to be specified in unittests.cfg Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 15/35] scripts: Accommodate powerpc powernv machine differences Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 16/35] powerpc: Support powernv machine with QEMU TCG Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 17/35] powerpc: Fix emulator illegal instruction test for powernv Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 18/35] powerpc/sprs: Test hypervisor registers on powernv machine Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 19/35] powerpc: general interrupt tests Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 20/35] powerpc: Add rtas stop-self support Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 21/35] powerpc: Remove broken SMP exception stack setup Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 22/35] powerpc: add SMP and IPI support Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 23/35] powerpc: Permit ACCEL=tcg,thread=single Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 24/35] powerpc: Avoid using larx/stcx. in spinlocks when only one CPU is running Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 25/35] powerpc: Add atomics tests Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 26/35] powerpc: Add timebase tests Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 27/35] powerpc: Add MMU support Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 28/35] common/sieve: Use vmalloc.h for setup_mmu definition Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 29/35] common/sieve: Support machines without MMU Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 30/35] powerpc: Add sieve.c common test Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 31/35] powerpc: add usermode support Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 32/35] powerpc: add pmu tests Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 33/35] configure: Make arch_libdir a first-class entity Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 34/35] powerpc: Remove remnants of ppc64 directory and build structure Nicholas Piggin
2024-03-19 7:59 ` [kvm-unit-tests PATCH v7 35/35] powerpc: gitlab CI update Nicholas Piggin
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=20240319075926.2422707-4-npiggin@gmail.com \
--to=npiggin@gmail.com \
--cc=andrew.jones@linux.dev \
--cc=kvm@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=lvivier@redhat.com \
--cc=pbonzini@redhat.com \
--cc=thuth@redhat.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).