Re: [PATCH] set membase in serial8250_request_port

From: Alex Williamson
Date: Thu Oct 28 2004 - 14:27:35 EST



The iounmap/ioremap path in serial8250_release/request_port is
terribly unbalanced. The UPF_IOREMAP flag is used to determine if a
port gets ioremap'd, but plays no part in whether it gets iounmap'd.
It's easy to see how an MMIO serial port can be passed through
uart_set_info and end up with an unmapped membase. The results is a
non-functional UART or worse. I've tried to generate some discussion on
the proper fix for this, but I haven't succeeded. I propose the patch
below as a safe compromise. An MMIO uart w/ a mapbase, but no membase
doesn't seem viable to me. Thanks,

Alex

--
Signed-off-by: Alex Williamson <alex.williamson@xxxxxx>

===== drivers/serial/8250.c 1.77 vs edited =====
--- 1.77/drivers/serial/8250.c 2004-10-25 06:05:26 -06:00
+++ edited/drivers/serial/8250.c 2004-10-28 13:18:01 -06:00
@@ -1858,7 +1858,11 @@
/*
* If we have a mapbase, then request that as well.
*/
- if (ret == 0 && up->port.flags & UPF_IOREMAP) {
+ if (ret == 0 && ((up->port.flags & UPF_IOREMAP) ||
+ (up->port.iotype == UPIO_MEM &&
+ up->port.mapbase &&
+ !up->port.membase))) {
+
int size = res->end - res->start + 1;

up->port.membase = ioremap(up->port.mapbase, size);


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/