if (pdu->base.direction == USBIP_DIR_IN)
                address |= USB_DIR_IN;
 
-       spin_lock_irq(&udc->lock);
+       spin_lock_irqsave(&udc->lock, flags);
        urb_p->ep = vudc_find_endpoint(udc, address);
        if (!urb_p->ep) {
                /* we don't know the type, there may be isoc data! */
                dev_err(&udc->pdev->dev, "request to nonexistent endpoint");
-               spin_unlock_irq(&udc->lock);
+               spin_unlock_irqrestore(&udc->lock, flags);
                usbip_event_add(&udc->ud, VUDC_EVENT_ERROR_TCP);
                ret = -EPIPE;
                goto free_urbp;
        }
        urb_p->type = urb_p->ep->type;
-       spin_unlock_irq(&udc->lock);
+       spin_unlock_irqrestore(&udc->lock, flags);
 
        urb_p->new = 1;
        urb_p->seqnum = pdu->base.seqnum;