Re: Alpha Avanti broken by 9ce8654323d69273b4977f76f11c9e2d345ab130

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

 



On Tue, 21 Aug 2018, Arnd Bergmann wrote:

> > The lockup happens somewhere in the function autoconfig in
> > drivers/tty/serial/8250/8250_port.c, but I don't know where exactly
> > because serial console doesn't work while the port is being probed.
> >
> > When I use console on a graphics card, the lockup doesn't happen.
> 
> Ok, this does strongly suggest that it is the outb() operation that I
> suspected after all, I just sent you a wrong patch to test, failing
> to realize that alpha has two implementations of outb, and that the
> extern one is the one that gets used in a defconfig build.

 I keep forgetting it's PCI port I/O involved here. :(

 PCI port I/O accesses are I believe supposed to be fully unbuffered, that 
is you need a completion barrier after the write operation that accesses 
an MMIO location mapped to the PCI port I/O space, so that at the return 
from `outX' the write cycle will have actually gone out to PCI already.

 For the Alpha platform that would mean an MB instruction followed by a 
read-back operation, i.e. conceptually something like:

void outb(u8 b, unsigned long port)
{
	iowrite8(b, ioport_map(port, 1));
	mb();
	ioread8(ioport_map(0x80, 1));
}

(reading `port' may have side effects and should not be done in such a 
piece of generic code).

 There might be a better location than 0x80 to read back as that location 
may incur an unnecessary delay to account for a slow device; possibly 
using `__raw_readl' rather than `ioread8' even, but that would have to be 
determined, and likely system-specific.

  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