diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-07-21 12:28:50 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-07-21 12:28:50 -0400 |
commit | 95977d0ef23ee37990ce8704dfd6c61eab02a548 (patch) | |
tree | d3bb7133f8f51f8e48c0c74ee28c14deb45fedbe /drivers | |
parent | a4ce96ac356e7024a7724ade9d18ba1bdf3c5c06 (diff) | |
parent | f8324e20f8289dffc646d64366332e05eaacab25 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6:
math-emu: correct test for downshifting fraction in _FP_FROM_INT()
perf: Add DWARF register lookup for sparc
MAINTAINERS: Add SBUS driver path to sparc entry.
drivers/sbus: Remove unnecessary casts of private_data
sparc: remove homegrown L1_CACHE_ALIGN macro
sparc64: fix the build error due to smp_kgdb_capture_client()
sparc64: Fix maybe_change_configuration() PCR setting.
arch/sparc/kernel: Eliminate what looks like a NULL pointer dereference
sparc64: Update defconfig.
sunsu: Fix use after free in su_remove().
sunserial: Don't call add_preferred_console() when console= is specified.
sparc32: Kill none_mask, it's bogus.
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/sbus/char/openprom.c | 4 | ||||
-rw-r--r-- | drivers/serial/suncore.c | 4 | ||||
-rw-r--r-- | drivers/serial/sunsu.c | 13 |
3 files changed, 14 insertions, 7 deletions
diff --git a/drivers/sbus/char/openprom.c b/drivers/sbus/char/openprom.c index d53e62ab09da..aacbe14e2e7a 100644 --- a/drivers/sbus/char/openprom.c +++ b/drivers/sbus/char/openprom.c | |||
@@ -554,7 +554,7 @@ static int opiocgetnext(unsigned int cmd, void __user *argp) | |||
554 | static int openprom_bsd_ioctl(struct file * file, | 554 | static int openprom_bsd_ioctl(struct file * file, |
555 | unsigned int cmd, unsigned long arg) | 555 | unsigned int cmd, unsigned long arg) |
556 | { | 556 | { |
557 | DATA *data = (DATA *) file->private_data; | 557 | DATA *data = file->private_data; |
558 | void __user *argp = (void __user *)arg; | 558 | void __user *argp = (void __user *)arg; |
559 | int err; | 559 | int err; |
560 | 560 | ||
@@ -601,7 +601,7 @@ static int openprom_bsd_ioctl(struct file * file, | |||
601 | static long openprom_ioctl(struct file * file, | 601 | static long openprom_ioctl(struct file * file, |
602 | unsigned int cmd, unsigned long arg) | 602 | unsigned int cmd, unsigned long arg) |
603 | { | 603 | { |
604 | DATA *data = (DATA *) file->private_data; | 604 | DATA *data = file->private_data; |
605 | 605 | ||
606 | switch (cmd) { | 606 | switch (cmd) { |
607 | case OPROMGETOPT: | 607 | case OPROMGETOPT: |
diff --git a/drivers/serial/suncore.c b/drivers/serial/suncore.c index ed7d958b0a01..544f2e25d0e5 100644 --- a/drivers/serial/suncore.c +++ b/drivers/serial/suncore.c | |||
@@ -71,7 +71,9 @@ int sunserial_console_match(struct console *con, struct device_node *dp, | |||
71 | 71 | ||
72 | con->index = line; | 72 | con->index = line; |
73 | drv->cons = con; | 73 | drv->cons = con; |
74 | add_preferred_console(con->name, line, NULL); | 74 | |
75 | if (!console_set_on_cmdline) | ||
76 | add_preferred_console(con->name, line, NULL); | ||
75 | 77 | ||
76 | return 1; | 78 | return 1; |
77 | } | 79 | } |
diff --git a/drivers/serial/sunsu.c b/drivers/serial/sunsu.c index 234459c2f012..ffbf4553f665 100644 --- a/drivers/serial/sunsu.c +++ b/drivers/serial/sunsu.c | |||
@@ -1500,20 +1500,25 @@ out_unmap: | |||
1500 | static int __devexit su_remove(struct of_device *op) | 1500 | static int __devexit su_remove(struct of_device *op) |
1501 | { | 1501 | { |
1502 | struct uart_sunsu_port *up = dev_get_drvdata(&op->dev); | 1502 | struct uart_sunsu_port *up = dev_get_drvdata(&op->dev); |
1503 | bool kbdms = false; | ||
1503 | 1504 | ||
1504 | if (up->su_type == SU_PORT_MS || | 1505 | if (up->su_type == SU_PORT_MS || |
1505 | up->su_type == SU_PORT_KBD) { | 1506 | up->su_type == SU_PORT_KBD) |
1507 | kbdms = true; | ||
1508 | |||
1509 | if (kbdms) { | ||
1506 | #ifdef CONFIG_SERIO | 1510 | #ifdef CONFIG_SERIO |
1507 | serio_unregister_port(&up->serio); | 1511 | serio_unregister_port(&up->serio); |
1508 | #endif | 1512 | #endif |
1509 | kfree(up); | 1513 | } else if (up->port.type != PORT_UNKNOWN) |
1510 | } else if (up->port.type != PORT_UNKNOWN) { | ||
1511 | uart_remove_one_port(&sunsu_reg, &up->port); | 1514 | uart_remove_one_port(&sunsu_reg, &up->port); |
1512 | } | ||
1513 | 1515 | ||
1514 | if (up->port.membase) | 1516 | if (up->port.membase) |
1515 | of_iounmap(&op->resource[0], up->port.membase, up->reg_size); | 1517 | of_iounmap(&op->resource[0], up->port.membase, up->reg_size); |
1516 | 1518 | ||
1519 | if (kbdms) | ||
1520 | kfree(up); | ||
1521 | |||
1517 | dev_set_drvdata(&op->dev, NULL); | 1522 | dev_set_drvdata(&op->dev, NULL); |
1518 | 1523 | ||
1519 | return 0; | 1524 | return 0; |