The function uart_match_port() incorrectly compares the ioremap'd
virtual addresses of ports instead of the physical address to find
duplicate ports for MMIO based UARTs. This fixes it.
Signed-off-by: Benjamin Herrenschmidt <[email protected]>
Index: linux-work/drivers/serial/serial_core.c
===================================================================
--- linux-work.orig/drivers/serial/serial_core.c 2005-11-14 20:32:16.000000000 +1100
+++ linux-work/drivers/serial/serial_core.c 2005-11-29 08:08:44.000000000 +1100
@@ -2307,7 +2307,7 @@
return (port1->iobase == port2->iobase) &&
(port1->hub6 == port2->hub6);
case UPIO_MEM:
- return (port1->membase == port2->membase);
+ return (port1->mapbase == port2->mapbase);
}
return 0;
}
On Tue, Nov 29, 2005 at 08:11:08AM +1100, Benjamin Herrenschmidt wrote:
> The function uart_match_port() incorrectly compares the ioremap'd
> virtual addresses of ports instead of the physical address to find
> duplicate ports for MMIO based UARTs. This fixes it.
I'd like this to go in -mm for a bit before we put it into mainline,
just in case there's any undesirable side effects.
--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 Serial core
On Mon, 2005-11-28 at 22:12 +0000, Russell King wrote:
> On Tue, Nov 29, 2005 at 08:11:08AM +1100, Benjamin Herrenschmidt wrote:
> > The function uart_match_port() incorrectly compares the ioremap'd
> > virtual addresses of ports instead of the physical address to find
> > duplicate ports for MMIO based UARTs. This fixes it.
>
> I'd like this to go in -mm for a bit before we put it into mainline,
> just in case there's any undesirable side effects.
Fine with me.
Ben.