linux/arch/powerpc/kernel
Paul Mackerras f39224a8c1 powerpc: Use correct sequence for putting CPU into nap mode
We weren't using the recommended sequence for putting the CPU into
nap mode.  When I changed the idle loop, for some reason 7447A cpus
started hanging when we put them into nap mode.  Changing to the
recommended sequence fixes that.

The complexity here is that the recommended sequence is a loop that
keeps putting the cpu back into nap mode.  Clearly we need some way
to break out of the loop when an interrupt (external interrupt,
decrementer, performance monitor) occurs.  Here we use a bit in
the thread_info struct to indicate that we need this, and the exception
entry code notices this and arranges for the exception to return
to the value in the link register, thus breaking out of the loop.
We use a new `local_flags' field in the thread_info which we can
alter without needing to use an atomic update sequence.

The PPC970 has the same recommended sequence, so we do the same thing
there too.

This also fixes a bug in the kernel stack overflow handling code on
32-bit, since it was causing a value that we needed in a register to
get trashed.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-04-18 21:49:11 +10:00
..
vdso32 [PATCH] Mark unwind info for signal trampolines in vDSOs 2006-03-31 12:18:52 -08:00
vdso64 [PATCH] Mark unwind info for signal trampolines in vDSOs 2006-03-31 12:18:52 -08:00
align.c [PATCH] powerpc: merge align.c 2005-11-18 14:39:23 +11:00
asm-offsets.c powerpc: Use correct sequence for putting CPU into nap mode 2006-04-18 21:49:11 +10:00
binfmt_elf32.c ppc64: merge binfmt_elf32.c 2005-10-13 13:40:54 +10:00
btext.c [PATCH] powerpc: Remove device_node addrs/n_addr 2006-01-09 14:53:55 +11:00
cpu_setup_6xx.S powerpc: Move cpu_setup_6xx.S and temp.c over to arch/powerpc 2006-03-27 19:15:26 +11:00
cpu_setup_power4.S [PATCH] powerpc: Cleanup LOADADDR etc. asm macros 2006-01-13 21:16:23 +11:00
cputable.c Merge ../linux-2.6 2006-03-09 14:32:05 +11:00
crash.c [PATCH] powerpc: Trivial fix to set the proper timeout value for kdump 2006-02-24 11:36:21 +11:00
crash_dump.c [PATCH] Don't pass boot parameters to argv_init[] 2006-03-31 12:18:53 -08:00
dma_64.c [PATCH] powerpc: IBMEBUS bus support 2006-01-09 14:49:06 +11:00
entry_32.S powerpc: Use correct sequence for putting CPU into nap mode 2006-04-18 21:49:11 +10:00
entry_64.S [PATCH] powerpc: Workaround for pSeries RTAS bug 2006-03-28 16:45:33 +11:00
firmware.c [PATCH] powerpc: Rename and export ppc64_firmware_features 2006-03-28 16:45:20 +11:00
fpu.S powerpc/64: Fix bug in setting floating-point exception mode 2006-02-07 13:55:30 +11:00
head_4xx.S powerpc: Rename asm offset TRAP to _TRAP for 32-bit 2005-10-28 22:45:25 +10:00
head_8xx.S [PATCH] powerpc: trivial: modify comments to refer to new location of files 2006-02-10 16:53:51 +11:00
head_32.S [PATCH] powerpc: fix altivec_unavailable_exception Oopses 2006-02-24 11:36:23 +11:00
head_44x.S [PATCH] powerpc: trivial: modify comments to refer to new location of files 2006-02-10 16:53:51 +11:00
head_64.S powerpc: Use correct sequence for putting CPU into nap mode 2006-04-18 21:49:11 +10:00
head_booke.h [PATCH] powerpc: Fix Kernel FP unavail exception for BookE 2006-02-10 16:51:50 +11:00
head_fsl_booke.S [PATCH] powerpc: trivial: modify comments to refer to new location of files 2006-02-10 16:53:51 +11:00
ibmebus.c [PATCH] powerpc: IBMEBUS bus support 2006-01-09 14:49:06 +11:00
idle.c [PATCH] powerpc: Ensure runlatch is off in the idle loop 2006-04-13 09:27:22 -07:00
idle_6xx.S powerpc: Use correct sequence for putting CPU into nap mode 2006-04-18 21:49:11 +10:00
idle_power4.S powerpc: Use correct sequence for putting CPU into nap mode 2006-04-18 21:49:11 +10:00
init_task.c powerpc: make process.c suitable for both 32-bit and 64-bit 2005-10-10 22:29:05 +10:00
iomap.c [PATCH] powerpc: trivial: modify comments to refer to new location of files 2006-02-10 16:53:51 +11:00
iommu.c [PATCH] powerpc: trivial: modify comments to refer to new location of files 2006-02-10 16:53:51 +11:00
irq.c powerpc: iSeries has only 256 IRQs 2006-04-04 14:49:48 +10:00
kprobes.c [PATCH] kprobes: fix broken fault handling for powerpc64 2006-03-26 08:57:04 -08:00
l2cr_6xx.S powerpc: Move l2cr.S over to arch/powerpc 2006-03-27 15:22:28 +11:00
legacy_serial.c [PATCH] powerpc: legacy_serial loop cleanup 2006-03-27 14:48:54 +11:00
lparcfg.c [PATCH] powerpc/pseries: misc lparcfg fixes 2006-04-01 22:37:07 +11:00
lparmap.c [PATCH] powerpc: Fix iSeries bug in VMALLOCBASE/VMALLOC_START consolidation 2006-01-09 15:06:06 +11:00
machine_kexec.c [PATCH] powerpc: remove remaining crash_notes variable from machine_kexec.c 2006-01-11 14:48:02 +11:00
machine_kexec_32.c [PATCH] powerpc: Merge kexec 2006-01-09 14:48:52 +11:00
machine_kexec_64.c [PATCH] powerpc: Only calculate htab_size in one place for kexec 2006-02-24 11:36:18 +11:00
Makefile powerpc: Use correct sequence for putting CPU into nap mode 2006-04-18 21:49:11 +10:00
misc_32.S [PATCH] powerpc: Cleanup LOADADDR etc. asm macros 2006-01-13 21:16:23 +11:00
misc_64.S [PATCH] powerpc: Cleanup LOADADDR etc. asm macros 2006-01-13 21:16:23 +11:00
module_32.c powerpc: Move module.c over to arch/powerpc 2006-03-27 19:28:58 +11:00
module_64.c powerpc: Move most remaining ppc64 files over to arch/powerpc 2005-11-14 17:30:17 +11:00
nvram_64.c [PATCH] powerpc: Kill _machine and hard-coded platform numbers 2006-03-28 23:15:54 +11:00
of_device.c [PATCH] powerpc: tidy-up of_register_driver()/driver_register() return values 2006-03-23 14:40:54 +11:00
paca.c [PATCH] powerpc: Allow non zero boot cpuids 2006-03-27 14:48:48 +11:00
pci_32.c [PATCH] powerpc: Kill _machine and hard-coded platform numbers 2006-03-28 23:15:54 +11:00
pci_64.c [PATCH] powerpc: make ISA floppies work again 2006-03-28 16:45:36 +11:00
pci_direct_iommu.c powerpc: Move most remaining ppc64 files over to arch/powerpc 2005-11-14 17:30:17 +11:00
pci_dn.c powerpc: Move most remaining ppc64 files over to arch/powerpc 2005-11-14 17:30:17 +11:00
pci_iommu.c [PATCH] powerpc: trivial: modify comments to refer to new location of files 2006-02-10 16:53:51 +11:00
perfmon_fsl_booke.c powerpc: Move perfmon_fsl_booke.c over to arch/powerpc 2006-03-27 20:09:04 +11:00
pmc.c [PATCH] powerpc: G4+ oprofile support 2006-01-09 15:06:03 +11:00
ppc32.h powerpc: move include/asm-ppc64/ppc32.h to arch/powerpc/kernel 2005-11-03 16:03:28 +11:00
ppc_ksyms.c Merge ../linux-2.6 2006-03-17 12:01:19 +11:00
proc_ppc64.c [PATCH] powerpc: Kill _machine and hard-coded platform numbers 2006-03-28 23:15:54 +11:00
process.c [PATCH] unexport get_wchan 2006-03-31 12:19:01 -08:00
prom.c [PATCH] powerpc: Kill _machine and hard-coded platform numbers 2006-03-28 23:15:54 +11:00
prom_init.c [PATCH] powerpc: Fix machine detection in prom_init.c 2006-04-13 09:32:00 -07:00
prom_parse.c [PATCH] powerpc: add refcounting to setup_peg2 and of_get_pci_address 2006-02-07 21:32:45 +11:00
ptrace-common.h [PATCH] powerpc: trivial: modify comments to refer to new location of files 2006-02-10 16:53:51 +11:00
ptrace.c powerpc: Fix various syscall/signal/swapcontext bugs 2006-03-08 13:24:22 +11:00
ptrace32.c [PATCH] use ptrace_get_task_struct in various places 2006-01-08 20:13:51 -08:00
rtas-proc.c [PATCH] powerpc: Avoid __initcall warnings 2006-04-13 09:27:26 -07:00
rtas-rtc.c [PATCH] powerpc: RTC memory corruption 2006-03-16 16:55:03 +11:00
rtas.c [PATCH] powerpc/pseries: Change H_StudlyCaps to H_SHOUTING_CAPS 2006-04-01 22:36:57 +11:00
rtas_flash.c [PATCH] Don't check pointer for NULL before passing it to kfree [arch/powerpc/kernel/rtas_flash.c] 2006-02-07 21:51:53 +11:00
rtas_pci.c Merge ../linux-2.6 2006-03-17 12:01:19 +11:00
semaphore.c powerpc: Merge enough to start building in arch/powerpc. 2005-09-26 16:04:21 +10:00
setup-common.c Manual merge with Linus. 2006-04-02 00:08:05 -05:00
setup.h powerpc: create kernel/setup.h 2005-11-09 11:35:26 +11:00
setup_32.c powerpc: converted embedded platforms to use new define_machine support 2006-03-30 23:39:57 -06:00
setup_64.c [PATCH] powerpc: iSeries needs slb_initialize to be called 2006-04-02 09:32:15 +10:00
signal_32.c [PATCH] powerpc: declare arch syscalls in <asm/syscalls.h> 2006-03-27 14:48:22 +11:00
signal_64.c [PATCH] powerpc: fix incorrect SA_ONSTACK behaviour for 64-bit processes 2006-03-28 16:45:24 +11:00
smp-tbsync.c powerpc: Merge smp-tbsync.c (the generic timebase sync routine) 2005-11-04 13:28:58 +11:00
smp.c [PATCH] for_each_possible_cpu: powerpc 2006-03-29 13:44:15 +11:00
swsusp_32.S powerpc: Move swsusp.S over to arch/powerpc 2006-03-27 19:21:46 +11:00
sys_ppc32.c [PATCH] consolidate sys32/compat_adjtimex 2006-03-26 08:56:57 -08:00
syscalls.c [PATCH] powerpc: declare arch syscalls in <asm/syscalls.h> 2006-03-27 14:48:22 +11:00
sysfs.c [PATCH] for_each_possible_cpu: powerpc 2006-03-29 13:44:15 +11:00
systbl.S powerpc: hook up the splice syscall 2006-04-01 23:27:23 +11:00
tau_6xx.c powerpc: Move cpu_setup_6xx.S and temp.c over to arch/powerpc 2006-03-27 19:15:26 +11:00
time.c [PATCH] for_each_possible_cpu: powerpc 2006-03-29 13:44:15 +11:00
traps.c powerpc: merge machine_check_exception between ppc32 & ppc64 2006-03-30 21:11:15 -06:00
udbg.c [PATCH] powerpc: Make early debugging configurable via Kconfig 2006-01-11 14:48:26 +11:00
udbg_16550.c [PATCH] powerpc: fix compile warning in udbg_init_maple_realmode 2006-02-07 21:51:52 +11:00
vdso.c [PATCH] powerpc: Kill _machine and hard-coded platform numbers 2006-03-28 23:15:54 +11:00
vecemu.c [PATCH] powerpc: Move arch/ppc*/kernel/vecemu.c to arch/powerpc 2005-09-21 19:21:07 +10:00
vector.S powerpc: Use reg.h instead of processor.h when we just want reg names 2005-10-10 22:20:10 +10:00
vio.c [PATCH] Add vio_bus_type probe and remove methods 2006-01-13 11:26:07 -08:00
vmlinux.lds.S [PATCH] powerpc: Kill _machine and hard-coded platform numbers 2006-03-28 23:15:54 +11:00