|
@@ -1082,11 +1082,12 @@ static void ctrl_complete(struct urb *urb)
|
|
|
struct usb_ctrlrequest *reqp;
|
|
|
struct subcase *subcase;
|
|
|
int status = urb->status;
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
reqp = (struct usb_ctrlrequest *)urb->setup_packet;
|
|
|
subcase = container_of(reqp, struct subcase, setup);
|
|
|
|
|
|
- spin_lock(&ctx->lock);
|
|
|
+ spin_lock_irqsave(&ctx->lock, flags);
|
|
|
ctx->count--;
|
|
|
ctx->pending--;
|
|
|
|
|
@@ -1185,7 +1186,7 @@ error:
|
|
|
/* signal completion when nothing's queued */
|
|
|
if (ctx->pending == 0)
|
|
|
complete(&ctx->complete);
|
|
|
- spin_unlock(&ctx->lock);
|
|
|
+ spin_unlock_irqrestore(&ctx->lock, flags);
|
|
|
}
|
|
|
|
|
|
static int
|
|
@@ -1917,8 +1918,9 @@ struct transfer_context {
|
|
|
static void complicated_callback(struct urb *urb)
|
|
|
{
|
|
|
struct transfer_context *ctx = urb->context;
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
- spin_lock(&ctx->lock);
|
|
|
+ spin_lock_irqsave(&ctx->lock, flags);
|
|
|
ctx->count--;
|
|
|
|
|
|
ctx->packet_count += urb->number_of_packets;
|
|
@@ -1958,7 +1960,7 @@ static void complicated_callback(struct urb *urb)
|
|
|
complete(&ctx->done);
|
|
|
}
|
|
|
done:
|
|
|
- spin_unlock(&ctx->lock);
|
|
|
+ spin_unlock_irqrestore(&ctx->lock, flags);
|
|
|
}
|
|
|
|
|
|
static struct urb *iso_alloc_urb(
|