linux-uconsole/arch/arm/kernel
黄涛 dbc0fca461 sched: Cleanup cpu_active madness
commit 5fbd036b55 upstream.

Stepan found:

CPU0		CPUn

_cpu_up()
  __cpu_up()

		boostrap()
		  notify_cpu_starting()
		  set_cpu_online()
		  while (!cpu_active())
		    cpu_relax()

<PREEMPT-out>

smp_call_function(.wait=1)
  /* we find cpu_online() is true */
  arch_send_call_function_ipi_mask()

  /* wait-forever-more */

<PREEMPT-in>
		  local_irq_enable()

  cpu_notify(CPU_ONLINE)
    sched_cpu_active()
      set_cpu_active()

Now the purpose of cpu_active is mostly with bringing down a cpu, where
we mark it !active to avoid the load-balancer from moving tasks to it
while we tear down the cpu. This is required because we only update the
sched_domain tree after we brought the cpu-down. And this is needed so
that some tasks can still run while we bring it down, we just don't want
new tasks to appear.

On cpu-up however the sched_domain tree doesn't yet include the new cpu,
so its invisible to the load-balancer, regardless of the active state.
So instead of setting the active state after we boot the new cpu (and
consequently having to wait for it before enabling interrupts) set the
cpu active before we set it online and avoid the whole mess.
2012-07-12 09:49:51 +08:00
..
.gitignore
armksyms.c Merge branch 'p2v' into devel 2011-03-16 23:35:27 +00:00
arthur.c
asm-offsets.c Revert "ARM: vfp: fix a hole in VFP thread migration" 2011-09-16 18:50:07 -07:00
atags.c
atags.h
bios32.c arm: bios32: Remove non exisiting machine code 2011-03-29 14:47:50 +02:00
calls.S Revert "Merge commit 'v2.6.32.9' into android-2.6.32" 2011-07-30 22:24:29 +08:00
compat.c
compat.h
crash_dump.c crash_dump: export is_kdump_kernel to modules, consolidate elfcorehdr_addr, setup_elfcorehdr and saved_max_pfn 2011-03-23 19:47:19 -07:00
crunch-bits.S
crunch.c
debug.S revert android-tegra-2.6.36-honeycomb-mr1-9001adc to v2.6.36 2011-10-28 16:02:47 +08:00
devtree.c ARM: 6953/1: DT: don't try to access physical address zero 2011-06-09 10:15:06 +01:00
dma-isa.c
dma.c rm rk2818 dma change 2011-11-07 19:06:20 +08:00
early_printk.c
ecard.c arm: Fold irq_set_chip/irq_set_handler 2011-03-29 14:47:58 +02:00
ecard.h
elf.c ARM: 6878/1: fix personality flag propagation across an exec 2011-04-14 09:15:24 +01:00
entry-armv.S revert android-tegra-2.6.36-honeycomb-mr1-9001adc to v2.6.36 2011-10-28 16:02:47 +08:00
entry-common.S Merge remote-tracking branch 'remotes/aosp/android-3.0' into develop-3.0 2011-10-28 16:07:07 +08:00
entry-header.S ARM: v6k: select clear exclusive code seqences according to V6 variants 2011-02-02 21:23:28 +00:00
etm.c ARM: etm: Power down etm(s) when tracing is not enabled 2011-06-14 09:10:00 -07:00
fiq.c ARM: 6938/1: fiq: Refactor {get,set}_fiq_regs() for Thumb-2 2011-05-26 10:31:06 +01:00
fiqasm.S ARM: 6938/1: fiq: Refactor {get,set}_fiq_regs() for Thumb-2 2011-05-26 10:31:06 +01:00
ftrace.c ARM: ftrace: graph tracer + dynamic ftrace 2010-11-19 21:43:27 +05:30
head-common.S arm/dt: Make __vet_atags also accept a dtb image 2011-05-11 15:12:32 +02:00
head-nommu.S ARM: Defer lookup of machine_type to setup.c 2011-02-15 16:36:44 +00:00
head.S ARM: 7150/1: Allow kernel unaligned accesses on ARMv6+ processors 2012-05-29 10:06:02 +08:00
hw_breakpoint.c ARM: 6864/1: hw_breakpoint: clear DBGVCR out of reset 2011-04-10 21:13:35 +01:00
init_task.c
io.c
irq.c arm: Use generic show_interrupts() 2011-03-29 14:47:57 +02:00
isa.c
iwmmxt.S ARM: pxa: add iwmmx support for PJ4 2010-12-20 23:07:36 +08:00
kgdb.c revert android-tegra-2.6.36-honeycomb-mr1-9001adc to v2.6.36 2011-10-28 16:02:47 +08:00
kprobes-decode.c Revert "Merge remote branch 'linux-2.6.32.y/master' into develop" 2011-07-30 16:24:52 +08:00
kprobes.c ARM: kprobes: Fix probing of conditionally executed instructions 2011-04-28 23:40:54 -04:00
leds.c ARM: Move leds idle start/stop calls to idle notifiers 2011-07-15 15:26:45 -07:00
machine_kexec.c [ARM] add machine-specific hook to machine_kexec 2011-03-03 16:26:55 -05:00
Makefile rm rk2818 dma change 2011-11-07 19:06:20 +08:00
module.c ARM: 6963/1: Thumb-2: Relax relocation requirements for non-function symbols 2011-06-17 11:25:04 +01:00
perf_event.c ARM: 6989/1: perf: do not start the PMU when no events are present 2011-07-05 12:37:23 +01:00
perf_event_v6.c ARM: 6835/1: perf: ensure overflows aren't missed due to IRQ latency 2011-03-26 10:06:09 +00:00
perf_event_v7.c ARM: 7117/1: perf: fix HW_CACHE_* events on Cortex-A9 2011-10-25 07:10:13 +02:00
perf_event_xscale.c ARM: 6835/1: perf: ensure overflows aren't missed due to IRQ latency 2011-03-26 10:06:09 +00:00
pj4-cp0.c ARM: pxa: add iwmmx support for PJ4 2010-12-20 23:07:36 +08:00
pmu.c ARM: 6742/1: pmu: avoid setting IRQ affinity on UP systems 2011-02-19 11:24:05 +00:00
process.c ARM: idle: call idle notifiers before stopping nohz tick 2011-12-19 10:12:58 +08:00
ptrace.c ARM: 7308/1: vfp: flush thread hwstate before copying ptrace registers 2012-05-29 10:09:09 +08:00
relocate_kernel.S ARM: 6497/1: kexec: Correct data alignment for CONFIG_THUMB2_KERNEL 2010-11-30 13:44:23 +00:00
return_address.c ARM: fix some sparse errors in generic ARM code 2011-02-23 17:24:12 +00:00
sched_clock.c ARM: sched_clock: make minsec argument to clocks_calc_mult_shift() zero 2011-03-11 11:37:02 +08:00
setup.c ARM: move memory layout sanity checking before meminfo initialization 2011-07-05 20:27:16 +01:00
signal.c ARM: 7306/1: vfp: flush thread hwstate before restoring context from sigframe 2012-05-29 10:08:02 +08:00
signal.h
sleep.S ARM: 6825/1: kernel/sleep.S: fix Thumb2 compilation issues 2011-03-26 10:06:08 +00:00
smp.c sched: Cleanup cpu_active madness 2012-07-12 09:49:51 +08:00
smp_scu.c ARM: 7091/1: errata: D-cache line maintenance operation by MVA may not succeed 2011-10-03 11:41:06 -07:00
smp_tlb.c ARM: SMP: split out software TLB maintainence broadcasting 2010-12-20 15:09:17 +00:00
smp_twd.c ARM: 7359/2: smp_twd: Only wait for reprogramming on active cpus 2012-04-20 19:33:01 +08:00
stacktrace.c ARM: fix /proc/$PID/stack on SMP 2011-01-15 09:27:04 +00:00
swp_emulate.c Fix common misspellings 2011-03-31 11:26:23 -03:00
sys_arm.c ARM: 7410/1: Add extra clobber registers for assembly in kernel_execve 2012-05-29 10:14:57 +08:00
sys_oabi-compat.c Revert "Merge remote-tracking branch 'linux-2.6.32.y/master' into develop" 2011-07-30 16:09:59 +08:00
tcm.c ARM: P2V: separate PHYS_OFFSET from platform definitions 2011-02-17 23:26:55 +00:00
tcm.h
thumbee.c
time.c Merge remote-tracking branch 'remotes/tegra/android-tegra-2.6.36-honeycomb-mr1' into develop-2.6.36 2011-08-01 00:04:45 +08:00
traps.c revert android-tegra-2.6.36-honeycomb-mr1-9001adc to v2.6.36 2011-10-28 16:02:47 +08:00
unwind.c ARM: 6468/1: backtrace: fix calculation of thread stack base 2010-11-07 16:12:37 +00:00
vmlinux.lds.S rk30: add sram support 2012-02-10 16:41:10 +08:00
xscale-cp0.c