On Thu, 3 Mar 2022 22:04:20 +0100 Eric Farman <farman@xxxxxxxxxxxxx> 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@xxxxxxxxxxxxx> > Reviewed-by: Janosch Frank <frankja@xxxxxxxxxxxxx> Reviewed-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx> > --- > 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)); }