Message ID | 20221208170502.17984-1-thuth@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [kvm-unit-tests,v2] s390x: sie: Test whether the epoch extension field is working as expected | expand |
On Thu, 8 Dec 2022 18:05:02 +0100 Thomas Huth <thuth@redhat.com> wrote: > We recently discovered a bug with the time management in nested scenarios > which got fixed by kernel commit "KVM: s390: vsie: Fix the initialization > of the epoch extension (epdx) field". This adds a simple test for this > bug so that it is easier to determine whether the host kernel of a machine > has already been fixed or not. > > Signed-off-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com> > --- > v2: Remove the spurious "2" from the diag 44 opcode > > s390x/sie.c | 28 ++++++++++++++++++++++++++++ > 1 file changed, 28 insertions(+) > > diff --git a/s390x/sie.c b/s390x/sie.c > index 87575b29..cd3cea10 100644 > --- a/s390x/sie.c > +++ b/s390x/sie.c > @@ -58,6 +58,33 @@ static void test_diags(void) > } > } > > +static void test_epoch_ext(void) > +{ > + u32 instr[] = { > + 0xb2780000, /* STCKE 0 */ > + 0x83000044 /* DIAG 0x44 to intercept */ > + }; > + > + if (!test_facility(139)) { > + report_skip("epdx: Multiple Epoch Facility is not available"); > + return; > + } > + > + guest[0] = 0x00; > + memcpy(guest_instr, instr, sizeof(instr)); > + > + vm.sblk->gpsw.addr = PAGE_SIZE * 2; > + vm.sblk->gpsw.mask = PSW_MASK_64; > + > + vm.sblk->ecd |= ECD_MEF; > + vm.sblk->epdx = 0x47; /* Setting the epoch extension here ... */ > + > + sie(&vm); > + > + /* ... should result in the same epoch extension here: */ > + report(guest[0] == 0x47, "epdx: different epoch is visible in the guest"); > +} > + > static void setup_guest(void) > { > setup_vm(); > @@ -80,6 +107,7 @@ int main(void) > > setup_guest(); > test_diags(); > + test_epoch_ext(); > sie_guest_destroy(&vm); > > done:
Quoting Thomas Huth (2022-12-08 18:05:02) > We recently discovered a bug with the time management in nested scenarios > which got fixed by kernel commit "KVM: s390: vsie: Fix the initialization > of the epoch extension (epdx) field". This adds a simple test for this > bug so that it is easier to determine whether the host kernel of a machine > has already been fixed or not. > > Signed-off-by: Thomas Huth <thuth@redhat.com> Thanks, I have pushed this to our CI and will queue it as soon as it's stable there.
diff --git a/s390x/sie.c b/s390x/sie.c index 87575b29..cd3cea10 100644 --- a/s390x/sie.c +++ b/s390x/sie.c @@ -58,6 +58,33 @@ static void test_diags(void) } } +static void test_epoch_ext(void) +{ + u32 instr[] = { + 0xb2780000, /* STCKE 0 */ + 0x83000044 /* DIAG 0x44 to intercept */ + }; + + if (!test_facility(139)) { + report_skip("epdx: Multiple Epoch Facility is not available"); + return; + } + + guest[0] = 0x00; + memcpy(guest_instr, instr, sizeof(instr)); + + vm.sblk->gpsw.addr = PAGE_SIZE * 2; + vm.sblk->gpsw.mask = PSW_MASK_64; + + vm.sblk->ecd |= ECD_MEF; + vm.sblk->epdx = 0x47; /* Setting the epoch extension here ... */ + + sie(&vm); + + /* ... should result in the same epoch extension here: */ + report(guest[0] == 0x47, "epdx: different epoch is visible in the guest"); +} + static void setup_guest(void) { setup_vm(); @@ -80,6 +107,7 @@ int main(void) setup_guest(); test_diags(); + test_epoch_ext(); sie_guest_destroy(&vm); done:
We recently discovered a bug with the time management in nested scenarios which got fixed by kernel commit "KVM: s390: vsie: Fix the initialization of the epoch extension (epdx) field". This adds a simple test for this bug so that it is easier to determine whether the host kernel of a machine has already been fixed or not. Signed-off-by: Thomas Huth <thuth@redhat.com> --- v2: Remove the spurious "2" from the diag 44 opcode s390x/sie.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)