* [kvm-unit-tests PATCH v2 0/9] s390x: uv-host: Fixups and extensions part 1
@ 2023-03-24 12:17 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
` (8 more replies)
0 siblings, 9 replies; 14+ messages in thread
From: Janosch Frank @ 2023-03-24 12:17 UTC (permalink / raw)
To: kvm; +Cc: thuth, imbrenda, nrb
The uv-host test has a lot of historical growth problems which have
largely been overlooked since running it is harder than running a KVM
(guest 2) based test.
This series fixes up smaler problems but still leaves the test with
fails when running create config base and variable storage
tests. Those problems will either be fixed up with the second series
or with a firmware fix since I'm unsure on which side of the os/fw
fence the problem exists.
The series is based on my other series that introduces pv-ipl and
pv-icpt. The memory allocation fix will be added to the new version of
that series so all G1 tests are fixed.
v2:
- Added patch that exchanges sigp_retry with the smp variant
- Re-worked the create config test handling
- Minor fixups
Janosch Frank (9):
s390x: uv-host: Fix UV init test memory allocation
s390x: uv-host: Check for sufficient amount of memory
s390x: Add PV tests to unittests.cfg
s390x: uv-host: Beautify code
s390x: uv-host: Add cpu number check
s390x: uv-host: Fix create guest variable storage prefix check
s390x: uv-host: Switch to smp_sigp
s390x: uv-host: Properly handle config creation errors
s390x: uv-host: Fence access checks when UV debug is enabled
lib/s390x/asm/uv.h | 1 +
s390x/unittests.cfg | 17 ++++++
s390x/uv-host.c | 140 +++++++++++++++++++++++++++++++++++---------
3 files changed, 129 insertions(+), 29 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 14+ messages in thread
* [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
* Re: [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 1/9] s390x: uv-host: Fix UV init test memory allocation Janosch Frank
@ 2023-03-24 12:39 ` Nico Boehr
0 siblings, 0 replies; 14+ messages in thread
From: Nico Boehr @ 2023-03-24 12:39 UTC (permalink / raw)
To: Janosch Frank, kvm; +Cc: thuth, imbrenda
Quoting Janosch Frank (2023-03-24 13:17:16)
> 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>
Reviewed-by: Nico Boehr <nrb@linux.ibm.com>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [kvm-unit-tests PATCH v2 3/9] s390x: Add PV tests to unittests.cfg
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:40 ` Nico Boehr
0 siblings, 0 replies; 14+ messages in thread
From: Nico Boehr @ 2023-03-24 12:40 UTC (permalink / raw)
To: Janosch Frank, kvm; +Cc: thuth, imbrenda
Quoting Janosch Frank (2023-03-24 13:17:18)
> 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>
Reviewed-by: Nico Boehr <nrb@linux.ibm.com>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [kvm-unit-tests PATCH v2 7/9] s390x: uv-host: Switch to smp_sigp
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:40 ` Nico Boehr
0 siblings, 0 replies; 14+ messages in thread
From: Nico Boehr @ 2023-03-24 12:40 UTC (permalink / raw)
To: Janosch Frank, kvm; +Cc: thuth, imbrenda
Quoting Janosch Frank (2023-03-24 13:17:22)
> Let's move to the new smp_sigp() interface which abstracts cpu
> numbers.
>
> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Reviewed-by: Nico Boehr <nrb@linux.ibm.com>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [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 8/9] s390x: uv-host: Properly handle config creation errors Janosch Frank
@ 2023-03-24 12:42 ` Nico Boehr
0 siblings, 0 replies; 14+ messages in thread
From: Nico Boehr @ 2023-03-24 12:42 UTC (permalink / raw)
To: Janosch Frank, kvm; +Cc: thuth, imbrenda
Quoting Janosch Frank (2023-03-24 13:17:23)
> 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>
Reviewed-by: Nico Boehr <nrb@linux.ibm.com>
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2023-03-24 12:42 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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: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
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:40 ` Nico Boehr
2023-03-24 12:17 ` [kvm-unit-tests PATCH v2 4/9] s390x: uv-host: Beautify code Janosch Frank
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 ` [kvm-unit-tests PATCH v2 6/9] s390x: uv-host: Fix create guest variable storage prefix check Janosch Frank
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: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: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
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox