On Tue, 19 Feb 2019, Mikulas Patocka wrote:

> The avanti platform is still broken in the kernel 5.0 and I tested that 
> this patch fixes it.
[...]
> > diff --git a/arch/alpha/kernel/io.c b/arch/alpha/kernel/io.c
> > index c025a3e5e357..604237fa821f 100644
> > --- a/arch/alpha/kernel/io.c
> > +++ b/arch/alpha/kernel/io.c
> > @@ -78,16 +78,19 @@ u32 inl(unsigned long port)
> >  void outb(u8 b, unsigned long port)
> >  {
> >         iowrite8(b, ioport_map(port, 1));
> > +       mb();
> >  }

-- etc.  Shouldn't the barrier be *in* `iowriteX' instead?  In 
Documentation/memory-barriers.txt we have:

 (*) ioreadX(), iowriteX()

     These will perform appropriately for the type of access they're actually
     doing, be it inX()/outX() or readX()/writeX().

and some drivers call `ioreadX'/`iowriteX' directly.

  Maciej

Reply via email to