On Tue, 9 Feb 2021 09:15:54 -0500 Janosch Frank <frankja@xxxxxxxxxxxxx> wrote: > KVM and QEMU handle a SIGP stop and store status in two steps: > 1) Stop the CPU by injecting a stop request > 2) Store when the CPU has left SIE because of the stop request > > The problem is that the SIGP order is already considered completed by > KVM/QEMU when step 1 has been performed and not once both have > completed. In addition we currently don't implement the busy CC so a > kernel has no way of knowing that the store has finished other than > checking the location for the store. > > This workaround is based on the fact that for a new SIE entry (via the > added smp restart) a stop with the store status has to be finished > first. > > Correct handling of this in KVM/QEMU will need some thought and time. do I understand correctly that you are here "fixing" the test by not triggering the KVM bug? Shouldn't we try to trigger as many bugs as possible instead? > Signed-off-by: Janosch Frank <frankja@xxxxxxxxxxxxx> > --- > s390x/smp.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/s390x/smp.c b/s390x/smp.c > index b0ece491..32f284a2 100644 > --- a/s390x/smp.c > +++ b/s390x/smp.c > @@ -102,12 +102,15 @@ static void test_stop_store_status(void) > lc->grs_sa[15] = 0; > smp_cpu_stop_store_status(1); > mb(); > + report(smp_cpu_stopped(1), "cpu stopped"); > + /* For the cpu to be started it should have finished storing > */ > + smp_cpu_restart(1); > report(lc->prefix_sa == (uint32_t)(uintptr_t)cpu->lowcore, > "prefix"); report(lc->grs_sa[15], "stack"); > - report(smp_cpu_stopped(1), "cpu stopped"); > report_prefix_pop(); > > report_prefix_push("stopped"); > + smp_cpu_stop(1); > lc->prefix_sa = 0; > lc->grs_sa[15] = 0; > smp_cpu_stop_store_status(1);