|
@@ -636,6 +636,7 @@ static void read_completed(struct urb *urb)
|
|
|
struct device *dev;
|
|
|
struct urb *out = NULL;
|
|
|
int i, frame, len, send_it = 0, outframe = 0;
|
|
|
+ unsigned long flags;
|
|
|
size_t offset = 0;
|
|
|
|
|
|
if (urb->status || !info)
|
|
@@ -672,10 +673,10 @@ static void read_completed(struct urb *urb)
|
|
|
offset += len;
|
|
|
|
|
|
if (len > 0) {
|
|
|
- spin_lock(&cdev->spinlock);
|
|
|
+ spin_lock_irqsave(&cdev->spinlock, flags);
|
|
|
fill_out_urb(cdev, out, &out->iso_frame_desc[outframe]);
|
|
|
read_in_urb(cdev, urb, &urb->iso_frame_desc[frame]);
|
|
|
- spin_unlock(&cdev->spinlock);
|
|
|
+ spin_unlock_irqrestore(&cdev->spinlock, flags);
|
|
|
check_for_elapsed_periods(cdev, cdev->sub_playback);
|
|
|
check_for_elapsed_periods(cdev, cdev->sub_capture);
|
|
|
send_it = 1;
|