* [kvm-unit-tests PATCH v2 1/9] s390x: uv-host: Fix UV init test memory allocation
2023-03-24 12:17 [kvm-unit-tests PATCH v2 0/9] s390x: uv-host: Fixups and extensions part 1 Janosch Frank
@ 2023-03-24 12:17 ` Janosch Frank
2023-03-24 12:39 ` Nico Boehr
2023-03-24 12:17 ` [kvm-unit-tests PATCH v2 2/9] s390x: uv-host: Check for sufficient amount of memory Janosch Frank
` (7 subsequent siblings)
8 siblings, 1 reply; 14+ messages in thread
From: Janosch Frank @ 2023-03-24 12:17 UTC (permalink / raw)
To: kvm; +Cc: thuth, imbrenda, nrb
The init memory has to be above 2G and 1M aligned but we're currently
aligning on 2G which means the allocations need a lot of unused
memory.
Also the second block of memory was never actually used for the double
init test since its address is never put into the uvcb.
Let's fix that.
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
---
s390x/uv-host.c | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/s390x/uv-host.c b/s390x/uv-host.c
index 33e6eec6..9dfaebd7 100644
--- a/s390x/uv-host.c
+++ b/s390x/uv-host.c
@@ -500,14 +500,17 @@ static void test_config_create(void)
static void test_init(void)
{
int rc;
- uint64_t mem;
+ uint64_t tmp;
- /* Donated storage needs to be over 2GB */
- mem = (uint64_t)memalign_pages_flags(SZ_1M, uvcb_qui.uv_base_stor_len, AREA_NORMAL);
+ /*
+ * Donated storage needs to be over 2GB, AREA_NORMAL does that
+ * on s390x.
+ */
+ tmp = (uint64_t)memalign_pages_flags(SZ_1M, uvcb_qui.uv_base_stor_len, AREA_NORMAL);
uvcb_init.header.len = sizeof(uvcb_init);
uvcb_init.header.cmd = UVC_CMD_INIT_UV;
- uvcb_init.stor_origin = mem;
+ uvcb_init.stor_origin = tmp;
uvcb_init.stor_len = uvcb_qui.uv_base_stor_len;
report_prefix_push("init");
@@ -528,14 +531,14 @@ static void test_init(void)
rc = uv_call(0, (uint64_t)&uvcb_init);
report(rc == 1 && (uvcb_init.header.rc == 0x104 || uvcb_init.header.rc == 0x105),
"storage origin invalid");
- uvcb_init.stor_origin = mem;
+ uvcb_init.stor_origin = tmp;
if (uvcb_init.stor_len >= HPAGE_SIZE) {
uvcb_init.stor_origin = get_max_ram_size() - HPAGE_SIZE;
rc = uv_call(0, (uint64_t)&uvcb_init);
report(rc == 1 && uvcb_init.header.rc == 0x105,
"storage + length invalid");
- uvcb_init.stor_origin = mem;
+ uvcb_init.stor_origin = tmp;
} else {
report_skip("storage + length invalid, stor_len < HPAGE_SIZE");
}
@@ -544,7 +547,7 @@ static void test_init(void)
rc = uv_call(0, (uint64_t)&uvcb_init);
report(rc == 1 && uvcb_init.header.rc == 0x108,
"storage below 2GB");
- uvcb_init.stor_origin = mem;
+ uvcb_init.stor_origin = tmp;
smp_cpu_setup(1, PSW_WITH_CUR_MASK(cpu_loop));
rc = uv_call(0, (uint64_t)&uvcb_init);
@@ -555,10 +558,12 @@ static void test_init(void)
rc = uv_call(0, (uint64_t)&uvcb_init);
report(rc == 0 && uvcb_init.header.rc == UVC_RC_EXECUTED, "successful");
- mem = (uint64_t)memalign(1UL << 31, uvcb_qui.uv_base_stor_len);
+ tmp = uvcb_init.stor_origin;
+ uvcb_init.stor_origin = (uint64_t)memalign_pages_flags(HPAGE_SIZE, uvcb_qui.uv_base_stor_len, AREA_NORMAL);
rc = uv_call(0, (uint64_t)&uvcb_init);
report(rc == 1 && uvcb_init.header.rc == 0x101, "double init");
- free((void *)mem);
+ free((void *)uvcb_init.stor_origin);
+ uvcb_init.stor_origin = tmp;
report_prefix_pop();
}
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [kvm-unit-tests PATCH v2 2/9] s390x: uv-host: Check for sufficient amount of memory
2023-03-24 12:17 [kvm-unit-tests PATCH v2 0/9] s390x: uv-host: Fixups and extensions part 1 Janosch Frank
2023-03-24 12:17 ` [kvm-unit-tests PATCH v2 1/9] s390x: uv-host: Fix UV init test memory allocation Janosch Frank
@ 2023-03-24 12:17 ` Janosch Frank
2023-03-24 12:17 ` [kvm-unit-tests PATCH v2 3/9] s390x: Add PV tests to unittests.cfg Janosch Frank
` (6 subsequent siblings)
8 siblings, 0 replies; 14+ messages in thread
From: Janosch Frank @ 2023-03-24 12:17 UTC (permalink / raw)
To: kvm; +Cc: thuth, imbrenda, nrb
The UV init storage needs to be above 2G so we need a little over 2G
of memory when running the test.
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Reviewed-by: Nico Boehr <nrb@linux.ibm.com>
---
s390x/uv-host.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/s390x/uv-host.c b/s390x/uv-host.c
index 9dfaebd7..91e88a1f 100644
--- a/s390x/uv-host.c
+++ b/s390x/uv-host.c
@@ -720,6 +720,17 @@ int main(void)
test_invalid();
test_uv_uninitialized();
test_query();
+
+ /*
+ * Some of the UV memory needs to be allocated with >31 bit
+ * addresses which means we need a lot more memory than other
+ * tests.
+ */
+ if (get_ram_size() < (SZ_1M * 2200UL)) {
+ report_skip("Not enough memory. This test needs about 2200MB of memory");
+ goto done;
+ }
+
test_init();
setup_vmem();
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [kvm-unit-tests PATCH v2 3/9] s390x: Add PV tests to unittests.cfg
2023-03-24 12:17 [kvm-unit-tests PATCH v2 0/9] s390x: uv-host: Fixups and extensions part 1 Janosch Frank
2023-03-24 12:17 ` [kvm-unit-tests PATCH v2 1/9] s390x: uv-host: Fix UV init test memory allocation Janosch Frank
2023-03-24 12:17 ` [kvm-unit-tests PATCH v2 2/9] s390x: uv-host: Check for sufficient amount of memory Janosch Frank
@ 2023-03-24 12:17 ` Janosch Frank
2023-03-24 12:40 ` Nico Boehr
2023-03-24 12:17 ` [kvm-unit-tests PATCH v2 4/9] s390x: uv-host: Beautify code Janosch Frank
` (5 subsequent siblings)
8 siblings, 1 reply; 14+ messages in thread
From: Janosch Frank @ 2023-03-24 12:17 UTC (permalink / raw)
To: kvm; +Cc: thuth, imbrenda, nrb
Even if the first thing those tests do is skipping they should still
be run to make sure the tests boots and the skipping works.
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
---
s390x/unittests.cfg | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/s390x/unittests.cfg b/s390x/unittests.cfg
index d97eb5e9..e9271f9a 100644
--- a/s390x/unittests.cfg
+++ b/s390x/unittests.cfg
@@ -215,3 +215,20 @@ file = migration-skey.elf
smp = 2
groups = migration
extra_params = -append '--parallel'
+
+[pv-diags]
+file = pv-diags.elf
+extra_params = -m 2200
+
+[pv-icptcode]
+file = pv-icptcode.elf
+extra_params = -m 2200 -smp 3
+
+[pv-ipl]
+file = pv-ipl.elf
+extra_params = -m 2200
+
+[uv-host]
+file = uv-host.elf
+extra_params = -m 2200 -smp 2
+
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [kvm-unit-tests PATCH v2 4/9] s390x: uv-host: Beautify code
2023-03-24 12:17 [kvm-unit-tests PATCH v2 0/9] s390x: uv-host: Fixups and extensions part 1 Janosch Frank
` (2 preceding siblings ...)
2023-03-24 12:17 ` [kvm-unit-tests PATCH v2 3/9] s390x: Add PV tests to unittests.cfg Janosch Frank
@ 2023-03-24 12:17 ` Janosch Frank
2023-03-24 12:17 ` [kvm-unit-tests PATCH v2 5/9] s390x: uv-host: Add cpu number check Janosch Frank
` (4 subsequent siblings)
8 siblings, 0 replies; 14+ messages in thread
From: Janosch Frank @ 2023-03-24 12:17 UTC (permalink / raw)
To: kvm; +Cc: thuth, imbrenda, nrb
Fixup top comment and add missing space.
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Reviewed-by: Nico Boehr <nrb@linux.ibm.com>
---
s390x/uv-host.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/s390x/uv-host.c b/s390x/uv-host.c
index 91e88a1f..32cbe03f 100644
--- a/s390x/uv-host.c
+++ b/s390x/uv-host.c
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
- * Guest Ultravisor Call tests
+ * Host Ultravisor Call tests
*
* Copyright (c) 2021 IBM Corp
*
@@ -33,7 +33,7 @@ static struct uv_cb_csc uvcb_csc;
extern int diag308_load_reset(u64 code);
-struct cmd_list{
+struct cmd_list {
const char *name;
uint16_t cmd;
uint16_t len;
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [kvm-unit-tests PATCH v2 5/9] s390x: uv-host: Add cpu number check
2023-03-24 12:17 [kvm-unit-tests PATCH v2 0/9] s390x: uv-host: Fixups and extensions part 1 Janosch Frank
` (3 preceding siblings ...)
2023-03-24 12:17 ` [kvm-unit-tests PATCH v2 4/9] s390x: uv-host: Beautify code Janosch Frank
@ 2023-03-24 12:17 ` Janosch Frank
2023-03-24 12:17 ` [kvm-unit-tests PATCH v2 6/9] s390x: uv-host: Fix create guest variable storage prefix check Janosch Frank
` (3 subsequent siblings)
8 siblings, 0 replies; 14+ messages in thread
From: Janosch Frank @ 2023-03-24 12:17 UTC (permalink / raw)
To: kvm; +Cc: thuth, imbrenda, nrb
We should only run a test that needs more than one cpu if a sufficient
number of cpus are available.
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Reviewed-by: Nico Boehr <nrb@linux.ibm.com>
---
s390x/uv-host.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/s390x/uv-host.c b/s390x/uv-host.c
index 32cbe03f..13e49ed3 100644
--- a/s390x/uv-host.c
+++ b/s390x/uv-host.c
@@ -549,11 +549,15 @@ static void test_init(void)
"storage below 2GB");
uvcb_init.stor_origin = tmp;
- smp_cpu_setup(1, PSW_WITH_CUR_MASK(cpu_loop));
- rc = uv_call(0, (uint64_t)&uvcb_init);
- report(rc == 1 && uvcb_init.header.rc == 0x102,
- "too many running cpus");
- smp_cpu_stop(1);
+ if (smp_query_num_cpus() > 1) {
+ smp_cpu_setup(1, PSW_WITH_CUR_MASK(cpu_loop));
+ rc = uv_call(0, (uint64_t)&uvcb_init);
+ report(rc == 1 && uvcb_init.header.rc == 0x102,
+ "too many running cpus");
+ smp_cpu_stop(1);
+ } else {
+ report_skip("Not enough cpus for 0x102 test");
+ }
rc = uv_call(0, (uint64_t)&uvcb_init);
report(rc == 0 && uvcb_init.header.rc == UVC_RC_EXECUTED, "successful");
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [kvm-unit-tests PATCH v2 6/9] s390x: uv-host: Fix create guest variable storage prefix check
2023-03-24 12:17 [kvm-unit-tests PATCH v2 0/9] s390x: uv-host: Fixups and extensions part 1 Janosch Frank
` (4 preceding siblings ...)
2023-03-24 12:17 ` [kvm-unit-tests PATCH v2 5/9] s390x: uv-host: Add cpu number check Janosch Frank
@ 2023-03-24 12:17 ` Janosch Frank
2023-03-24 12:17 ` [kvm-unit-tests PATCH v2 7/9] s390x: uv-host: Switch to smp_sigp Janosch Frank
` (2 subsequent siblings)
8 siblings, 0 replies; 14+ messages in thread
From: Janosch Frank @ 2023-03-24 12:17 UTC (permalink / raw)
To: kvm; +Cc: thuth, imbrenda, nrb
We want more than one cpu and the rc is 10B, not 10E.
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Reviewed-by: Nico Boehr <nrb@linux.ibm.com>
---
s390x/uv-host.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/s390x/uv-host.c b/s390x/uv-host.c
index 13e49ed3..f9a55acf 100644
--- a/s390x/uv-host.c
+++ b/s390x/uv-host.c
@@ -434,11 +434,15 @@ static void test_config_create(void)
"base storage origin contains lowcore");
uvcb_cgc.conf_base_stor_origin = tmp;
- if (smp_query_num_cpus() == 1) {
+ /*
+ * Let's not make it too easy and use a second cpu to set a
+ * non-zero prefix.
+ */
+ if (smp_query_num_cpus() > 1) {
sigp_retry(1, SIGP_SET_PREFIX,
uvcb_cgc.conf_var_stor_origin + PAGE_SIZE, NULL);
rc = uv_call(0, (uint64_t)&uvcb_cgc);
- report(uvcb_cgc.header.rc == 0x10e && rc == 1 &&
+ report(uvcb_cgc.header.rc == 0x10b && rc == 1 &&
!uvcb_cgc.guest_handle, "variable storage area contains lowcore");
sigp_retry(1, SIGP_SET_PREFIX, 0x0, NULL);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [kvm-unit-tests PATCH v2 7/9] s390x: uv-host: Switch to smp_sigp
2023-03-24 12:17 [kvm-unit-tests PATCH v2 0/9] s390x: uv-host: Fixups and extensions part 1 Janosch Frank
` (5 preceding siblings ...)
2023-03-24 12:17 ` [kvm-unit-tests PATCH v2 6/9] s390x: uv-host: Fix create guest variable storage prefix check Janosch Frank
@ 2023-03-24 12:17 ` Janosch Frank
2023-03-24 12:40 ` Nico Boehr
2023-03-24 12:17 ` [kvm-unit-tests PATCH v2 8/9] s390x: uv-host: Properly handle config creation errors Janosch Frank
2023-03-24 12:17 ` [kvm-unit-tests PATCH v2 9/9] s390x: uv-host: Fence access checks when UV debug is enabled Janosch Frank
8 siblings, 1 reply; 14+ messages in thread
From: Janosch Frank @ 2023-03-24 12:17 UTC (permalink / raw)
To: kvm; +Cc: thuth, imbrenda, nrb
Let's move to the new smp_sigp() interface which abstracts cpu
numbers.
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
---
s390x/uv-host.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/s390x/uv-host.c b/s390x/uv-host.c
index f9a55acf..8d1d441f 100644
--- a/s390x/uv-host.c
+++ b/s390x/uv-host.c
@@ -439,12 +439,12 @@ static void test_config_create(void)
* non-zero prefix.
*/
if (smp_query_num_cpus() > 1) {
- sigp_retry(1, SIGP_SET_PREFIX,
+ smp_sigp(1, SIGP_SET_PREFIX,
uvcb_cgc.conf_var_stor_origin + PAGE_SIZE, NULL);
rc = uv_call(0, (uint64_t)&uvcb_cgc);
report(uvcb_cgc.header.rc == 0x10b && rc == 1 &&
!uvcb_cgc.guest_handle, "variable storage area contains lowcore");
- sigp_retry(1, SIGP_SET_PREFIX, 0x0, NULL);
+ smp_sigp(1, SIGP_SET_PREFIX, 0x0, NULL);
}
tmp = uvcb_cgc.guest_sca;
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [kvm-unit-tests PATCH v2 8/9] s390x: uv-host: Properly handle config creation errors
2023-03-24 12:17 [kvm-unit-tests PATCH v2 0/9] s390x: uv-host: Fixups and extensions part 1 Janosch Frank
` (6 preceding siblings ...)
2023-03-24 12:17 ` [kvm-unit-tests PATCH v2 7/9] s390x: uv-host: Switch to smp_sigp Janosch Frank
@ 2023-03-24 12:17 ` Janosch Frank
2023-03-24 12:42 ` Nico Boehr
2023-03-24 12:17 ` [kvm-unit-tests PATCH v2 9/9] s390x: uv-host: Fence access checks when UV debug is enabled Janosch Frank
8 siblings, 1 reply; 14+ messages in thread
From: Janosch Frank @ 2023-03-24 12:17 UTC (permalink / raw)
To: kvm; +Cc: thuth, imbrenda, nrb
If the first bit is set on a error rc, the hypervisor will need to
destroy the config before trying again. Let's properly handle those
cases so we're not usign stale data.
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
---
lib/s390x/asm/uv.h | 1 +
s390x/uv-host.c | 66 +++++++++++++++++++++++++++++++++++++++-------
2 files changed, 58 insertions(+), 9 deletions(-)
diff --git a/lib/s390x/asm/uv.h b/lib/s390x/asm/uv.h
index 38920461..e9fb19af 100644
--- a/lib/s390x/asm/uv.h
+++ b/lib/s390x/asm/uv.h
@@ -24,6 +24,7 @@
#define UVC_RC_NO_RESUME 0x0007
#define UVC_RC_INV_GHANDLE 0x0020
#define UVC_RC_INV_CHANDLE 0x0021
+#define UVC_RC_DSTR_NEEDED_FLG 0x8000
#define UVC_CMD_QUI 0x0001
#define UVC_CMD_INIT_UV 0x000f
diff --git a/s390x/uv-host.c b/s390x/uv-host.c
index 8d1d441f..5ad1a116 100644
--- a/s390x/uv-host.c
+++ b/s390x/uv-host.c
@@ -370,6 +370,42 @@ static void test_cpu_create(void)
report_prefix_pop();
}
+/*
+ * If the first bit of the rc is set we need to destroy the
+ * configuration before testing other create config errors.
+ */
+static void cgc_destroy_if_needed(struct uv_cb_cgc *uvcb)
+{
+ uint16_t rc, rrc;
+
+ if (uvcb->header.rc != UVC_RC_EXECUTED &&
+ !(uvcb->header.rc & UVC_RC_DSTR_NEEDED_FLG))
+ return;
+
+ assert(uvcb->guest_handle);
+ assert(!uv_cmd_nodata(uvcb->guest_handle, UVC_CMD_DESTROY_SEC_CONF,
+ &rc, &rrc));
+
+ /* We need to zero it for the next test */
+ uvcb->guest_handle = 0;
+}
+
+static bool cgc_check_data(struct uv_cb_cgc *uvcb, uint16_t rc_expected)
+{
+ /* This function purely checks for error rcs */
+ if (uvcb->header.rc == UVC_RC_EXECUTED)
+ return false;
+
+ /*
+ * We should only receive a handle when the rc is 1 or the
+ * first bit is set.
+ */
+ if (!(uvcb->header.rc & UVC_RC_DSTR_NEEDED_FLG) && uvcb->guest_handle)
+ report_abort("Received a handle when we didn't expect one");
+
+ return (uvcb->header.rc & ~UVC_RC_DSTR_NEEDED_FLG) == rc_expected;
+}
+
static void test_config_create(void)
{
int rc;
@@ -394,44 +430,51 @@ static void test_config_create(void)
rc = uv_call(0, (uint64_t)&uvcb_cgc);
report(uvcb_cgc.header.rc == UVC_RC_INV_LEN && rc == 1 &&
!uvcb_cgc.guest_handle, "hdr invalid length");
+ cgc_destroy_if_needed(&uvcb_cgc);
uvcb_cgc.header.len += 8;
uvcb_cgc.guest_stor_origin = uvcb_qui.max_guest_stor_addr + (1UL << 20) * 2 + 1;
rc = uv_call(0, (uint64_t)&uvcb_cgc);
- report(uvcb_cgc.header.rc == 0x101 && rc == 1,
+ report(cgc_check_data(&uvcb_cgc, 0x101) && rc == 1,
"MSO > max guest addr");
+ cgc_destroy_if_needed(&uvcb_cgc);
uvcb_cgc.guest_stor_origin = 0;
uvcb_cgc.guest_stor_origin = uvcb_qui.max_guest_stor_addr - (1UL << 20);
rc = uv_call(0, (uint64_t)&uvcb_cgc);
- report(uvcb_cgc.header.rc == 0x102 && rc == 1,
+ report(cgc_check_data(&uvcb_cgc, 0x102) && rc == 1,
"MSO + MSL > max guest addr");
+ cgc_destroy_if_needed(&uvcb_cgc);
uvcb_cgc.guest_stor_origin = 0;
uvcb_cgc.guest_asce &= ~ASCE_P;
rc = uv_call(0, (uint64_t)&uvcb_cgc);
- report(uvcb_cgc.header.rc == 0x105 && rc == 1,
+ report(cgc_check_data(&uvcb_cgc, 0x105) && rc == 1,
"ASCE private bit missing");
+ cgc_destroy_if_needed(&uvcb_cgc);
uvcb_cgc.guest_asce |= ASCE_P;
uvcb_cgc.guest_asce |= 0x20;
rc = uv_call(0, (uint64_t)&uvcb_cgc);
- report(uvcb_cgc.header.rc == 0x105 && rc == 1,
+ report(cgc_check_data(&uvcb_cgc, 0x105) && rc == 1,
"ASCE bit 58 set");
+ cgc_destroy_if_needed(&uvcb_cgc);
uvcb_cgc.guest_asce &= ~0x20;
tmp = uvcb_cgc.conf_base_stor_origin;
uvcb_cgc.conf_base_stor_origin = get_max_ram_size() + 8;
rc = uv_call(0, (uint64_t)&uvcb_cgc);
- report(uvcb_cgc.header.rc == 0x108 && rc == 1,
+ report(cgc_check_data(&uvcb_cgc, 0x108) && rc == 1,
"base storage origin > available memory");
+ cgc_destroy_if_needed(&uvcb_cgc);
uvcb_cgc.conf_base_stor_origin = tmp;
tmp = uvcb_cgc.conf_base_stor_origin;
uvcb_cgc.conf_base_stor_origin = 0x1000;
rc = uv_call(0, (uint64_t)&uvcb_cgc);
- report(uvcb_cgc.header.rc == 0x109 && rc == 1,
- "base storage origin contains lowcore");
+ report(cgc_check_data(&uvcb_cgc, 0x109) && rc == 1,
+ "base storage origin contains lowcore %x", uvcb_cgc.header.rc);
+ cgc_destroy_if_needed(&uvcb_cgc);
uvcb_cgc.conf_base_stor_origin = tmp;
/*
@@ -444,21 +487,24 @@ static void test_config_create(void)
rc = uv_call(0, (uint64_t)&uvcb_cgc);
report(uvcb_cgc.header.rc == 0x10b && rc == 1 &&
!uvcb_cgc.guest_handle, "variable storage area contains lowcore");
+ cgc_destroy_if_needed(&uvcb_cgc);
smp_sigp(1, SIGP_SET_PREFIX, 0x0, NULL);
}
tmp = uvcb_cgc.guest_sca;
uvcb_cgc.guest_sca = 0;
rc = uv_call(0, (uint64_t)&uvcb_cgc);
- report(uvcb_cgc.header.rc == 0x10c && rc == 1,
+ report(cgc_check_data(&uvcb_cgc, 0x10c) && rc == 1,
"sca == 0");
+ cgc_destroy_if_needed(&uvcb_cgc);
uvcb_cgc.guest_sca = tmp;
tmp = uvcb_cgc.guest_sca;
uvcb_cgc.guest_sca = get_max_ram_size() + PAGE_SIZE * 4;
rc = uv_call(0, (uint64_t)&uvcb_cgc);
- report(uvcb_cgc.header.rc == 0x10d && rc == 1,
+ report(cgc_check_data(&uvcb_cgc, 0x10d) && rc == 1,
"sca inaccessible");
+ cgc_destroy_if_needed(&uvcb_cgc);
uvcb_cgc.guest_sca = tmp;
rc = uv_call(0, (uint64_t)&uvcb_cgc);
@@ -477,6 +523,7 @@ static void test_config_create(void)
uvcb_cgc.guest_handle = 0;
rc = uv_call(0, (uint64_t)&uvcb_cgc);
report(uvcb_cgc.header.rc >= 0x100 && rc == 1, "reuse uvcb");
+ cgc_destroy_if_needed(&uvcb_cgc);
uvcb_cgc.guest_handle = tmp;
/* Copy over most data from uvcb_cgc, so we have the ASCE that was used. */
@@ -494,6 +541,7 @@ static void test_config_create(void)
rc = uv_call(0, (uint64_t)&uvcb);
report(uvcb.header.rc >= 0x104 && rc == 1 && !uvcb.guest_handle,
"reuse ASCE");
+ cgc_destroy_if_needed(&uvcb);
free((void *)uvcb.conf_base_stor_origin);
free((void *)uvcb.conf_var_stor_origin);
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [kvm-unit-tests PATCH v2 9/9] s390x: uv-host: Fence access checks when UV debug is enabled
2023-03-24 12:17 [kvm-unit-tests PATCH v2 0/9] s390x: uv-host: Fixups and extensions part 1 Janosch Frank
` (7 preceding siblings ...)
2023-03-24 12:17 ` [kvm-unit-tests PATCH v2 8/9] s390x: uv-host: Properly handle config creation errors Janosch Frank
@ 2023-03-24 12:17 ` Janosch Frank
8 siblings, 0 replies; 14+ messages in thread
From: Janosch Frank @ 2023-03-24 12:17 UTC (permalink / raw)
To: kvm; +Cc: thuth, imbrenda, nrb
The debug print directly accesses the UV header which will result in a
second accesses exception which will abort the test. Let's fence the
access tests instead.
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Reviewed-by: Nico Boehr <nrb@linux.ibm.com>
---
s390x/uv-host.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/s390x/uv-host.c b/s390x/uv-host.c
index 5ad1a116..bf683202 100644
--- a/s390x/uv-host.c
+++ b/s390x/uv-host.c
@@ -164,6 +164,15 @@ static void test_access(void)
report_prefix_push("access");
+ /*
+ * If debug is enabled info from the uv header is printed
+ * which would lead to a second exception and a test abort.
+ */
+ if (UVC_ERR_DEBUG) {
+ report_skip("Debug doesn't work with access tests");
+ goto out;
+ }
+
report_prefix_push("non-crossing");
protect_page(uvcb, PAGE_ENTRY_I);
for (i = 0; cmds[i].name; i++) {
@@ -196,6 +205,7 @@ static void test_access(void)
uvcb += 1;
unprotect_page(uvcb, PAGE_ENTRY_I);
+out:
free_pages(pages);
report_prefix_pop();
}
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread