Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branches 'sched-urgent-for-linus', 'timers-urgent-for-linus' and 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull scheduler, timer and x86 fixes from Ingo Molnar:
- A context tracking ARM build and functional fix
- A handful of ARM clocksource/clockevent driver fixes
- An AMD microcode patch level sysfs reporting fixlet

* 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
arm: Fix build error with context tracking calls

* 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
clocksource: em_sti: Set cpu_possible_mask to fix SMP broadcast
clocksource: of: Respect device tree node status
clocksource: exynos_mct: Set IRQ affinity when the CPU goes online
arm: clocksource: mvebu: Use the main timer as clock source from DT

* 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86/microcode/AMD: Fix patch level reporting for family 15h

+31 -6
+4 -4
arch/arm/kernel/entry-header.S
··· 329 329 #ifdef CONFIG_CONTEXT_TRACKING 330 330 .if \save 331 331 stmdb sp!, {r0-r3, ip, lr} 332 - bl user_exit 332 + bl context_tracking_user_exit 333 333 ldmia sp!, {r0-r3, ip, lr} 334 334 .else 335 - bl user_exit 335 + bl context_tracking_user_exit 336 336 .endif 337 337 #endif 338 338 .endm ··· 341 341 #ifdef CONFIG_CONTEXT_TRACKING 342 342 .if \save 343 343 stmdb sp!, {r0-r3, ip, lr} 344 - bl user_enter 344 + bl context_tracking_user_enter 345 345 ldmia sp!, {r0-r3, ip, lr} 346 346 .else 347 - bl user_enter 347 + bl context_tracking_user_enter 348 348 .endif 349 349 #endif 350 350 .endm
+1
arch/x86/kernel/microcode_amd.c
··· 216 216 /* need to apply patch? */ 217 217 if (rev >= mc_amd->hdr.patch_id) { 218 218 c->microcode = rev; 219 + uci->cpu_sig.rev = rev; 219 220 return 0; 220 221 } 221 222
+1
drivers/clocksource/Kconfig
··· 26 26 27 27 config ARMADA_370_XP_TIMER 28 28 bool 29 + select CLKSRC_OF 29 30 30 31 config ORION_TIMER 31 32 select CLKSRC_OF
+3
drivers/clocksource/clksrc-of.c
··· 30 30 clocksource_of_init_fn init_func; 31 31 32 32 for_each_matching_node_and_match(np, __clksrc_of_table, &match) { 33 + if (!of_device_is_available(np)) 34 + continue; 35 + 33 36 init_func = match->data; 34 37 init_func(np); 35 38 }
+1 -1
drivers/clocksource/em_sti.c
··· 301 301 ced->name = dev_name(&p->pdev->dev); 302 302 ced->features = CLOCK_EVT_FEAT_ONESHOT; 303 303 ced->rating = 200; 304 - ced->cpumask = cpumask_of(0); 304 + ced->cpumask = cpu_possible_mask; 305 305 ced->set_next_event = em_sti_clock_event_next; 306 306 ced->set_mode = em_sti_clock_event_mode; 307 307
+9 -1
drivers/clocksource/exynos_mct.c
··· 428 428 evt->irq); 429 429 return -EIO; 430 430 } 431 - irq_set_affinity(evt->irq, cpumask_of(cpu)); 432 431 } else { 433 432 enable_percpu_irq(mct_irqs[MCT_L0_IRQ], 0); 434 433 } ··· 448 449 unsigned long action, void *hcpu) 449 450 { 450 451 struct mct_clock_event_device *mevt; 452 + unsigned int cpu; 451 453 452 454 /* 453 455 * Grab cpu pointer in each case to avoid spurious ··· 458 458 case CPU_STARTING: 459 459 mevt = this_cpu_ptr(&percpu_mct_tick); 460 460 exynos4_local_timer_setup(&mevt->evt); 461 + break; 462 + case CPU_ONLINE: 463 + cpu = (unsigned long)hcpu; 464 + if (mct_int_type == MCT_INT_SPI) 465 + irq_set_affinity(mct_irqs[MCT_L0_IRQ + cpu], 466 + cpumask_of(cpu)); 461 467 break; 462 468 case CPU_DYING: 463 469 mevt = this_cpu_ptr(&percpu_mct_tick); ··· 506 500 &percpu_mct_tick); 507 501 WARN(err, "MCT: can't request IRQ %d (%d)\n", 508 502 mct_irqs[MCT_L0_IRQ], err); 503 + } else { 504 + irq_set_affinity(mct_irqs[MCT_L0_IRQ], cpumask_of(0)); 509 505 } 510 506 511 507 err = register_cpu_notifier(&exynos4_mct_cpu_nb);
+12
kernel/context_tracking.c
··· 51 51 unsigned long flags; 52 52 53 53 /* 54 + * Repeat the user_enter() check here because some archs may be calling 55 + * this from asm and if no CPU needs context tracking, they shouldn't 56 + * go further. Repeat the check here until they support the static key 57 + * check. 58 + */ 59 + if (!static_key_false(&context_tracking_enabled)) 60 + return; 61 + 62 + /* 54 63 * Some contexts may involve an exception occuring in an irq, 55 64 * leading to that nesting: 56 65 * rcu_irq_enter() rcu_user_exit() rcu_user_exit() rcu_irq_exit() ··· 159 150 void context_tracking_user_exit(void) 160 151 { 161 152 unsigned long flags; 153 + 154 + if (!static_key_false(&context_tracking_enabled)) 155 + return; 162 156 163 157 if (in_interrupt()) 164 158 return;