linux/arch/alpha
Mikulas Patocka 54505a1e20 alpha: fix memory barriers so that they conform to the specification
The commits cd0e00c106 and 92d7223a74 broke boot on the Alpha Avanti
platform. The patches move memory barriers after a write before the write.
The result is that if there's iowrite followed by ioread, there is no
barrier between them.

The Alpha architecture allows reordering of the accesses to the I/O space,
and the missing barrier between write and read causes hang with serial
port and real time clock.

This patch makes barriers confiorm to the specification.

1. We add mb() before readX_relaxed and writeX_relaxed -
   memory-barriers.txt claims that these functions must be ordered w.r.t.
   each other. Alpha doesn't order them, so we need an explicit barrier.
2. We add mb() before reads from the I/O space - so that if there's a
   write followed by a read, there should be a barrier between them.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Fixes: cd0e00c106 ("alpha: io: reorder barriers to guarantee writeX() and iowriteX() ordering")
Fixes: 92d7223a74 ("alpha: io: reorder barriers to guarantee writeX() and iowriteX() ordering #2")
Cc: stable@vger.kernel.org      # v4.17+
Acked-by: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Reviewed-by: Maciej W. Rozycki <macro@linux-mips.org>
Signed-off-by: Matt Turner <mattst88@gmail.com>
2020-06-12 17:43:18 -07:00
..
boot alpha: Replace strncmp with str_has_prefix 2020-06-12 17:43:17 -07:00
configs Char/Misc driver patches for 5.7-rc1 2020-04-03 13:22:40 -07:00
include alpha: fix memory barriers so that they conform to the specification 2020-06-12 17:43:18 -07:00
kernel alpha: fix memory barriers so that they conform to the specification 2020-06-12 17:43:18 -07:00
lib alpha: turn csum_partial_copy_from_user() into csum_and_copy_from_user() 2020-05-29 16:11:49 -04:00
math-emu treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
mm mmap locking API: convert mmap_sem API comments 2020-06-09 09:39:14 -07:00
oprofile smp: Remove smp_call_function() and on_each_cpu() return values 2019-06-23 14:26:26 +02:00
Kconfig alpha: Kconfig: pedantic formatting 2020-06-12 17:43:17 -07:00
Kconfig.debug Kconfig: consolidate the "Kernel hacking" menu 2018-08-02 08:06:48 +09:00
Makefile kconfig: make arch/*/configs/defconfig the default of KBUILD_DEFCONFIG 2019-06-09 15:08:18 +09:00