init_waitqueue_head(&port->close_wait);
        init_waitqueue_head(&port->delta_msr_wait);
        mutex_init(&port->mutex);
+       mutex_init(&port->buf_mutex);
        spin_lock_init(&port->lock);
        port->close_delay = (50 * HZ) / 100;
        port->closing_wait = (3000 * HZ) / 100;
 int tty_port_alloc_xmit_buf(struct tty_port *port)
 {
        /* We may sleep in get_zeroed_page() */
-       mutex_lock(&port->mutex);
+       mutex_lock(&port->buf_mutex);
        if (port->xmit_buf == NULL)
                port->xmit_buf = (unsigned char *)get_zeroed_page(GFP_KERNEL);
-       mutex_unlock(&port->mutex);
+       mutex_unlock(&port->buf_mutex);
        if (port->xmit_buf == NULL)
                return -ENOMEM;
        return 0;
 
 void tty_port_free_xmit_buf(struct tty_port *port)
 {
-       mutex_lock(&port->mutex);
+       mutex_lock(&port->buf_mutex);
        if (port->xmit_buf != NULL) {
                free_page((unsigned long)port->xmit_buf);
                port->xmit_buf = NULL;
        }
-       mutex_unlock(&port->mutex);
+       mutex_unlock(&port->buf_mutex);
 }
 EXPORT_SYMBOL(tty_port_free_xmit_buf);
 
 
        wait_queue_head_t       delta_msr_wait; /* Modem status change */
        unsigned long           flags;          /* TTY flags ASY_*/
        struct mutex            mutex;          /* Locking */
+       struct mutex            buf_mutex;      /* Buffer alloc lock */
        unsigned char           *xmit_buf;      /* Optional buffer */
        unsigned int            close_delay;    /* Close port delay */
        unsigned int            closing_wait;   /* Delay for output */