mempolicy: ERR_PTR dereference in mpol_shared_policy_init()
[safe/jmp/linux-2.6] / drivers / serial / bcm63xx_uart.c
index beddaa6..a1a0e55 100644 (file)
@@ -35,7 +35,7 @@
 #include <bcm63xx_regs.h>
 #include <bcm63xx_io.h>
 
-#define BCM63XX_NR_UARTS       1
+#define BCM63XX_NR_UARTS       2
 
 static struct uart_port ports[BCM63XX_NR_UARTS];
 
@@ -242,7 +242,7 @@ static void bcm_uart_do_rx(struct uart_port *port)
         * higher than fifo size anyway since we're much faster than
         * serial port */
        max_count = 32;
-       tty = port->info->port.tty;
+       tty = port->state->port.tty;
        do {
                unsigned int iestat, c, cstat;
                char flag;
@@ -318,7 +318,7 @@ static void bcm_uart_do_tx(struct uart_port *port)
                return;
        }
 
-       xmit = &port->info->xmit;
+       xmit = &port->state->xmit;
        if (uart_circ_empty(xmit))
                goto txq_empty;
 
@@ -784,7 +784,7 @@ static struct uart_driver bcm_uart_driver = {
        .dev_name       = "ttyS",
        .major          = TTY_MAJOR,
        .minor          = 64,
-       .nr             = 1,
+       .nr             = BCM63XX_NR_UARTS,
        .cons           = BCM63XX_CONSOLE,
 };
 
@@ -826,11 +826,12 @@ static int __devinit bcm_uart_probe(struct platform_device *pdev)
        port->dev = &pdev->dev;
        port->fifosize = 16;
        port->uartclk = clk_get_rate(clk) / 2;
+       port->line = pdev->id;
        clk_put(clk);
 
        ret = uart_add_one_port(&bcm_uart_driver, port);
        if (ret) {
-               kfree(port);
+               ports[pdev->id].membase = 0;
                return ret;
        }
        platform_set_drvdata(pdev, port);