[SPARC64]: Fix of_iounmap() region release.
We need to pass in the resource otherwise we cannot release the region properly. We must know whether it is an I/O or MEM resource. Spotted by Eric Brower. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -1037,7 +1037,8 @@ static int __devinit sunsab_init_one(struct uart_sunsab_port *up,
|
||||
err = request_irq(up->port.irq, sunsab_interrupt,
|
||||
IRQF_SHARED, "sab", up);
|
||||
if (err) {
|
||||
of_iounmap(up->port.membase,
|
||||
of_iounmap(&op->resource[0],
|
||||
up->port.membase,
|
||||
sizeof(union sab82532_async_regs));
|
||||
return err;
|
||||
}
|
||||
@@ -1064,7 +1065,8 @@ static int __devinit sab_probe(struct of_device *op, const struct of_device_id *
|
||||
sizeof(union sab82532_async_regs),
|
||||
(inst * 2) + 1);
|
||||
if (err) {
|
||||
of_iounmap(up[0].port.membase,
|
||||
of_iounmap(&op->resource[0],
|
||||
up[0].port.membase,
|
||||
sizeof(union sab82532_async_regs));
|
||||
free_irq(up[0].port.irq, &up[0]);
|
||||
return err;
|
||||
@@ -1082,10 +1084,13 @@ static int __devinit sab_probe(struct of_device *op, const struct of_device_id *
|
||||
|
||||
static void __devexit sab_remove_one(struct uart_sunsab_port *up)
|
||||
{
|
||||
struct of_device *op = to_of_device(up->port.dev);
|
||||
|
||||
uart_remove_one_port(&sunsab_reg, &up->port);
|
||||
if (!(up->port.line & 1))
|
||||
free_irq(up->port.irq, up);
|
||||
of_iounmap(up->port.membase,
|
||||
of_iounmap(&op->resource[0],
|
||||
up->port.membase,
|
||||
sizeof(union sab82532_async_regs));
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user