Merge tag 'media/v4.20-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[sfrench/cifs-2.6.git] / drivers / media / usb / em28xx / em28xx-audio.c
index 8e799ae1df69282e7ce3db05f64f70d4bf7774aa..49c9b70b632b26202e5032413a0103042c6112b3 100644 (file)
@@ -116,6 +116,7 @@ static void em28xx_audio_isocirq(struct urb *urb)
                stride = runtime->frame_bits >> 3;
 
                for (i = 0; i < urb->number_of_packets; i++) {
+                       unsigned long flags;
                        int length =
                            urb->iso_frame_desc[i].actual_length / stride;
                        cp = (unsigned char *)urb->transfer_buffer +
@@ -137,7 +138,7 @@ static void em28xx_audio_isocirq(struct urb *urb)
                                       length * stride);
                        }
 
-                       snd_pcm_stream_lock(substream);
+                       snd_pcm_stream_lock_irqsave(substream, flags);
 
                        dev->adev.hwptr_done_capture += length;
                        if (dev->adev.hwptr_done_capture >=
@@ -153,7 +154,7 @@ static void em28xx_audio_isocirq(struct urb *urb)
                                period_elapsed = 1;
                        }
 
-                       snd_pcm_stream_unlock(substream);
+                       snd_pcm_stream_unlock_irqrestore(substream, flags);
                }
                if (period_elapsed)
                        snd_pcm_period_elapsed(substream);
@@ -842,11 +843,11 @@ static int em28xx_audio_urb_init(struct em28xx *dev)
 
        dev->adev.transfer_buffer = kcalloc(num_urb,
                                            sizeof(*dev->adev.transfer_buffer),
-                                           GFP_ATOMIC);
+                                           GFP_KERNEL);
        if (!dev->adev.transfer_buffer)
                return -ENOMEM;
 
-       dev->adev.urb = kcalloc(num_urb, sizeof(*dev->adev.urb), GFP_ATOMIC);
+       dev->adev.urb = kcalloc(num_urb, sizeof(*dev->adev.urb), GFP_KERNEL);
        if (!dev->adev.urb) {
                kfree(dev->adev.transfer_buffer);
                return -ENOMEM;
@@ -859,14 +860,14 @@ static int em28xx_audio_urb_init(struct em28xx *dev)
                int j, k;
                void *buf;
 
-               urb = usb_alloc_urb(npackets, GFP_ATOMIC);
+               urb = usb_alloc_urb(npackets, GFP_KERNEL);
                if (!urb) {
                        em28xx_audio_free_urb(dev);
                        return -ENOMEM;
                }
                dev->adev.urb[i] = urb;
 
-               buf = usb_alloc_coherent(udev, npackets * ep_size, GFP_ATOMIC,
+               buf = usb_alloc_coherent(udev, npackets * ep_size, GFP_KERNEL,
                                         &urb->transfer_dma);
                if (!buf) {
                        dev_err(&dev->intf->dev,
@@ -938,11 +939,11 @@ static int em28xx_audio_init(struct em28xx *dev)
        snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_em28xx_pcm_capture);
        pcm->info_flags = 0;
        pcm->private_data = dev;
-       strcpy(pcm->name, "Empia 28xx Capture");
+       strscpy(pcm->name, "Empia 28xx Capture", sizeof(pcm->name));
 
-       strcpy(card->driver, "Em28xx-Audio");
-       strcpy(card->shortname, "Em28xx Audio");
-       strcpy(card->longname, "Empia Em28xx Audio");
+       strscpy(card->driver, "Em28xx-Audio", sizeof(card->driver));
+       strscpy(card->shortname, "Em28xx Audio", sizeof(card->shortname));
+       strscpy(card->longname, "Empia Em28xx Audio", sizeof(card->longname));
 
        INIT_WORK(&adev->wq_trigger, audio_trigger);