Ok, if I'm reading this correctly:
offset = %edx
up->port.iobase = 0x8(%ebx)
up = %ebx
To get to this return statement, we would have had to execute:
static _INLINE_ unsigned int serial_in(struct uart_8250_port *up, int offset)
{
offset <<= up->port.regshift;
switch (up->port.iotype) {
which also dereferences "up". So something may have corrupted %ebx
between executing that switch statement and executing the inb().
Could the NMI handler be corrupting %ebx ?
--
Russell King (rmk@arm.linux.org.uk) The developer of ARM Linux
http://www.arm.linux.org.uk/personal/aboutme.html
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/