Message ID | 20191122140002.42972-2-frankja@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | s390x: Reset cleanup | expand |
On Fri, 22 Nov 2019 08:59:58 -0500 Janosch Frank <frankja@linux.ibm.com> wrote: > The initiating cpu needs to be reset with an initial reset. While > doing a normal reset followed by a initial reset is not wron per-se, s/wron per-se/wrong per se/ > the Ultravisor will only allow the correct reset to be performed. So... the uv has stricter rules than the architecture has in that respect? > > Signed-off-by: Janosch Frank <frankja@linux.ibm.com> > Reviewed-by: David Hildenbrand <david@redhat.com> > --- > hw/s390x/s390-virtio-ccw.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c > index d3edeef0ad..c1d1440272 100644 > --- a/hw/s390x/s390-virtio-ccw.c > +++ b/hw/s390x/s390-virtio-ccw.c > @@ -348,6 +348,9 @@ static void s390_machine_reset(MachineState *machine) > break; > case S390_RESET_LOAD_NORMAL: > CPU_FOREACH(t) { > + if (t == cs) { > + continue; > + } > run_on_cpu(t, s390_do_cpu_reset, RUN_ON_CPU_NULL); > } > subsystem_reset();
On 11/22/19 5:17 PM, Cornelia Huck wrote: > On Fri, 22 Nov 2019 08:59:58 -0500 > Janosch Frank <frankja@linux.ibm.com> wrote: > >> The initiating cpu needs to be reset with an initial reset. While >> doing a normal reset followed by a initial reset is not wron per-se, > > s/wron per-se/wrong per se/ Ups > >> the Ultravisor will only allow the correct reset to be performed. > > So... the uv has stricter rules than the architecture has in that > respect? Yeah, the architecture only cares about the state that the cpu will be in after the reset. So we can do as many changes to vcpu run as we like, if at the end we are in the reset state we intended to be in. The UV guards all resets including the sigp initiated ones. > >> >> Signed-off-by: Janosch Frank <frankja@linux.ibm.com> >> Reviewed-by: David Hildenbrand <david@redhat.com> >> --- >> hw/s390x/s390-virtio-ccw.c | 3 +++ >> 1 file changed, 3 insertions(+) >> >> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c >> index d3edeef0ad..c1d1440272 100644 >> --- a/hw/s390x/s390-virtio-ccw.c >> +++ b/hw/s390x/s390-virtio-ccw.c >> @@ -348,6 +348,9 @@ static void s390_machine_reset(MachineState *machine) >> break; >> case S390_RESET_LOAD_NORMAL: >> CPU_FOREACH(t) { >> + if (t == cs) { >> + continue; >> + } >> run_on_cpu(t, s390_do_cpu_reset, RUN_ON_CPU_NULL); >> } >> subsystem_reset(); >
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index d3edeef0ad..c1d1440272 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -348,6 +348,9 @@ static void s390_machine_reset(MachineState *machine) break; case S390_RESET_LOAD_NORMAL: CPU_FOREACH(t) { + if (t == cs) { + continue; + } run_on_cpu(t, s390_do_cpu_reset, RUN_ON_CPU_NULL); } subsystem_reset();