From ce4281b050c1c7a2faa554ea375030db2eaa0658 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Wed, 26 May 2010 21:17:29 -0700 Subject: [PATCH] --- yaml --- r: 201129 b: refs/heads/master c: 9616ff434d96303689391af3d6e1c845d233405f h: refs/heads/master i: 201127: b6f7eb5957717a47052209869f99c982605231a8 v: v3 --- [refs] | 2 +- trunk/drivers/serial/sunsu.c | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index d1152d297a85..fea967349db0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7c1f6afcf98fe95fb3f2b70ce01cf66f6db53b5e +refs/heads/master: 9616ff434d96303689391af3d6e1c845d233405f diff --git a/trunk/drivers/serial/sunsu.c b/trunk/drivers/serial/sunsu.c index 234459c2f012..ffbf4553f665 100644 --- a/trunk/drivers/serial/sunsu.c +++ b/trunk/drivers/serial/sunsu.c @@ -1500,20 +1500,25 @@ static int __devinit su_probe(struct of_device *op, const struct of_device_id *m static int __devexit su_remove(struct of_device *op) { struct uart_sunsu_port *up = dev_get_drvdata(&op->dev); + bool kbdms = false; if (up->su_type == SU_PORT_MS || - up->su_type == SU_PORT_KBD) { + up->su_type == SU_PORT_KBD) + kbdms = true; + + if (kbdms) { #ifdef CONFIG_SERIO serio_unregister_port(&up->serio); #endif - kfree(up); - } else if (up->port.type != PORT_UNKNOWN) { + } else if (up->port.type != PORT_UNKNOWN) uart_remove_one_port(&sunsu_reg, &up->port); - } if (up->port.membase) of_iounmap(&op->resource[0], up->port.membase, up->reg_size); + if (kbdms) + kfree(up); + dev_set_drvdata(&op->dev, NULL); return 0;