HID: usbhid: fix recursive deadlock
[pandora-kernel.git] / drivers / hid / usbhid / hid-core.c
index b403fce..831e20d 100644 (file)
@@ -448,8 +448,6 @@ static void hid_ctrl(struct urb *urb)
        struct usbhid_device *usbhid = hid->driver_data;
        int unplug = 0, status = urb->status;
 
-       spin_lock(&usbhid->lock);
-
        switch (status) {
        case 0:                 /* success */
                if (usbhid->ctrl[usbhid->ctrltail].dir == USB_DIR_IN)
@@ -469,6 +467,8 @@ static void hid_ctrl(struct urb *urb)
                hid_warn(urb->dev, "ctrl urb status %d received\n", status);
        }
 
+       spin_lock(&usbhid->lock);
+
        if (unplug)
                usbhid->ctrltail = usbhid->ctrlhead;
        else