Messages in this thread | | | Date | Wed, 16 Oct 2019 16:32:21 +0100 | From | Sudeep Holla <> | Subject | Re: [PATCH V2] arm64: psci: Reduce waiting time of cpu_psci_cpu_kill() |
| |
On Wed, Oct 09, 2019 at 12:45:16PM +0800, Yunfeng Ye wrote: > If psci_ops.affinity_info() fails, it will sleep 10ms, which will not > take so long in the right case. Use usleep_range() instead of msleep(), > reduce the waiting time, and give a chance to busy wait before sleep. > > Signed-off-by: Yunfeng Ye <yeyunfeng@huawei.com> > --- > V1->V2: > - use usleep_range() instead of udelay() after waiting for a while > > arch/arm64/kernel/psci.c | 17 +++++++++++++---- > 1 file changed, 13 insertions(+), 4 deletions(-) > > diff --git a/arch/arm64/kernel/psci.c b/arch/arm64/kernel/psci.c > index c9f72b2..99b3122 100644 > --- a/arch/arm64/kernel/psci.c > +++ b/arch/arm64/kernel/psci.c > @@ -82,6 +82,7 @@ static void cpu_psci_cpu_die(unsigned int cpu) > static int cpu_psci_cpu_kill(unsigned int cpu) > { > int err, i; > + unsigned long timeout; > > if (!psci_ops.affinity_info) > return 0; > @@ -91,16 +92,24 @@ static int cpu_psci_cpu_kill(unsigned int cpu) > * while it is dying. So, try again a few times. > */ > > - for (i = 0; i < 10; i++) { > + i = 0; > + timeout = jiffies + msecs_to_jiffies(100); > + do { > err = psci_ops.affinity_info(cpu_logical_map(cpu), 0); > if (err == PSCI_0_2_AFFINITY_LEVEL_OFF) { > pr_info("CPU%d killed.\n", cpu); > return 0; > } > > - msleep(10); > - pr_info("Retrying again to check for CPU kill\n");
You dropped this message, any particular reason ?
> - } > + /* busy-wait max 1ms */ > + if (i++ < 100) { > + cond_resched(); > + udelay(10); > + continue;
Why can't it be simple like loop of 100 * msleep(1) instead of loop of 10 * msleep(10). The above initial busy wait for 1 ms looks too much optimised for your setup where it takes 50-500us, what if it take just over 1 ms ?
We need more generic solution.
-- Regards, Sudeep
| |