hmp: Use idle pull to perform forced up-migrations
authorChris Redpath <chris.redpath@arm.com>
Fri, 9 May 2014 13:36:53 +0000 (14:36 +0100)
committerJon Medhurst <tixy@linaro.org>
Fri, 9 May 2014 16:22:39 +0000 (17:22 +0100)
commit940407d585a1a632086159d19e71bc190a1d07f9
treebb05da854b6e093e21e422915aec270763dd2d25
parent0168997c0ab20054b28e26c57dbfcf90477ceb2a
hmp: Use idle pull to perform forced up-migrations

When a normal forced up-migration takes place we stop the task to
be migrated while the target CPU becomes available. This delay can
range from 80us to 1500us on TC2 if the target CPU is in a deep idle
state.

Instead, interrupt the target CPU and ask it to pull a task.
This lets the current eligible task continue executing on the
original CPU while the target CPU wakes. Use a pinned timer to
prevent the pulling CPU going back into power-down with pending
up-migrations.

If we trigger for a nohz kick, it doesn't matter about triggering
for an idle pull since the idle_pull flag will be set when we
execute the softirq and we'll still do the idle pull.

If the target CPU is busy, we will not pull any tasks.

Signed-off-by: Chris Redpath <chris.redpath@arm.com>
Signed-off-by: Jon Medhurst <tixy@linaro.org>
kernel/sched/core.c
kernel/sched/fair.c
kernel/sched/sched.h