* [kvm-unit-tests PATCH v2 0/4] Add panic test support
@ 2022-07-04 12:13 Nico Boehr
2022-07-04 12:13 ` [kvm-unit-tests PATCH v2 1/4] runtime: add support for panic tests Nico Boehr
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Nico Boehr @ 2022-07-04 12:13 UTC (permalink / raw)
To: kvm, linux-s390; +Cc: frankja, imbrenda, thuth
v1->v2:
---
* fix spelling mistakes/long lines (thanks Thomas)
* quoting improvments (thanks Thomas)
* smaller timeout for tests (thanks Thomas and Janis)
* move function and defines for cpu timer to time.h (thanks Janosch)
* fence tests for non-QEMU/KVM (thanks Janosch)
QEMU suports a guest state "guest-panicked" which indicates something in
the guest went wrong, for example on s390x, when an external interrupt
loop was triggered.
Since the guest does not continue to run when it is in the
guest-panicked state, it is currently impossible to write panicking
tests in kvm-unit-tests. Support from the runtime is needed to check
that the guest enters the guest-panicked state.
This series adds the required support to the runtime together with two
tests for s390x which cause guest panics.
Nico Boehr (4):
runtime: add support for panic tests
lib: s390x: add CPU timer functions to time.h
s390x: add extint loop test
s390x: add pgm spec interrupt loop test
lib/s390x/asm/time.h | 16 ++++++++++-
s390x/Makefile | 2 ++
s390x/panic-loop-extint.c | 60 +++++++++++++++++++++++++++++++++++++++
s390x/panic-loop-pgm.c | 53 ++++++++++++++++++++++++++++++++++
s390x/run | 2 +-
s390x/unittests.cfg | 12 ++++++++
scripts/arch-run.bash | 49 ++++++++++++++++++++++++++++++++
scripts/runtime.bash | 3 ++
8 files changed, 195 insertions(+), 2 deletions(-)
create mode 100644 s390x/panic-loop-extint.c
create mode 100644 s390x/panic-loop-pgm.c
--
2.36.1
^ permalink raw reply [flat|nested] 9+ messages in thread
* [kvm-unit-tests PATCH v2 1/4] runtime: add support for panic tests
2022-07-04 12:13 [kvm-unit-tests PATCH v2 0/4] Add panic test support Nico Boehr
@ 2022-07-04 12:13 ` Nico Boehr
2022-07-04 12:13 ` [kvm-unit-tests PATCH v2 2/4] lib: s390x: add CPU timer functions to time.h Nico Boehr
` (2 subsequent siblings)
3 siblings, 0 replies; 9+ messages in thread
From: Nico Boehr @ 2022-07-04 12:13 UTC (permalink / raw)
To: kvm, linux-s390; +Cc: frankja, imbrenda, thuth
QEMU supports a guest state "guest-panicked" which indicates something
in the guest went wrong, for example on s390x, when an external
interrupt loop was triggered.
Since the guest does not continue to run when it is in the
guest-panicked state, it is currently impossible to write panicking
tests in kvm-unit-tests. Support from the runtime is needed to check
that the guest enters the guest-panicked state.
Similar to migration tests, add a new group panic. Tests in this
group must enter the guest-panicked state to succeed.
The runtime will spawn a QEMU instance, connect to the QMP and listen
for events. To parse the QMP protocol, jq[1] is used. Same as with
netcat in the migration tests, panic tests won't run if jq is not
installed.
The guest is created in the stopped state and only continued when
connection to the QMP was successful. This ensures no events are missed
between QEMU start and the connect to the QMP.
[1] https://stedolan.github.io/jq/
Signed-off-by: Nico Boehr <nrb@linux.ibm.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
---
s390x/run | 2 +-
scripts/arch-run.bash | 49 +++++++++++++++++++++++++++++++++++++++++++
scripts/runtime.bash | 3 +++
3 files changed, 53 insertions(+), 1 deletion(-)
diff --git a/s390x/run b/s390x/run
index 24138f6803be..f1111dbdbe62 100755
--- a/s390x/run
+++ b/s390x/run
@@ -30,7 +30,7 @@ M+=",accel=$ACCEL"
command="$qemu -nodefaults -nographic $M"
command+=" -chardev stdio,id=con0 -device sclpconsole,chardev=con0"
command+=" -kernel"
-command="$(migration_cmd) $(timeout_cmd) $command"
+command="$(panic_cmd) $(migration_cmd) $(timeout_cmd) $command"
# We return the exit code via stdout, not via the QEMU return code
run_qemu_status $command "$@"
diff --git a/scripts/arch-run.bash b/scripts/arch-run.bash
index 0dfaf017db0a..739490bc7da2 100644
--- a/scripts/arch-run.bash
+++ b/scripts/arch-run.bash
@@ -104,6 +104,14 @@ qmp ()
echo '{ "execute": "qmp_capabilities" }{ "execute":' "$2" '}' | ncat -U $1
}
+qmp_events ()
+{
+ while ! test -S "$1"; do sleep 0.1; done
+ echo '{ "execute": "qmp_capabilities" }{ "execute": "cont" }' \
+ | ncat --no-shutdown -U $1 \
+ | jq -c 'select(has("event"))'
+}
+
run_migration ()
{
if ! command -v ncat >/dev/null 2>&1; then
@@ -164,6 +172,40 @@ run_migration ()
return $ret
}
+run_panic ()
+{
+ if ! command -v ncat >/dev/null 2>&1; then
+ echo "${FUNCNAME[0]} needs ncat (netcat)" >&2
+ return 77
+ fi
+
+ if ! command -v jq >/dev/null 2>&1; then
+ echo "${FUNCNAME[0]} needs jq" >&2
+ return 77
+ fi
+
+ qmp=$(mktemp -u -t panic-qmp.XXXXXXXXXX)
+
+ trap 'kill 0; exit 2' INT TERM
+ trap 'rm -f ${qmp}' RETURN EXIT
+
+ # start VM stopped so we don't miss any events
+ eval "$@" -chardev socket,id=mon1,path=${qmp},server=on,wait=off \
+ -mon chardev=mon1,mode=control -S &
+
+ panic_event_count=$(qmp_events ${qmp} | jq -c 'select(.event == "GUEST_PANICKED")' | wc -l)
+ if [ "$panic_event_count" -lt 1 ]; then
+ echo "FAIL: guest did not panic"
+ ret=3
+ else
+ # some QEMU versions report multiple panic events
+ echo "PASS: guest panicked"
+ ret=1
+ fi
+
+ return $ret
+}
+
migration_cmd ()
{
if [ "$MIGRATION" = "yes" ]; then
@@ -171,6 +213,13 @@ migration_cmd ()
fi
}
+panic_cmd ()
+{
+ if [ "$PANIC" = "yes" ]; then
+ echo "run_panic"
+ fi
+}
+
search_qemu_binary ()
{
local save_path=$PATH
diff --git a/scripts/runtime.bash b/scripts/runtime.bash
index 7d0180bf14bd..8072f3bb536a 100644
--- a/scripts/runtime.bash
+++ b/scripts/runtime.bash
@@ -145,6 +145,9 @@ function run()
if find_word "migration" "$groups"; then
cmdline="MIGRATION=yes $cmdline"
fi
+ if find_word "panic" "$groups"; then
+ cmdline="PANIC=yes $cmdline"
+ fi
if [ "$verbose" = "yes" ]; then
echo $cmdline
fi
--
2.36.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [kvm-unit-tests PATCH v2 2/4] lib: s390x: add CPU timer functions to time.h
2022-07-04 12:13 [kvm-unit-tests PATCH v2 0/4] Add panic test support Nico Boehr
2022-07-04 12:13 ` [kvm-unit-tests PATCH v2 1/4] runtime: add support for panic tests Nico Boehr
@ 2022-07-04 12:13 ` Nico Boehr
2022-07-05 8:20 ` Claudio Imbrenda
2022-07-04 12:13 ` [kvm-unit-tests PATCH v2 3/4] s390x: add extint loop test Nico Boehr
2022-07-04 12:13 ` [kvm-unit-tests PATCH v2 4/4] s390x: add pgm spec interrupt " Nico Boehr
3 siblings, 1 reply; 9+ messages in thread
From: Nico Boehr @ 2022-07-04 12:13 UTC (permalink / raw)
To: kvm, linux-s390; +Cc: frankja, imbrenda, thuth
Upcoming changes will make use of the CPU timer, so add a convenience
function to set the CPU timer.
Since shifts for both CPU timer and TOD clock are the same, introduce a
new define TIMING_S390_SHIFT_US. The respective shifts for CPU timer and
TOD clock reference it, so the semantic difference between the two
defines is kept.
Signed-off-by: Nico Boehr <nrb@linux.ibm.com>
---
lib/s390x/asm/time.h | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/lib/s390x/asm/time.h b/lib/s390x/asm/time.h
index 7652a151e87a..9ae364afb8a3 100644
--- a/lib/s390x/asm/time.h
+++ b/lib/s390x/asm/time.h
@@ -11,9 +11,13 @@
#ifndef _ASMS390X_TIME_H_
#define _ASMS390X_TIME_H_
-#define STCK_SHIFT_US (63 - 51)
+#define TIMING_S390_SHIFT_US (63 - 51)
+
+#define STCK_SHIFT_US TIMING_S390_SHIFT_US
#define STCK_MAX ((1UL << 52) - 1)
+#define CPU_TIMER_SHIFT_US TIMING_S390_SHIFT_US
+
static inline uint64_t get_clock_us(void)
{
uint64_t clk;
@@ -45,4 +49,14 @@ static inline void mdelay(unsigned long ms)
udelay(ms * 1000);
}
+static inline void cpu_timer_set(int64_t timeout_ms)
+{
+ int64_t timer_value = (timeout_ms * 1000) << CPU_TIMER_SHIFT_US;
+ asm volatile (
+ "spt %[timer_value]\n"
+ :
+ : [timer_value] "Q" (timer_value)
+ );
+}
+
#endif
--
2.36.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [kvm-unit-tests PATCH v2 3/4] s390x: add extint loop test
2022-07-04 12:13 [kvm-unit-tests PATCH v2 0/4] Add panic test support Nico Boehr
2022-07-04 12:13 ` [kvm-unit-tests PATCH v2 1/4] runtime: add support for panic tests Nico Boehr
2022-07-04 12:13 ` [kvm-unit-tests PATCH v2 2/4] lib: s390x: add CPU timer functions to time.h Nico Boehr
@ 2022-07-04 12:13 ` Nico Boehr
2022-07-04 12:13 ` [kvm-unit-tests PATCH v2 4/4] s390x: add pgm spec interrupt " Nico Boehr
3 siblings, 0 replies; 9+ messages in thread
From: Nico Boehr @ 2022-07-04 12:13 UTC (permalink / raw)
To: kvm, linux-s390; +Cc: frankja, imbrenda, thuth
The CPU timer interrupt stays pending as long as the CPU timer value is
negative. This can lead to interruption loops when the ext_new_psw mask
has external interrupts enabled.
QEMU is able to detect this situation and panic the guest, so add a test
for it.
Signed-off-by: Nico Boehr <nrb@linux.ibm.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
---
s390x/Makefile | 1 +
s390x/panic-loop-extint.c | 60 +++++++++++++++++++++++++++++++++++++++
s390x/unittests.cfg | 6 ++++
3 files changed, 67 insertions(+)
create mode 100644 s390x/panic-loop-extint.c
diff --git a/s390x/Makefile b/s390x/Makefile
index efd5e0c13102..e4649da50d9d 100644
--- a/s390x/Makefile
+++ b/s390x/Makefile
@@ -34,6 +34,7 @@ tests += $(TEST_DIR)/migration.elf
tests += $(TEST_DIR)/pv-attest.elf
tests += $(TEST_DIR)/migration-cmm.elf
tests += $(TEST_DIR)/migration-skey.elf
+tests += $(TEST_DIR)/panic-loop-extint.elf
pv-tests += $(TEST_DIR)/pv-diags.elf
diff --git a/s390x/panic-loop-extint.c b/s390x/panic-loop-extint.c
new file mode 100644
index 000000000000..b1d9cf3565af
--- /dev/null
+++ b/s390x/panic-loop-extint.c
@@ -0,0 +1,60 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * External interrupt loop test
+ *
+ * Copyright IBM Corp. 2022
+ *
+ * Authors:
+ * Nico Boehr <nrb@linux.ibm.com>
+ */
+#include <libcflat.h>
+#include <asm/interrupt.h>
+#include <asm/barrier.h>
+#include <asm/time.h>
+#include <hardware.h>
+
+static void ext_int_handler(void)
+{
+ /*
+ * return to ext_old_psw. This gives us the chance to print the return_fail
+ * in case something goes wrong.
+ */
+ asm volatile (
+ "lpswe %[ext_old_psw]\n"
+ :
+ : [ext_old_psw] "Q"(lowcore.ext_old_psw)
+ : "memory"
+ );
+}
+
+int main(void)
+{
+ struct psw ext_new_psw_orig;
+
+ report_prefix_push("panic-loop-extint");
+
+ if (!host_is_qemu() || host_is_tcg()) {
+ report_skip("QEMU-KVM-only test");
+ goto out;
+ }
+
+ ext_new_psw_orig = lowcore.ext_new_psw;
+ lowcore.ext_new_psw.addr = (uint64_t)ext_int_handler;
+ lowcore.ext_new_psw.mask |= PSW_MASK_EXT;
+
+ load_psw_mask(extract_psw_mask() | PSW_MASK_EXT);
+ ctl_set_bit(0, CTL0_CLOCK_COMPARATOR);
+
+ cpu_timer_set(1);
+
+ mdelay(2000);
+
+ /* restore previous ext_new_psw so QEMU can properly terminate */
+ lowcore.ext_new_psw = ext_new_psw_orig;
+
+ report_fail("survived extint loop");
+
+out:
+ report_prefix_pop();
+ return report_summary();
+}
diff --git a/s390x/unittests.cfg b/s390x/unittests.cfg
index 8e52f560bb1e..53aeb94f382c 100644
--- a/s390x/unittests.cfg
+++ b/s390x/unittests.cfg
@@ -184,3 +184,9 @@ groups = migration
[migration-skey]
file = migration-skey.elf
groups = migration
+
+[panic-loop-extint]
+file = panic-loop-extint.elf
+groups = panic
+accel = kvm
+timeout = 5
--
2.36.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [kvm-unit-tests PATCH v2 4/4] s390x: add pgm spec interrupt loop test
2022-07-04 12:13 [kvm-unit-tests PATCH v2 0/4] Add panic test support Nico Boehr
` (2 preceding siblings ...)
2022-07-04 12:13 ` [kvm-unit-tests PATCH v2 3/4] s390x: add extint loop test Nico Boehr
@ 2022-07-04 12:13 ` Nico Boehr
2022-07-11 12:54 ` Thomas Huth
3 siblings, 1 reply; 9+ messages in thread
From: Nico Boehr @ 2022-07-04 12:13 UTC (permalink / raw)
To: kvm, linux-s390; +Cc: frankja, imbrenda, thuth
An invalid PSW causes a program interrupt. When an invalid PSW is
introduced in the pgm_new_psw, an interrupt loop occurs as soon as a
program interrupt is caused.
QEMU should detect that and panic the guest, hence add a test for it.
Signed-off-by: Nico Boehr <nrb@linux.ibm.com>
---
s390x/Makefile | 1 +
s390x/panic-loop-pgm.c | 53 ++++++++++++++++++++++++++++++++++++++++++
s390x/unittests.cfg | 6 +++++
3 files changed, 60 insertions(+)
create mode 100644 s390x/panic-loop-pgm.c
diff --git a/s390x/Makefile b/s390x/Makefile
index e4649da50d9d..66415d0b588d 100644
--- a/s390x/Makefile
+++ b/s390x/Makefile
@@ -35,6 +35,7 @@ tests += $(TEST_DIR)/pv-attest.elf
tests += $(TEST_DIR)/migration-cmm.elf
tests += $(TEST_DIR)/migration-skey.elf
tests += $(TEST_DIR)/panic-loop-extint.elf
+tests += $(TEST_DIR)/panic-loop-pgm.elf
pv-tests += $(TEST_DIR)/pv-diags.elf
diff --git a/s390x/panic-loop-pgm.c b/s390x/panic-loop-pgm.c
new file mode 100644
index 000000000000..68934057a251
--- /dev/null
+++ b/s390x/panic-loop-pgm.c
@@ -0,0 +1,53 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Program interrupt loop test
+ *
+ * Copyright IBM Corp. 2022
+ *
+ * Authors:
+ * Nico Boehr <nrb@linux.ibm.com>
+ */
+#include <libcflat.h>
+#include <bitops.h>
+#include <asm/interrupt.h>
+#include <asm/barrier.h>
+#include <hardware.h>
+
+static void pgm_int_handler(void)
+{
+ /*
+ * return to pgm_old_psw. This gives us the chance to print the return_fail
+ * in case something goes wrong.
+ */
+ asm volatile (
+ "lpswe %[pgm_old_psw]\n"
+ :
+ : [pgm_old_psw] "Q"(lowcore.pgm_old_psw)
+ : "memory"
+ );
+}
+
+int main(void)
+{
+ report_prefix_push("panic-loop-pgm");
+
+ if (!host_is_qemu() || host_is_tcg()) {
+ report_skip("QEMU-KVM-only test");
+ goto out;
+ }
+
+ lowcore.pgm_new_psw.addr = (uint64_t) pgm_int_handler;
+ /* bit 12 set is invalid */
+ lowcore.pgm_new_psw.mask = extract_psw_mask() | BIT(63 - 12);
+ mb();
+
+ /* cause a pgm int */
+ *((int *)-4) = 0x42;
+ mb();
+
+ report_fail("survived pgmint loop");
+
+out:
+ report_prefix_pop();
+ return report_summary();
+}
diff --git a/s390x/unittests.cfg b/s390x/unittests.cfg
index 53aeb94f382c..0f7d830220d7 100644
--- a/s390x/unittests.cfg
+++ b/s390x/unittests.cfg
@@ -190,3 +190,9 @@ file = panic-loop-extint.elf
groups = panic
accel = kvm
timeout = 5
+
+[panic-loop-pgm]
+file = panic-loop-pgm.elf
+groups = panic
+accel = kvm
+timeout = 5
--
2.36.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [kvm-unit-tests PATCH v2 2/4] lib: s390x: add CPU timer functions to time.h
2022-07-04 12:13 ` [kvm-unit-tests PATCH v2 2/4] lib: s390x: add CPU timer functions to time.h Nico Boehr
@ 2022-07-05 8:20 ` Claudio Imbrenda
2022-07-19 6:35 ` Nico Boehr
0 siblings, 1 reply; 9+ messages in thread
From: Claudio Imbrenda @ 2022-07-05 8:20 UTC (permalink / raw)
To: Nico Boehr; +Cc: kvm, linux-s390, frankja, thuth
On Mon, 4 Jul 2022 14:13:26 +0200
Nico Boehr <nrb@linux.ibm.com> wrote:
> Upcoming changes will make use of the CPU timer, so add a convenience
> function to set the CPU timer.
>
> Since shifts for both CPU timer and TOD clock are the same, introduce a
> new define TIMING_S390_SHIFT_US. The respective shifts for CPU timer and
> TOD clock reference it, so the semantic difference between the two
> defines is kept.
>
> Signed-off-by: Nico Boehr <nrb@linux.ibm.com>
> ---
> lib/s390x/asm/time.h | 16 +++++++++++++++-
> 1 file changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/lib/s390x/asm/time.h b/lib/s390x/asm/time.h
> index 7652a151e87a..9ae364afb8a3 100644
> --- a/lib/s390x/asm/time.h
> +++ b/lib/s390x/asm/time.h
> @@ -11,9 +11,13 @@
> #ifndef _ASMS390X_TIME_H_
> #define _ASMS390X_TIME_H_
>
> -#define STCK_SHIFT_US (63 - 51)
> +#define TIMING_S390_SHIFT_US (63 - 51)
I would call it S390_CLOCK_SHIFT_US
> +
> +#define STCK_SHIFT_US TIMING_S390_SHIFT_US
> #define STCK_MAX ((1UL << 52) - 1)
>
> +#define CPU_TIMER_SHIFT_US TIMING_S390_SHIFT_US
> +
> static inline uint64_t get_clock_us(void)
> {
> uint64_t clk;
> @@ -45,4 +49,14 @@ static inline void mdelay(unsigned long ms)
> udelay(ms * 1000);
> }
>
> +static inline void cpu_timer_set(int64_t timeout_ms)
I would call the function cpu_timer_set_ms
so that it's clear what unit goes in, and it makes things easier if in
the future someone needs a _us version
> +{
> + int64_t timer_value = (timeout_ms * 1000) << CPU_TIMER_SHIFT_US;
> + asm volatile (
> + "spt %[timer_value]\n"
> + :
> + : [timer_value] "Q" (timer_value)
> + );
> +}
> +
> #endif
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [kvm-unit-tests PATCH v2 4/4] s390x: add pgm spec interrupt loop test
2022-07-04 12:13 ` [kvm-unit-tests PATCH v2 4/4] s390x: add pgm spec interrupt " Nico Boehr
@ 2022-07-11 12:54 ` Thomas Huth
2022-07-18 14:07 ` Nico Boehr
0 siblings, 1 reply; 9+ messages in thread
From: Thomas Huth @ 2022-07-11 12:54 UTC (permalink / raw)
To: Nico Boehr, kvm, linux-s390; +Cc: frankja, imbrenda
On 04/07/2022 14.13, Nico Boehr wrote:
> An invalid PSW causes a program interrupt. When an invalid PSW is
> introduced in the pgm_new_psw, an interrupt loop occurs as soon as a
> program interrupt is caused.
>
> QEMU should detect that and panic the guest, hence add a test for it.
>
> Signed-off-by: Nico Boehr <nrb@linux.ibm.com>
> ---
> s390x/Makefile | 1 +
> s390x/panic-loop-pgm.c | 53 ++++++++++++++++++++++++++++++++++++++++++
> s390x/unittests.cfg | 6 +++++
> 3 files changed, 60 insertions(+)
> create mode 100644 s390x/panic-loop-pgm.c
>
> diff --git a/s390x/Makefile b/s390x/Makefile
> index e4649da50d9d..66415d0b588d 100644
> --- a/s390x/Makefile
> +++ b/s390x/Makefile
> @@ -35,6 +35,7 @@ tests += $(TEST_DIR)/pv-attest.elf
> tests += $(TEST_DIR)/migration-cmm.elf
> tests += $(TEST_DIR)/migration-skey.elf
> tests += $(TEST_DIR)/panic-loop-extint.elf
> +tests += $(TEST_DIR)/panic-loop-pgm.elf
>
> pv-tests += $(TEST_DIR)/pv-diags.elf
>
> diff --git a/s390x/panic-loop-pgm.c b/s390x/panic-loop-pgm.c
> new file mode 100644
> index 000000000000..68934057a251
> --- /dev/null
> +++ b/s390x/panic-loop-pgm.c
> @@ -0,0 +1,53 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +/*
> + * Program interrupt loop test
> + *
> + * Copyright IBM Corp. 2022
> + *
> + * Authors:
> + * Nico Boehr <nrb@linux.ibm.com>
> + */
> +#include <libcflat.h>
> +#include <bitops.h>
> +#include <asm/interrupt.h>
> +#include <asm/barrier.h>
> +#include <hardware.h>
> +
> +static void pgm_int_handler(void)
> +{
> + /*
> + * return to pgm_old_psw. This gives us the chance to print the return_fail
> + * in case something goes wrong.
> + */
> + asm volatile (
> + "lpswe %[pgm_old_psw]\n"
> + :
> + : [pgm_old_psw] "Q"(lowcore.pgm_old_psw)
> + : "memory"
> + );
> +}
> +
> +int main(void)
> +{
> + report_prefix_push("panic-loop-pgm");
> +
> + if (!host_is_qemu() || host_is_tcg()) {
Is TCG not able to detect the loop? ... if so, we should maybe fix QEMU?
> + report_skip("QEMU-KVM-only test");
> + goto out;
> + }
> +
> + lowcore.pgm_new_psw.addr = (uint64_t) pgm_int_handler;
> + /* bit 12 set is invalid */
> + lowcore.pgm_new_psw.mask = extract_psw_mask() | BIT(63 - 12);
> + mb();
> +
> + /* cause a pgm int */
> + *((int *)-4) = 0x42;
> + mb();
> +
> + report_fail("survived pgmint loop");
> +
> +out:
> + report_prefix_pop();
> + return report_summary();
> +}
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [kvm-unit-tests PATCH v2 4/4] s390x: add pgm spec interrupt loop test
2022-07-11 12:54 ` Thomas Huth
@ 2022-07-18 14:07 ` Nico Boehr
0 siblings, 0 replies; 9+ messages in thread
From: Nico Boehr @ 2022-07-18 14:07 UTC (permalink / raw)
To: kvm; +Cc: frankja, imbrenda
Quoting Thomas Huth (2022-07-11 14:54:57)
[...]
> > diff --git a/s390x/panic-loop-pgm.c b/s390x/panic-loop-pgm.c
> > new file mode 100644
> > index 000000000000..68934057a251
> > --- /dev/null
> > +++ b/s390x/panic-loop-pgm.c
[...]
> > +int main(void)
> > +{
> > + report_prefix_push("panic-loop-pgm");
> > +
> > + if (!host_is_qemu() || host_is_tcg()) {
>
> Is TCG not able to detect the loop? ... if so, we should maybe fix QEMU?
Sorry, Thomas, I seem to have missed your mail.
Yes, TCG is not able to detect the PGM loop. Should I just go ahead and remove the check so we at least know that there is something left to fix?
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [kvm-unit-tests PATCH v2 2/4] lib: s390x: add CPU timer functions to time.h
2022-07-05 8:20 ` Claudio Imbrenda
@ 2022-07-19 6:35 ` Nico Boehr
0 siblings, 0 replies; 9+ messages in thread
From: Nico Boehr @ 2022-07-19 6:35 UTC (permalink / raw)
To: kvm; +Cc: kvm, linux-s390, frankja, thuth
Quoting Claudio Imbrenda (2022-07-05 10:20:11)
Sorry Claudio, missed your mail as well...
> > diff --git a/lib/s390x/asm/time.h b/lib/s390x/asm/time.h
> > index 7652a151e87a..9ae364afb8a3 100644
> > --- a/lib/s390x/asm/time.h
> > +++ b/lib/s390x/asm/time.h
> > @@ -11,9 +11,13 @@
[...]
> > +#define TIMING_S390_SHIFT_US (63 - 51)
>
> I would call it S390_CLOCK_SHIFT_US
Will do.
[...]
> > +static inline void cpu_timer_set(int64_t timeout_ms)
>
> I would call the function cpu_timer_set_ms
>
> so that it's clear what unit goes in, and it makes things easier if in
> the future someone needs a _us version
Makes sense, that's also how the other functions are, so it is more consistent.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2022-07-19 6:35 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-04 12:13 [kvm-unit-tests PATCH v2 0/4] Add panic test support Nico Boehr
2022-07-04 12:13 ` [kvm-unit-tests PATCH v2 1/4] runtime: add support for panic tests Nico Boehr
2022-07-04 12:13 ` [kvm-unit-tests PATCH v2 2/4] lib: s390x: add CPU timer functions to time.h Nico Boehr
2022-07-05 8:20 ` Claudio Imbrenda
2022-07-19 6:35 ` Nico Boehr
2022-07-04 12:13 ` [kvm-unit-tests PATCH v2 3/4] s390x: add extint loop test Nico Boehr
2022-07-04 12:13 ` [kvm-unit-tests PATCH v2 4/4] s390x: add pgm spec interrupt " Nico Boehr
2022-07-11 12:54 ` Thomas Huth
2022-07-18 14:07 ` Nico Boehr
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox