[PATCH V2 5/8] hrtimer: don't migrate pinned timers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



migrate_hrtimer() is called when a CPU goes down and its timers are required to
be migrated to some other CPU. Its the responsibility of the users of the
hrtimer to remove it before control reaches to migrate_hrtimer().

As these were the pinned hrtimers, the best we can do is: don't migrate these
and report to the user as well.

That's all this patch does.

Signed-off-by: Viresh Kumar <viresh.kumar@xxxxxxxxxx>
---
 kernel/hrtimer.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
index c5a4bf4..853dd8c 100644
--- a/kernel/hrtimer.c
+++ b/kernel/hrtimer.c
@@ -1640,6 +1640,7 @@ static void migrate_hrtimer_list(struct hrtimer_clock_base *old_base,
 {
 	struct hrtimer *timer;
 	struct timerqueue_node *node;
+	int is_pinned;
 
 	while ((node = timerqueue_getnext(&old_base->active))) {
 		timer = container_of(node, struct hrtimer, node);
@@ -1652,6 +1653,15 @@ static void migrate_hrtimer_list(struct hrtimer_clock_base *old_base,
 		 * under us on another CPU
 		 */
 		__remove_hrtimer(timer, HRTIMER_STATE_MIGRATE, 0);
+
+		is_pinned = timer->state & HRTIMER_STATE_PINNED;
+
+		/* Check if CPU still has pinned timers */
+		if (unlikely(WARN(is_pinned,
+				  "%s: can't migrate pinned timer: %p, deactivating it\n",
+				  __func__, timer)))
+			continue;
+
 		timer->base = new_base;
 		/*
 		 * Enqueue the timers on the new cpu. This does not
-- 
1.7.12.rc2.18.g61b472e

--
To unsubscribe from this list: send the line "unsubscribe cgroups" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]     [Monitors]

  Powered by Linux