hmp: Use idle pull to perform forced up-migrations
authorChris Redpath <chris.redpath@arm.com>
Mon, 24 Mar 2014 13:47:29 +0000 (13:47 +0000)
committerRobin Murphy <robin.murphy@arm.com>
Wed, 20 Aug 2014 14:04:07 +0000 (15:04 +0100)
commitbefb0c2d040d2cd4f88ad8a54075c1f59bef938a
treed841a937243f07ff4b68d059927db68983ff623d
parent989db3b5bac46463115f4a47b0c6dcb83bbb659a
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>
[ Rebased on top of 1.1-Juno-rc0 ]
[ Add missing this_cpu in run_rebalance_domains() ]
Signed-off-by: Patrick Bellasi <patrick.bellasi@arm.com>
Signed-off-by: Juri Lelli <juri.lelli@arm.com>
kernel/sched/core.c
kernel/sched/fair.c
kernel/sched/sched.h