forked from mirrors/linux
		
	clocksource: Exynos_mct: Use irq_force_affinity() in cpu bringup
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 <tglx@linutronix.de> Tested-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Cc: Kyungmin Park <kyungmin.park@samsung.com> Cc: Marek Szyprowski <m.szyprowski@samsung.com> Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> Cc: Tomasz Figa <t.figa@samsung.com>, Cc: Daniel Lezcano <daniel.lezcano@linaro.org>, Cc: Kukjin Kim <kgene.kim@samsung.com> Cc: linux-arm-kernel@lists.infradead.org, Cc: stable@vger.kernel.org Link: http://lkml.kernel.org/r/20140416143316.106665251@linutronix.de Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
		
							parent
							
								
									ffde1de640
								
							
						
					
					
						commit
						30ccf03b4a
					
				
					 1 changed files with 1 additions and 7 deletions
				
			
		|  | @ -430,6 +430,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); | ||||
| 	} | ||||
|  | @ -450,7 +451,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 | ||||
|  | @ -461,12 +461,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); | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Thomas Gleixner
						Thomas Gleixner