[3.13.y.z extended stable] Patch "clocksource: Exynos_mct: Use irq_force_affinity() in cpu bringup" has been added to staging queue
From: Kamal Mostafa <hidden>
Date: 2014-06-10 18:46:32
Subsystem:
clocksource, clockevent drivers, the rest · Maintainers:
Daniel Lezcano, Thomas Gleixner, Linus Torvalds
This is a note to let you know that I have just added a patch titled
clocksource: Exynos_mct: Use irq_force_affinity() in cpu bringup
to the linux-3.13.y-queue branch of the 3.13.y.z extended stable tree
which can be found at:
http://kernel.ubuntu.com/git?p=ubuntu/linux.git;a=shortlog;h=refs/heads/linux-3.13.y-queue
This patch is scheduled to be released in version 3.13.11.3.
If you, or anyone else, feels it should not be added to this tree, please
reply to this email.
For more information about the 3.13.y.z tree, see
https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable
Thanks.
-Kamal
------
From 8200288dee2d51a13de2f864e4c3a594c0324955 Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <redacted> Date: Wed, 16 Apr 2014 14:36:45 +0000 Subject: clocksource: Exynos_mct: Use irq_force_affinity() in cpu bringup commit 30ccf03b4a6a2102a2219058bdc6d779dc637dd7 upstream. The starting cpu is not yet in the online mask so irq_set_affinity() fails which results in per cpu timers for this cpu ending up on some other online cpu, ususally cpu 0. Use irq_force_affinity() which disables the online mask check and makes things work. Signed-off-by: Thomas Gleixner <redacted> Tested-by: Krzysztof Kozlowski <redacted> Cc: Kyungmin Park <kyungmin.park@samsung.com> Cc: Marek Szyprowski <m.szyprowski@samsung.com> Cc: Bartlomiej Zolnierkiewicz <redacted> Cc: Tomasz Figa <redacted>, Cc: Daniel Lezcano <redacted>, Cc: Kukjin Kim <redacted> Cc: linux-arm-kernel at lists.infradead.org, Link: http://lkml.kernel.org/r/20140416143316.106665251 at linutronix.de Signed-off-by: Thomas Gleixner <redacted> Signed-off-by: Kamal Mostafa <redacted> --- drivers/clocksource/exynos_mct.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index 62b0de6..b17b3e0 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c@@ -428,6 +428,7 @@ static int exynos4_local_timer_setup(struct clock_event_device *evt) evt->irq); return -EIO; } + irq_force_affinity(mct_irqs[MCT_L0_IRQ + cpu], cpumask_of(cpu)); } else { enable_percpu_irq(mct_irqs[MCT_L0_IRQ], 0); }
@@ -448,7 +449,6 @@ static int exynos4_mct_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu) { struct mct_clock_event_device *mevt; - unsigned int cpu; /* * Grab cpu pointer in each case to avoid spurious
@@ -459,12 +459,6 @@ static int exynos4_mct_cpu_notify(struct notifier_block *self, mevt = this_cpu_ptr(&percpu_mct_tick); exynos4_local_timer_setup(&mevt->evt); break; - case CPU_ONLINE: - cpu = (unsigned long)hcpu; - if (mct_int_type == MCT_INT_SPI) - irq_set_affinity(mct_irqs[MCT_L0_IRQ + cpu], - cpumask_of(cpu)); - break; case CPU_DYING: mevt = this_cpu_ptr(&percpu_mct_tick); exynos4_local_timer_stop(&mevt->evt); --
1.9.1