Re: Alpha Avanti broken by 9ce8654323d69273b4977f76f11c9e2d345ab130

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 17 Aug 2018, Arnd Bergmann wrote:

> - For outb()/outw()/outl(), we ought to provide stronger barriers than for
>   writeb()/writew()/writel(), as PCI drivers should expect the store to have
>   arrived at the device by the time the function returns.
> 
> Could you try the patch below that would address the second issue but not
> the first?
> 
>       Arnd
> 
> diff --git a/arch/alpha/include/asm/io.h b/arch/alpha/include/asm/io.h
> index 4c533fc94d62..0a479ac27cab 100644
> --- a/arch/alpha/include/asm/io.h
> +++ b/arch/alpha/include/asm/io.h
> @@ -364,11 +364,13 @@ extern inline u16 inw(unsigned long port)
>  extern inline void outb(u8 b, unsigned long port)
>  {
>         iowrite8(b, ioport_map(port, 1));
> +       mb();

 But is `mb' the right kind of high-level barrier for MMIO rather than 
regular memory access?

 I believe it is not and so I was told in the past when an ordering 
barrier was required for MMIO in a network driver for a weakly ordered 
system.  I think different kind of barrier is required here, such as 
`mmiowb', if appropriate.  Of course at the low level it may indeed expand 
to an MB hardware instruction, but that's another matter, we need to 
abstract things properly.

 A while ago I proposed a set of different MMIO barriers, that some 
systems may require, corresponding to the respective regular memory 
barriers, but in the I/O context.  I never got to implementing that 
proposal, but I still think it's the right thing to do and will see if I 
can find some time to try doing that.  Right now we have quite a mess with 
that. :(

  Maciej



[Index of Archives]     [Netdev]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux