Message ID | 20220311173822.1234617-2-farman@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | s390x SIGP fixes | expand |
On 11/03/2022 18.38, Eric Farman wrote: > The routine smp_cpu_stopped() issues a SIGP SENSE, and returns true > if it received a CC1 (STATUS STORED) with the STOPPED or CHECK STOP > bits enabled. Otherwise, it returns false. > > This is misleading, because a CC2 (BUSY) merely indicates that the > order code could not be processed, not that the CPU is operating. > It could be operating but in the process of being stopped. > > Convert the invocation of the SIGP SENSE to retry when a CC2 is > received, so we get a more definitive answer. > > Signed-off-by: Eric Farman <farman@linux.ibm.com> > Reviewed-by: Janosch Frank <frankja@linux.ibm.com> > Reviewed-by: Nico Boehr <nrb@linux.ibm.com> > Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com> > --- > lib/s390x/smp.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/lib/s390x/smp.c b/lib/s390x/smp.c > index 46e1b022..368d6add 100644 > --- a/lib/s390x/smp.c > +++ b/lib/s390x/smp.c > @@ -78,7 +78,7 @@ bool smp_cpu_stopped(uint16_t idx) > { > uint32_t status; > > - if (smp_sigp(idx, SIGP_SENSE, 0, &status) != SIGP_CC_STATUS_STORED) > + if (smp_sigp_retry(idx, SIGP_SENSE, 0, &status) != SIGP_CC_STATUS_STORED) > return false; > return !!(status & (SIGP_STATUS_CHECK_STOP|SIGP_STATUS_STOPPED)); > } Reviewed-by: Thomas Huth <thuth@redhat.com>
diff --git a/lib/s390x/smp.c b/lib/s390x/smp.c index 46e1b022..368d6add 100644 --- a/lib/s390x/smp.c +++ b/lib/s390x/smp.c @@ -78,7 +78,7 @@ bool smp_cpu_stopped(uint16_t idx) { uint32_t status; - if (smp_sigp(idx, SIGP_SENSE, 0, &status) != SIGP_CC_STATUS_STORED) + if (smp_sigp_retry(idx, SIGP_SENSE, 0, &status) != SIGP_CC_STATUS_STORED) return false; return !!(status & (SIGP_STATUS_CHECK_STOP|SIGP_STATUS_STOPPED)); }