On Wed, 15 Nov 2023 09:38:32 +0100 Nico Boehr <nrb@xxxxxxxxxxxxx> wrote: > KVM did not properly reset the no-translate bit after reset, see > https://lore.kernel.org/kvm/20231109123624.37314-1-imbrenda@xxxxxxxxxxxxx/ > > Add a test which performs a load normal reset (includes a subsystem > reset) and verify that this clears the no-translate bit. > > Signed-off-by: Nico Boehr <nrb@xxxxxxxxxxxxx> > --- > s390x/cmm.c | 24 ++++++++++++++++++++++++ > 1 file changed, 24 insertions(+) > > diff --git a/s390x/cmm.c b/s390x/cmm.c > index af852838851e..8f10c107d81b 100644 > --- a/s390x/cmm.c > +++ b/s390x/cmm.c > @@ -9,6 +9,7 @@ > */ > > #include <libcflat.h> > +#include <bitops.h> > #include <asm/asm-offsets.h> > #include <asm/interrupt.h> > #include <asm/page.h> > @@ -16,6 +17,8 @@ > > static uint8_t pagebuf[PAGE_SIZE] __attribute__((aligned(PAGE_SIZE))); > > +extern int diag308_load_reset(u64); > + > static void test_params(void) > { > report_prefix_push("invalid ORC 8"); > @@ -35,6 +38,26 @@ static void test_priv(void) > report_prefix_pop(); > } > > +static void test_reset_no_translate(void) > +{ > + unsigned long state; > + const uint64_t mask_no_translate = BIT(63 - 58); reverse Christmas tree, please :) also, maybe it's easier to read with just a numeric constant? i.e. 0x20 with the Christmas tree fixed (with or without numeric constant): Reviewed-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx> Tested-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx> > + > + report_prefix_push("reset no-translate"); > + essa(ESSA_SET_STABLE_NODAT, (unsigned long)pagebuf); > + > + state = essa(ESSA_GET_STATE, (unsigned long)pagebuf); > + report(state & mask_no_translate, "no-translate bit set before reset"); > + > + /* Load normal reset - includes subsystem reset */ > + diag308_load_reset(1); > + > + state = essa(ESSA_GET_STATE, (unsigned long)pagebuf); > + report(!(state & mask_no_translate), "no-translate bit unset after reset"); > + > + report_prefix_pop(); > +} > + > int main(void) > { > bool has_essa = check_essa_available(); > @@ -47,6 +70,7 @@ int main(void) > > test_priv(); > test_params(); > + test_reset_no_translate(); > done: > report_prefix_pop(); > return report_summary();