From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from Galois.linutronix.de ([146.0.238.70]:35872 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752356AbeGAPje (ORCPT ); Sun, 1 Jul 2018 11:39:34 -0400 From: Sebastian Andrzej Siewior To: linux-media@vger.kernel.org Cc: tglx@linutronix.de, Mauro Carvalho Chehab , linux-usb@vger.kernel.org, Sebastian Andrzej Siewior Subject: [PATCH REPOST 2/5] media: em28xx-audio: use irqsave() in USB's complete callback Date: Sun, 1 Jul 2018 17:39:18 +0200 Message-Id: <20180701153921.13129-3-bigeasy@linutronix.de> In-Reply-To: <20180701153921.13129-1-bigeasy@linutronix.de> References: <20180701153921.13129-1-bigeasy@linutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: linux-media-owner@vger.kernel.org List-ID: The USB completion callback does not disable interrupts while acquiring the lock. We want to remove the local_irq_disable() invocation from __usb_hcd_giveback_urb() and therefore it is required for the callback handler to disable the interrupts while acquiring the lock. The callback may be invoked either in IRQ or BH context depending on the USB host controller. Use the _irqsave() variant of the locking primitives. Cc: Mauro Carvalho Chehab Signed-off-by: Sebastian Andrzej Siewior --- drivers/media/usb/em28xx/em28xx-audio.c | 5 +++-- drivers/media/usb/em28xx/em28xx-core.c | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/media/usb/em28xx/em28xx-audio.c b/drivers/media/usb/em= 28xx/em28xx-audio.c index 8e799ae1df69..67481fc82445 100644 --- a/drivers/media/usb/em28xx/em28xx-audio.c +++ b/drivers/media/usb/em28xx/em28xx-audio.c @@ -116,6 +116,7 @@ static void em28xx_audio_isocirq(struct urb *urb) stride =3D runtime->frame_bits >> 3; =20 for (i =3D 0; i < urb->number_of_packets; i++) { + unsigned long flags; int length =3D urb->iso_frame_desc[i].actual_length / stride; cp =3D (unsigned char *)urb->transfer_buffer + @@ -137,7 +138,7 @@ static void em28xx_audio_isocirq(struct urb *urb) length * stride); } =20 - snd_pcm_stream_lock(substream); + snd_pcm_stream_lock_irqsave(substream, flags); =20 dev->adev.hwptr_done_capture +=3D length; if (dev->adev.hwptr_done_capture >=3D @@ -153,7 +154,7 @@ static void em28xx_audio_isocirq(struct urb *urb) period_elapsed =3D 1; } =20 - snd_pcm_stream_unlock(substream); + snd_pcm_stream_unlock_irqrestore(substream, flags); } if (period_elapsed) snd_pcm_period_elapsed(substream); diff --git a/drivers/media/usb/em28xx/em28xx-core.c b/drivers/media/usb/em2= 8xx/em28xx-core.c index f70845e7d8c6..ec6e5152afd9 100644 --- a/drivers/media/usb/em28xx/em28xx-core.c +++ b/drivers/media/usb/em28xx/em28xx-core.c @@ -777,6 +777,7 @@ EXPORT_SYMBOL_GPL(em28xx_set_mode); static void em28xx_irq_callback(struct urb *urb) { struct em28xx *dev =3D urb->context; + unsigned long flags; int i; =20 switch (urb->status) { @@ -793,9 +794,9 @@ static void em28xx_irq_callback(struct urb *urb) } =20 /* Copy data from URB */ - spin_lock(&dev->slock); + spin_lock_irqsave(&dev->slock, flags); dev->usb_ctl.urb_data_copy(dev, urb); - spin_unlock(&dev->slock); + spin_unlock_irqrestore(&dev->slock, flags); =20 /* Reset urb buffers */ for (i =3D 0; i < urb->number_of_packets; i++) { --=20 2.18.0 From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [REPOST,2/5] media: em28xx-audio: use irqsave() in USB's complete callback From: Sebastian Andrzej Siewior Message-Id: <20180701153921.13129-3-bigeasy@linutronix.de> Date: Sun, 1 Jul 2018 17:39:18 +0200 To: linux-media@vger.kernel.org Cc: tglx@linutronix.de, Mauro Carvalho Chehab , linux-usb@vger.kernel.org, Sebastian Andrzej Siewior List-ID: VGhlIFVTQiBjb21wbGV0aW9uIGNhbGxiYWNrIGRvZXMgbm90IGRpc2FibGUgaW50ZXJydXB0cyB3 aGlsZSBhY3F1aXJpbmcKdGhlIGxvY2suIFdlIHdhbnQgdG8gcmVtb3ZlIHRoZSBsb2NhbF9pcnFf ZGlzYWJsZSgpIGludm9jYXRpb24gZnJvbQpfX3VzYl9oY2RfZ2l2ZWJhY2tfdXJiKCkgYW5kIHRo ZXJlZm9yZSBpdCBpcyByZXF1aXJlZCBmb3IgdGhlIGNhbGxiYWNrCmhhbmRsZXIgdG8gZGlzYWJs ZSB0aGUgaW50ZXJydXB0cyB3aGlsZSBhY3F1aXJpbmcgdGhlIGxvY2suClRoZSBjYWxsYmFjayBt YXkgYmUgaW52b2tlZCBlaXRoZXIgaW4gSVJRIG9yIEJIIGNvbnRleHQgZGVwZW5kaW5nIG9uIHRo ZQpVU0IgaG9zdCBjb250cm9sbGVyLgpVc2UgdGhlIF9pcnFzYXZlKCkgdmFyaWFudCBvZiB0aGUg bG9ja2luZyBwcmltaXRpdmVzLgoKQ2M6IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBr ZXJuZWwub3JnPgpTaWduZWQtb2ZmLWJ5OiBTZWJhc3RpYW4gQW5kcnplaiBTaWV3aW9yIDxiaWdl YXN5QGxpbnV0cm9uaXguZGU+Ci0tLQogZHJpdmVycy9tZWRpYS91c2IvZW0yOHh4L2VtMjh4eC1h dWRpby5jIHwgNSArKystLQogZHJpdmVycy9tZWRpYS91c2IvZW0yOHh4L2VtMjh4eC1jb3JlLmMg IHwgNSArKystLQogMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvZW0yOHh4L2VtMjh4eC1hdWRpby5j IGIvZHJpdmVycy9tZWRpYS91c2IvZW0yOHh4L2VtMjh4eC1hdWRpby5jCmluZGV4IDhlNzk5YWUx ZGY2OS4uNjc0ODFmYzgyNDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9lbTI4eHgv ZW0yOHh4LWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvZW0yOHh4L2VtMjh4eC1hdWRp by5jCkBAIC0xMTYsNiArMTE2LDcgQEAgc3RhdGljIHZvaWQgZW0yOHh4X2F1ZGlvX2lzb2NpcnEo c3RydWN0IHVyYiAqdXJiKQogCQlzdHJpZGUgPSBydW50aW1lLT5mcmFtZV9iaXRzID4+IDM7CiAK IAkJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQkJdW5z aWduZWQgbG9uZyBmbGFnczsKIAkJCWludCBsZW5ndGggPQogCQkJICAgIHVyYi0+aXNvX2ZyYW1l X2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCAvIHN0cmlkZTsKIAkJCWNwID0gKHVuc2lnbmVkIGNoYXIg Kil1cmItPnRyYW5zZmVyX2J1ZmZlciArCkBAIC0xMzcsNyArMTM4LDcgQEAgc3RhdGljIHZvaWQg ZW0yOHh4X2F1ZGlvX2lzb2NpcnEoc3RydWN0IHVyYiAqdXJiKQogCQkJCSAgICAgICBsZW5ndGgg KiBzdHJpZGUpOwogCQkJfQogCi0JCQlzbmRfcGNtX3N0cmVhbV9sb2NrKHN1YnN0cmVhbSk7CisJ CQlzbmRfcGNtX3N0cmVhbV9sb2NrX2lycXNhdmUoc3Vic3RyZWFtLCBmbGFncyk7CiAKIAkJCWRl di0+YWRldi5od3B0cl9kb25lX2NhcHR1cmUgKz0gbGVuZ3RoOwogCQkJaWYgKGRldi0+YWRldi5o d3B0cl9kb25lX2NhcHR1cmUgPj0KQEAgLTE1Myw3ICsxNTQsNyBAQCBzdGF0aWMgdm9pZCBlbTI4 eHhfYXVkaW9faXNvY2lycShzdHJ1Y3QgdXJiICp1cmIpCiAJCQkJcGVyaW9kX2VsYXBzZWQgPSAx OwogCQkJfQogCi0JCQlzbmRfcGNtX3N0cmVhbV91bmxvY2soc3Vic3RyZWFtKTsKKwkJCXNuZF9w Y21fc3RyZWFtX3VubG9ja19pcnFyZXN0b3JlKHN1YnN0cmVhbSwgZmxhZ3MpOwogCQl9CiAJCWlm IChwZXJpb2RfZWxhcHNlZCkKIAkJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL2VtMjh4eC9lbTI4eHgtY29yZS5jIGIvZHJp dmVycy9tZWRpYS91c2IvZW0yOHh4L2VtMjh4eC1jb3JlLmMKaW5kZXggZjcwODQ1ZTdkOGM2Li5l YzZlNTE1MmFmZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2VtMjh4eC9lbTI4eHgt Y29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2VtMjh4eC9lbTI4eHgtY29yZS5jCkBAIC03 NzcsNiArNzc3LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoZW0yOHh4X3NldF9tb2RlKTsKIHN0YXRp YyB2b2lkIGVtMjh4eF9pcnFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCBl bTI4eHggKmRldiA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBp OwogCiAJc3dpdGNoICh1cmItPnN0YXR1cykgewpAQCAtNzkzLDkgKzc5NCw5IEBAIHN0YXRpYyB2 b2lkIGVtMjh4eF9pcnFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogCX0KIAogCS8qIENvcHkg ZGF0YSBmcm9tIFVSQiAqLwotCXNwaW5fbG9jaygmZGV2LT5zbG9jayk7CisJc3Bpbl9sb2NrX2ly cXNhdmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKIAlkZXYtPnVzYl9jdGwudXJiX2RhdGFfY29weShk ZXYsIHVyYik7Ci0Jc3Bpbl91bmxvY2soJmRldi0+c2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKIAogCS8qIFJlc2V0IHVyYiBidWZmZXJzICovCiAJ Zm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgewo=