From 292a6915db21e6582e5a0d09a17aa60d04d5157a Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 21 Feb 2012 14:32:16 -0500 Subject: [PATCH] imon: don't wedge hardware after early callbacks (rhbz 781832) --- ...wedge-hardware-after-early-callbacks.patch | 105 ++++++++++++++++++ kernel.spec | 7 +- 2 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 imon-dont-wedge-hardware-after-early-callbacks.patch 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 +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 +Signed-off-by: Jarod Wilson +CC: stable@vger.kernel.org +Signed-off-by: Mauro Carvalho Chehab +--- + 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 " + #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 +- imon: don't wedge hardware after early callbacks (rhbz 781832) + * Tue Feb 21 2012 Josh Boyer - 3.3.0-0.rc4.git1.2 - Enable rtl8712 driver (rhbz 699618) - Linux 3.3-rc4-git1 (upstream 27e74da9800289e69ba907777df1e2085231eff7)