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
|
# 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"
|
# 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}
|
%global fedora_build %{baserelease}
|
||||||
|
|
||||||
# base_sublevel is the kernel version we're starting with and patching
|
# 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
|
Patch2899: linux-2.6-v4l-dvb-fixes.patch
|
||||||
Patch2900: linux-2.6-v4l-dvb-update.patch
|
Patch2900: linux-2.6-v4l-dvb-update.patch
|
||||||
Patch2901: linux-2.6-v4l-dvb-experimental.patch
|
Patch2901: linux-2.6-v4l-dvb-experimental.patch
|
||||||
|
Patch2902: imon-dont-wedge-hardware-after-early-callbacks.patch
|
||||||
|
|
||||||
# fs fixes
|
# fs fixes
|
||||||
|
|
||||||
@ -1444,6 +1445,7 @@ ApplyPatch quite-apm.patch
|
|||||||
ApplyOptionalPatch linux-2.6-v4l-dvb-fixes.patch
|
ApplyOptionalPatch linux-2.6-v4l-dvb-fixes.patch
|
||||||
ApplyOptionalPatch linux-2.6-v4l-dvb-update.patch
|
ApplyOptionalPatch linux-2.6-v4l-dvb-update.patch
|
||||||
ApplyOptionalPatch linux-2.6-v4l-dvb-experimental.patch
|
ApplyOptionalPatch linux-2.6-v4l-dvb-experimental.patch
|
||||||
|
ApplyPatch imon-dont-wedge-hardware-after-early-callbacks.patch
|
||||||
|
|
||||||
# Patches headed upstream
|
# Patches headed upstream
|
||||||
ApplyPatch disable-i8042-check-on-apple-mac.patch
|
ApplyPatch disable-i8042-check-on-apple-mac.patch
|
||||||
@ -2365,6 +2367,9 @@ fi
|
|||||||
# ||----w |
|
# ||----w |
|
||||||
# || ||
|
# || ||
|
||||||
%changelog
|
%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
|
* Tue Feb 21 2012 Josh Boyer <jwboyer@redhat.com> - 3.3.0-0.rc4.git1.2
|
||||||
- Enable rtl8712 driver (rhbz 699618)
|
- Enable rtl8712 driver (rhbz 699618)
|
||||||
- Linux 3.3-rc4-git1 (upstream 27e74da9800289e69ba907777df1e2085231eff7)
|
- Linux 3.3-rc4-git1 (upstream 27e74da9800289e69ba907777df1e2085231eff7)
|
||||||
|
Loading…
Reference in New Issue
Block a user