Skip to content
Commit 54505a1e authored by Mikulas Patocka's avatar Mikulas Patocka Committed by Matt Turner
Browse files

alpha: fix memory barriers so that they conform to the specification

The commits cd0e00c1 and 92d7223a

 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: default avatarMikulas Patocka <mpatocka@redhat.com>
Fixes: cd0e00c1 ("alpha: io: reorder barriers to guarantee writeX() and iowriteX() ordering")
Fixes: 92d7223a

 ("alpha: io: reorder barriers to guarantee writeX() and iowriteX() ordering #2")
Cc: stable@vger.kernel.org      # v4.17+
Acked-by: default avatarIvan Kokshaysky <ink@jurassic.park.msu.ru>
Reviewed-by: default avatarMaciej W. Rozycki <macro@linux-mips.org>
Signed-off-by: default avatarMatt Turner <mattst88@gmail.com>
parent c0ebf715
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment