linux_dsm_epyc7002/arch/mips
Alexander Duyck 1077fa36f2 arch: Add lightweight memory barriers dma_rmb() and dma_wmb()
There are a number of situations where the mandatory barriers rmb() and
wmb() are used to order memory/memory operations in the device drivers
and those barriers are much heavier than they actually need to be.  For
example in the case of PowerPC wmb() calls the heavy-weight sync
instruction when for coherent memory operations all that is really needed
is an lsync or eieio instruction.

This commit adds a coherent only version of the mandatory memory barriers
rmb() and wmb().  In most cases this should result in the barrier being the
same as the SMP barriers for the SMP case, however in some cases we use a
barrier that is somewhere in between rmb() and smp_rmb().  For example on
ARM the rmb barriers break down as follows:

  Barrier   Call     Explanation
  --------- -------- ----------------------------------
  rmb()     dsb()    Data synchronization barrier - system
  dma_rmb() dmb(osh) data memory barrier - outer sharable
  smp_rmb() dmb(ish) data memory barrier - inner sharable

These new barriers are not as safe as the standard rmb() and wmb().
Specifically they do not guarantee ordering between coherent and incoherent
memories.  The primary use case for these would be to enforce ordering of
reads and writes when accessing coherent memory that is shared between the
CPU and a device.

It may also be noted that there is no dma_mb().  Most architectures don't
provide a good mechanism for performing a coherent only full barrier without
resorting to the same mechanism used in mb().  As such there isn't much to
be gained in trying to define such a function.

Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Cc: Michael Ellerman <michael@ellerman.id.au>
Cc: Michael Neuling <mikey@neuling.org>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: David Miller <davem@davemloft.net>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Alexander Duyck <alexander.h.duyck@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2014-12-11 21:15:06 -05:00
..
alchemy MIPS: Alchemy: DB1300: Add touch penirq support 2014-09-22 13:35:47 +02:00
ar7 MIPS: Restore init.h usage to arch/mips/ar7/time.c 2014-03-26 23:09:23 +01:00
ath79 MIPS: ath79: Fix compilation error when CONFIG_PCI is disabled 2014-10-22 23:16:59 +02:00
bcm47xx Merge tag 'master-2014-09-16' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next 2014-09-26 15:39:24 -04:00
bcm63xx MIPS: BCM63xx: delete double assignment 2014-08-26 02:18:58 +02:00
boot MIPS: ralink: Move device-trees to arch/mips/boot/dts/ 2014-09-22 13:35:50 +02:00
cavium-octeon MIPS: Octeon: Make Octeon GPIO IRQ chip CPU hotplug-aware 2014-10-27 01:43:57 +01:00
cobalt MIPS: Cobalt: Move to 8250/16550 serial early printk driver 2013-10-29 21:24:38 +01:00
configs Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2014-10-18 14:24:36 -07:00
dec Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2014-06-09 18:10:34 -07:00
emma MIPS: Remove panic_timeout settings 2013-11-26 12:12:27 +01:00
fw MIPS: DEC/SNI: O32 wrapper stack switching fixes 2014-05-13 00:29:35 +02:00
include arch: Add lightweight memory barriers dma_rmb() and dma_wmb() 2014-12-11 21:15:06 -05:00
jazz
jz4740 This is the bulk of GPIO changes for the v3.17 development 2014-08-08 18:00:35 -07:00
kernel MIPS: Fix address type used for early memory detection. 2014-11-24 07:44:07 +01:00
kvm KVM: remove garbage arg to *hardware_{en,dis}able 2014-08-29 16:35:55 +02:00
lantiq Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2014-10-18 14:24:36 -07:00
lasat MIPS: Lasat: Add missing CONFIG_PROC_FS dependency to PICVUE_PROC 2014-10-21 17:35:44 +02:00
lib MIPS: lib: memcpy: Restore NOP on delay slot before returning to caller 2014-11-19 18:22:08 +01:00
loongson MIPS: Loongson: Make platform serial setup always built-in. 2014-11-24 07:44:06 +01:00
loongson1 MIPS: Disable MIPS16/microMIPS crap for platforms not supporting these ASEs. 2014-05-23 15:12:37 +02:00
math-emu MIPS: Fix build with binutils 2.24.51+ 2014-11-07 15:07:36 +01:00
mm MIPS: tlbex: Fix potential HTW race on TLBL/M/S handlers 2014-11-27 17:21:56 +01:00
mti-malta MIPS: Malta: Do not build the malta-amon.c file if CMP is not enabled 2014-10-23 20:05:55 +02:00
mti-sead3 MIPS: SEAD3: Fix LED device registration. 2014-11-24 07:44:03 +01:00
net mips: bpf: Fix broken BPF_MOD 2014-12-08 20:22:30 -05:00
netlogic MIPS: Netlogic: handle modular AHCI builds 2014-11-24 07:44:06 +01:00
oprofile MIPS: oprofile: Fix backtrace on 64-bit kernel 2014-11-19 18:22:07 +01:00
paravirt mips: Update the email address of Geert Uytterhoeven 2014-06-02 16:34:41 +02:00
pci Merge branch 'irq-irqdomain-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2014-12-10 09:01:01 -08:00
pmcs-msp71xx MIPS: MSP71xx: Fix build error 2014-10-24 02:37:18 +02:00
pnx833x MIPS: PNX833x: Remove checks for CONFIG_I2C_PNX0105 2014-05-23 15:12:39 +02:00
power nosave: consolidate __nosave_{begin,end} in <asm/sections.h> 2014-10-09 22:26:04 -04:00
ralink MIPS: ralink: remove deprecated IRQF_DISABLED 2014-09-29 19:46:32 +02:00
rb532 Merge branch '3.16-fixes' into mips-for-linux-next 2014-08-02 00:07:03 +02:00
sgi-ip22 MIPS: IP22: Add missing put_device call 2014-07-30 13:27:51 +02:00
sgi-ip27 MIPS: IP27: Fix __node_distances undefined error 2014-11-19 18:22:07 +01:00
sgi-ip32
sibyte MIPS: Sibyte: Include the swarm subdir to the sb1250 LittleSur builds 2014-10-23 13:52:49 +02:00
sni MIPS: Cleanup CP0 PRId and CP1 FPIR register access masks 2013-09-18 20:25:19 +02:00
txx9 driver:gpio remove all usage of gpio_remove retval in driver 2014-09-18 11:03:10 -07:00
vr41xx
Kbuild MIPS: net: Add BPF JIT 2014-05-30 16:10:20 +02:00
Kbuild.platforms MIPS: Enable build for new system 'paravirt' 2014-06-02 12:34:20 +02:00
Kconfig MIPS: Kconfig: Don't allow both microMIPS and SmartMIPS to be selected. 2014-11-24 07:44:07 +01:00
Kconfig.debug MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
Makefile MIPS: Fix build with binutils 2.24.51+ 2014-11-07 15:07:36 +01:00