Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / s390 / char / tty3270.c
index 7db5ebc..9a14177 100644 (file)
@@ -653,18 +653,12 @@ tty3270_activate(struct raw3270_view *view)
        tp->update_flags = TTY_UPDATE_ALL;
        tty3270_set_timer(tp, 1);
        spin_unlock_irqrestore(&tp->view.lock, flags);
-       start_tty(tp->tty);
        return 0;
 }
 
 static void
 tty3270_deactivate(struct raw3270_view *view)
 {
-       struct tty3270 *tp;
-
-       tp = (struct tty3270 *) view;
-       if (tp && tp->tty)
-               stop_tty(tp->tty);
 }
 
 static int
@@ -697,10 +691,9 @@ tty3270_alloc_view(void)
        struct tty3270 *tp;
        int pages;
 
-       tp = kmalloc(sizeof(struct tty3270),GFP_KERNEL);
+       tp = kzalloc(sizeof(struct tty3270), GFP_KERNEL);
        if (!tp)
                goto out_err;
-       memset(tp, 0, sizeof(struct tty3270));
        tp->freemem_pages =
                kmalloc(sizeof(void *) * TTY3270_STRING_PAGES, GFP_KERNEL);
        if (!tp->freemem_pages)
@@ -716,13 +709,13 @@ tty3270_alloc_view(void)
                                  tp->freemem_pages[pages], PAGE_SIZE);
        }
        tp->write = raw3270_request_alloc(TTY3270_OUTPUT_BUFFER_SIZE);
-       if (!tp->write)
+       if (IS_ERR(tp->write))
                goto out_pages;
        tp->read = raw3270_request_alloc(0);
-       if (!tp->read)
+       if (IS_ERR(tp->read))
                goto out_write;
        tp->kreset = raw3270_request_alloc(1);
-       if (!tp->kreset)
+       if (IS_ERR(tp->kreset))
                goto out_read;
        tp->kbd = kbd_alloc();
        if (!tp->kbd)
@@ -773,16 +766,14 @@ tty3270_alloc_screen(struct tty3270 *tp)
        int lines;
 
        size = sizeof(struct tty3270_line) * (tp->view.rows - 2);
-       tp->screen = kmalloc(size, GFP_KERNEL);
+       tp->screen = kzalloc(size, GFP_KERNEL);
        if (!tp->screen)
                goto out_err;
-       memset(tp->screen, 0, size);
        for (lines = 0; lines < tp->view.rows - 2; lines++) {
                size = sizeof(struct tty3270_cell) * tp->view.cols;
-               tp->screen[lines].cells = kmalloc(size, GFP_KERNEL);
+               tp->screen[lines].cells = kzalloc(size, GFP_KERNEL);
                if (!tp->screen[lines].cells)
                        goto out_screen;
-               memset(tp->screen[lines].cells, 0, size);
        }
        return 0;
 out_screen:
@@ -845,7 +836,8 @@ tty3270_del_views(void)
        int i;
 
        for (i = 0; i < tty3270_max_index; i++) {
-               tp = (struct tty3270 *) raw3270_find_view(&tty3270_fn, i);
+               tp = (struct tty3270 *)
+                       raw3270_find_view(&tty3270_fn, i + RAW3270_FIRSTMINOR);
                if (!IS_ERR(tp))
                        raw3270_del_view(&tp->view);
        }
@@ -871,7 +863,9 @@ tty3270_open(struct tty_struct *tty, struct file * filp)
        if (tty->count > 1)
                return 0;
        /* Check if the tty3270 is already there. */
-       tp = (struct tty3270 *) raw3270_find_view(&tty3270_fn, tty->index);
+       tp = (struct tty3270 *)
+               raw3270_find_view(&tty3270_fn,
+                                 tty->index + RAW3270_FIRSTMINOR);
        if (!IS_ERR(tp)) {
                tty->driver_data = tp;
                tty->winsize.ws_row = tp->view.rows - 2;
@@ -903,7 +897,8 @@ tty3270_open(struct tty_struct *tty, struct file * filp)
                     (void (*)(unsigned long)) tty3270_read_tasklet,
                     (unsigned long) tp->read);
 
-       rc = raw3270_add_view(&tp->view, &tty3270_fn, tty->index);
+       rc = raw3270_add_view(&tp->view, &tty3270_fn,
+                             tty->index + RAW3270_FIRSTMINOR);
        if (rc) {
                tty3270_free_view(tp);
                return rc;
@@ -911,8 +906,8 @@ tty3270_open(struct tty_struct *tty, struct file * filp)
 
        rc = tty3270_alloc_screen(tp);
        if (rc) {
-               raw3270_del_view(&tp->view);
                raw3270_put_view(&tp->view);
+               raw3270_del_view(&tp->view);
                return rc;
        }
 
@@ -1780,7 +1775,7 @@ tty3270_init(void)
        struct tty_driver *driver;
        int ret;
 
-       driver = alloc_tty_driver(256);
+       driver = alloc_tty_driver(RAW3270_MAXDEVS);
        if (!driver)
                return -ENOMEM;
 
@@ -1794,6 +1789,7 @@ tty3270_init(void)
        driver->driver_name = "ttyTUB";
        driver->name = "ttyTUB";
        driver->major = IBM_TTY3270_MAJOR;
+       driver->minor_start = RAW3270_FIRSTMINOR;
        driver->type = TTY_DRIVER_TYPE_SYSTEM;
        driver->subtype = SYSTEM_TYPE_TTY;
        driver->init_termios = tty_std_termios;