diff options
author | Janosch Frank <frankja@linux.ibm.com> | 2020-04-24 05:33:56 -0400 |
---|---|---|
committer | David Hildenbrand <david@redhat.com> | 2020-04-24 11:55:57 +0200 |
commit | dedae8c54f8ac6cb3eb9fef4159d2ac82f641114 (patch) | |
tree | a8025facf6471d654f24028f8e3eac96bd76e8d5 | |
parent | 55ddfbb065b428f737dc549918cb822f6d866b21 (diff) | |
download | kvm-unit-tests-dedae8c54f8ac6cb3eb9fef4159d2ac82f641114.tar.gz |
s390x: smp: Test all CRs on initial reset
All CRs are set to 0 and CRs 0 and 14 are set to pre-defined values,
so we also need to test 1-13 and 15 for 0.
And while we're at it, let's also set some values to cr 1, 7 and 13, so
we can actually be sure that they will be zeroed.
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Message-Id: <20200424093356.11931-1-frankja@linux.ibm.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
-rw-r--r-- | s390x/smp.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/s390x/smp.c b/s390x/smp.c index 1641979..08fa770 100644 --- a/s390x/smp.c +++ b/s390x/smp.c @@ -195,16 +195,28 @@ static void test_sense_running(void) report_prefix_pop(); } +/* Used to dirty registers of cpu #1 before it is reset */ +static void test_func_initial(void) +{ + lctlg(1, 0x42000UL); + lctlg(7, 0x43000UL); + lctlg(13, 0x44000UL); + set_flag(1); +} + static void test_reset_initial(void) { struct cpu_status *status = alloc_pages(0); struct psw psw; + int i; psw.mask = extract_psw_mask(); - psw.addr = (unsigned long)test_func; + psw.addr = (unsigned long)test_func_initial; report_prefix_push("reset initial"); + set_flag(0); smp_cpu_start(1, psw); + wait_for_flag(); sigp_retry(1, SIGP_INITIAL_CPU_RESET, 0, NULL); sigp(1, SIGP_STORE_STATUS_AT_ADDRESS, (uintptr_t)status, NULL); @@ -215,6 +227,10 @@ static void test_reset_initial(void) report(!status->fpc, "fpc"); report(!status->cputm, "cpu timer"); report(!status->todpr, "todpr"); + for (i = 1; i <= 13; i++) { + report(status->crs[i] == 0, "cr%d == 0", i); + } + report(status->crs[15] == 0, "cr15 == 0"); report_prefix_pop(); report_prefix_push("initialized"); |