kernel-ark/arch/powerpc/kernel
Paul Mackerras f007cacffc [POWERPC] Fix MMIO ops to provide expected barrier behaviour
This changes the writeX family of functions to have a sync instruction
before the MMIO store rather than after, because the generally expected
behaviour is that the device receiving the MMIO store can be guaranteed
to see the effects of any preceding writes to normal memory.

To preserve ordering between writeX and readX, and to preserve ordering
between preceding stores and the readX, the readX family of functions
have had an sync added before the load.

Although writeX followed by spin_unlock is not officially guaranteed
to keep the writeX inside the spin-locked region unless an mmiowb()
is used, there are currently drivers that depend on the previous
behaviour on powerpc, which was that the mmiowb wasn't actually required.
Therefore we have a per-cpu flag that is set by writeX, cleared by
__raw_spin_lock and mmiowb, and tested by __raw_spin_unlock.  If it is
set, __raw_spin_unlock does a sync and clears it.

This changes both 32-bit and 64-bit readX/writeX.  32-bit already has a
sync in __raw_spin_unlock (since lwsync doesn't exist on 32-bit), and thus
doesn't need the per-cpu flag.

Tested on G5 (PPC970) and POWER5.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-09-13 22:08:26 +10:00
..
vdso32 [PATCH] vDSO hash-style fix 2006-07-31 13:28:43 -07:00
vdso64 [PATCH] vDSO hash-style fix 2006-07-31 13:28:43 -07:00
align.c [PATCH] powerpc: Implement support for setting little-endian mode via prctl 2006-06-09 21:24:15 +10:00
asm-offsets.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
binfmt_elf32.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
btext.c [POWERPC] Fix various offb and BootX-related issues 2006-07-03 17:19:48 +10:00
cpu_setup_6xx.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
cpu_setup_power4.S [POWERPC] powerpc: Clear HID0 attention enable on PPC970 at boot time 2006-08-18 07:23:29 +10:00
cputable.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
crash_dump.c [PATCH] powerpc: Kdump header cleanup 2006-05-19 15:02:16 +10:00
crash.c [POWERPC] Fix interrupt clearing in kdump shutdown sequence 2006-09-13 18:31:23 +10:00
dma_64.c
entry_32.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
entry_64.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
firmware.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
fpu.S [POWERPC] Restore copyright notice in arch/powerpc/kernel/fpu.S 2006-08-30 14:45:35 +10:00
head_4xx.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
head_8xx.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
head_32.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
head_44x.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
head_64.S [POWERPC] force 64bit mode in fwnmi handlers to workaround firmware bugs 2006-07-29 04:07:08 +10:00
head_booke.h
head_fsl_booke.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
ibmebus.c [PATCH] powerpc: fix trigger handling in the new irq code 2006-07-10 13:24:20 -07:00
idle_6xx.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
idle_power4.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
idle.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
init_task.c
iomap.c [PATCH] powerpc: remove io_page_mask 2006-04-22 18:45:05 +10:00
iommu.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
irq.c [POWERPC] Fix performance regression in IRQ radix tree locking 2006-08-30 10:36:16 +10:00
kprobes.c [POWERPC] kprobes: Fix possible system crash during out-of-line single-stepping 2006-08-17 16:41:10 +10:00
l2cr_6xx.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
legacy_serial.c [POWERPC] Pass UPIO_TSI flag to 8259 serial driver 2006-08-23 15:51:19 +10:00
lparcfg.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
lparmap.c
machine_kexec_32.c Storage class should be first 2006-06-26 18:57:34 +02:00
machine_kexec_64.c [POWERPC] Make crash.c work on 32-bit and 64-bit 2006-08-17 16:41:10 +10:00
machine_kexec.c [POWERPC] Move some kexec logic into machine_kexec.c 2006-08-17 16:41:10 +10:00
Makefile [POWERPC] Make crash.c work on 32-bit and 64-bit 2006-08-17 16:41:10 +10:00
misc_32.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
misc_64.S [POWERPC] Minor comment fix for misc_64.S 2006-07-31 14:37:46 +10:00
misc.S [POWERPC] Fix MMIO ops to provide expected barrier behaviour 2006-09-13 22:08:26 +10:00
module_32.c powerpc: Move module.c over to arch/powerpc 2006-03-27 19:28:58 +11:00
module_64.c [PATCH] powerpc64: Fix loading of modules without a .toc section 2006-04-28 21:04:49 +10:00
nvram_64.c [PATCH] nvram_print_partitions cosmetic fixup 2006-04-29 18:08:05 +10:00
of_device.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
paca.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
pci_32.c [PATCH] powerpc: fix trigger handling in the new irq code 2006-07-10 13:24:20 -07:00
pci_64.c [POWERPC] Make OF irq map code detect more error cases 2006-08-30 14:31:03 +10:00
pci_direct_iommu.c [POWERPC] cleanup dma_mapping_ops 2006-06-15 19:31:26 +10:00
pci_dn.c [PATCH] powerpc: clean up iSeries PCI probe 2006-05-24 16:08:57 +10:00
pci_iommu.c [POWERPC] cleanup dma_mapping_ops 2006-06-15 19:31:26 +10:00
perfmon_fsl_booke.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
pmc.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
ppc32.h
ppc_ksyms.c [POWERPC] Remove flush_dcache_all export 2006-08-25 13:32:35 +10:00
proc_ppc64.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
process.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
prom_init.c [POWERPC] Fix up ibm_architecture_vec definition 2006-08-30 14:34:04 +10:00
prom_parse.c [POWERPC] Make OF irq map code detect more error cases 2006-08-30 14:31:03 +10:00
prom.c [POWERPC] Add new interrupt mapping core and change platforms to use it 2006-07-03 21:36:01 +10:00
ptrace32.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
ptrace-common.h Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
ptrace.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
rtas_flash.c [PATCH] powerpc: reorg RTAS delay code 2006-06-09 21:21:06 +10:00
rtas_pci.c [POWERPC] Add new interrupt mapping core and change platforms to use it 2006-07-03 21:36:01 +10:00
rtas-proc.c [PATCH] powerpc: Avoid __initcall warnings 2006-04-13 09:27:26 -07:00
rtas-rtc.c [PATCH] powerpc: reorg RTAS delay code 2006-06-09 21:21:06 +10:00
rtas.c [POWERPC] Fix might-sleep warning on removing cpus 2006-08-08 16:00:11 +10:00
semaphore.c
setup_32.c [POWERPC] Add new interrupt mapping core and change platforms to use it 2006-07-03 21:36:01 +10:00
setup_64.c [POWERPC] Add new interrupt mapping core and change platforms to use it 2006-07-03 21:36:01 +10:00
setup-common.c [PATCH] tty: Remove include of screen_info.h from tty.h 2006-07-10 13:24:16 -07:00
setup.h [PATCH] powerpc: Make early xmon logic immune to location of early parsing 2006-05-19 15:02:12 +10:00
signal_32.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
signal_64.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
smp-tbsync.c [POWERPC] Fix irq enable/disable in smp_generic_take_timebase 2006-08-30 16:10:47 +10:00
smp.c [POWERPC] Fix non-MPIC CHRPs with CONFIG_SMP set 2006-07-26 01:27:04 +10:00
swsusp_32.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
sys_ppc32.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
syscalls.c [PATCH] powerpc: declare arch syscalls in <asm/syscalls.h> 2006-03-27 14:48:22 +11:00
sysfs.c [PATCH] cpu hotplug: replace __devinit* with __cpuinit* for cpu notifications 2006-07-31 13:28:39 -07:00
systbl.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
tau_6xx.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
time.c [PATCH] ppc32: fix last_jiffy time comparison 2006-08-30 21:21:55 -07:00
traps.c Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc 2006-08-23 21:08:12 -07:00
udbg_16550.c [POWERPC] Fix default clock for udbg_16550 2006-07-26 01:27:13 +10:00
udbg.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
vdso.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
vecemu.c
vector.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
vio.c [POWERPC] Add new interrupt mapping core and change platforms to use it 2006-07-03 21:36:01 +10:00
vmlinux.lds.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00