summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Boyer <jwboyer@redhat.com>2012-02-21 14:32:16 -0500
committerJosh Boyer <jwboyer@redhat.com>2012-02-21 14:32:23 -0500
commit292a6915db21e6582e5a0d09a17aa60d04d5157a (patch)
tree8e2b88bef9244241edc193d6e2d44d18dd084458
parent73a9923d68b217d78c29a5e8f21fa1786401510d (diff)
downloadkernel-292a6915db21e6582e5a0d09a17aa60d04d5157a.tar.gz
kernel-292a6915db21e6582e5a0d09a17aa60d04d5157a.tar.xz
kernel-292a6915db21e6582e5a0d09a17aa60d04d5157a.zip
imon: don't wedge hardware after early callbacks (rhbz 781832)
-rw-r--r--imon-dont-wedge-hardware-after-early-callbacks.patch105
-rw-r--r--kernel.spec7
2 files changed, 111 insertions, 1 deletions
diff --git a/imon-dont-wedge-hardware-after-early-callbacks.patch b/imon-dont-wedge-hardware-after-early-callbacks.patch
new file mode 100644
index 000000000..b56076b57
--- /dev/null
+++ b/imon-dont-wedge-hardware-after-early-callbacks.patch
@@ -0,0 +1,105 @@
+From 8791d63af0cf113725ae4cb8cba9492814c59a93 Mon Sep 17 00:00:00 2001
+From: Jarod Wilson <jarod@redhat.com>
+Date: Thu, 26 Jan 2012 12:04:11 -0300
+Subject: [PATCH] [media] imon: don't wedge hardware after early callbacks
+
+This patch is just a minor update to one titled "imon: Input from ffdc
+device type ignored" from Corinna Vinschen. An earlier patch to prevent
+an oops when we got early callbacks also has the nasty side-effect of
+wedging imon hardware, as we don't acknowledge the urb. Rework the check
+slightly here to bypass processing the packet, as the driver isn't yet
+fully initialized, but still acknowlege the urb and submit a new rx_urb.
+Do this for both interfaces -- irrelevant for ffdc hardware, but
+relevant for newer hardware, though newer hardware doesn't spew the
+constant stream of data as soon as the hardware is initialized like the
+older ffdc devices, so they'd be less likely to trigger this anyway...
+
+Tested with both an ffdc device and an 0042 device.
+
+Reported-by: Corinna Vinschen <vinschen@redhat.com>
+Signed-off-by: Jarod Wilson <jarod@redhat.com>
+CC: stable@vger.kernel.org
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+---
+ drivers/media/rc/imon.c | 26 ++++++++++++++++++++++----
+ 1 files changed, 22 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/media/rc/imon.c b/drivers/media/rc/imon.c
+index 6ed9646..3f175eb 100644
+--- a/drivers/media/rc/imon.c
++++ b/drivers/media/rc/imon.c
+@@ -47,7 +47,7 @@
+ #define MOD_AUTHOR "Jarod Wilson <jarod@wilsonet.com>"
+ #define MOD_DESC "Driver for SoundGraph iMON MultiMedia IR/Display"
+ #define MOD_NAME "imon"
+-#define MOD_VERSION "0.9.3"
++#define MOD_VERSION "0.9.4"
+
+ #define DISPLAY_MINOR_BASE 144
+ #define DEVICE_NAME "lcd%d"
+@@ -1658,9 +1658,17 @@ static void usb_rx_callback_intf0(struct urb *urb)
+ return;
+
+ ictx = (struct imon_context *)urb->context;
+- if (!ictx || !ictx->dev_present_intf0)
++ if (!ictx)
+ return;
+
++ /*
++ * if we get a callback before we're done configuring the hardware, we
++ * can't yet process the data, as there's nowhere to send it, but we
++ * still need to submit a new rx URB to avoid wedging the hardware
++ */
++ if (!ictx->dev_present_intf0)
++ goto out;
++
+ switch (urb->status) {
+ case -ENOENT: /* usbcore unlink successful! */
+ return;
+@@ -1678,6 +1686,7 @@ static void usb_rx_callback_intf0(struct urb *urb)
+ break;
+ }
+
++out:
+ usb_submit_urb(ictx->rx_urb_intf0, GFP_ATOMIC);
+ }
+
+@@ -1690,9 +1699,17 @@ static void usb_rx_callback_intf1(struct urb *urb)
+ return;
+
+ ictx = (struct imon_context *)urb->context;
+- if (!ictx || !ictx->dev_present_intf1)
++ if (!ictx)
+ return;
+
++ /*
++ * if we get a callback before we're done configuring the hardware, we
++ * can't yet process the data, as there's nowhere to send it, but we
++ * still need to submit a new rx URB to avoid wedging the hardware
++ */
++ if (!ictx->dev_present_intf1)
++ goto out;
++
+ switch (urb->status) {
+ case -ENOENT: /* usbcore unlink successful! */
+ return;
+@@ -1710,6 +1727,7 @@ static void usb_rx_callback_intf1(struct urb *urb)
+ break;
+ }
+
++out:
+ usb_submit_urb(ictx->rx_urb_intf1, GFP_ATOMIC);
+ }
+
+@@ -2242,7 +2260,7 @@ find_endpoint_failed:
+ mutex_unlock(&ictx->lock);
+ usb_free_urb(rx_urb);
+ rx_urb_alloc_failed:
+- dev_err(ictx->dev, "unable to initialize intf0, err %d\n", ret);
++ dev_err(ictx->dev, "unable to initialize intf1, err %d\n", ret);
+
+ return NULL;
+ }
+--
+1.7.2.5
+
diff --git a/kernel.spec b/kernel.spec
index 47f21ecdb..3bb9f1a58 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -54,7 +54,7 @@ Summary: The Linux kernel
# For non-released -rc kernels, this will be appended after the rcX and
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
#
-%global baserelease 2
+%global baserelease 3
%global fedora_build %{baserelease}
# base_sublevel is the kernel version we're starting with and patching
@@ -714,6 +714,7 @@ Patch2802: linux-2.6-silence-acpi-blacklist.patch
Patch2899: linux-2.6-v4l-dvb-fixes.patch
Patch2900: linux-2.6-v4l-dvb-update.patch
Patch2901: linux-2.6-v4l-dvb-experimental.patch
+Patch2902: imon-dont-wedge-hardware-after-early-callbacks.patch
# fs fixes
@@ -1444,6 +1445,7 @@ ApplyPatch quite-apm.patch
ApplyOptionalPatch linux-2.6-v4l-dvb-fixes.patch
ApplyOptionalPatch linux-2.6-v4l-dvb-update.patch
ApplyOptionalPatch linux-2.6-v4l-dvb-experimental.patch
+ApplyPatch imon-dont-wedge-hardware-after-early-callbacks.patch
# Patches headed upstream
ApplyPatch disable-i8042-check-on-apple-mac.patch
@@ -2365,6 +2367,9 @@ fi
# ||----w |
# || ||
%changelog
+* Tue Feb 21 2012 Josh Boyer <jwboyer@redhat.com>
+- imon: don't wedge hardware after early callbacks (rhbz 781832)
+
* Tue Feb 21 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc4.git1.2
- Enable rtl8712 driver (rhbz 699618)
- Linux 3.3-rc4-git1 (upstream 27e74da9800289e69ba907777df1e2085231eff7)