int request_unthrottle = 0;
        int rc = 0;
        struct keyspan_pda_private *priv;
+       unsigned long flags;
 
        priv = usb_get_serial_port_data(port);
        /* guess how much room is left in the device's ring buffer, and if we
           the TX urb is in-flight (wait until it completes)
           the device is full (wait until it says there is room)
        */
-       spin_lock_bh(&port->lock);
+       spin_lock_irqsave(&port->lock, flags);
        if (!test_bit(0, &port->write_urbs_free) || priv->tx_throttled) {
-               spin_unlock_bh(&port->lock);
+               spin_unlock_irqrestore(&port->lock, flags);
                return 0;
        }
        clear_bit(0, &port->write_urbs_free);
-       spin_unlock_bh(&port->lock);
+       spin_unlock_irqrestore(&port->lock, flags);
 
        /* At this point the URB is in our control, nobody else can submit it
           again (the only sudden transition was the one from EINPROGRESS to