imon: don't wedge hardware after early callbacks (rhbz 781832)
This commit is contained in:
parent
73a9923d68
commit
292a6915db
105
imon-dont-wedge-hardware-after-early-callbacks.patch
Normal file
105
imon-dont-wedge-hardware-after-early-callbacks.patch
Normal file
@ -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
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user