aboutsummaryrefslogtreecommitdiff
path: root/net/bluetooth/hidp/core.c
diff options
context:
space:
mode:
authorKevin Hilman <khilman@linaro.org>2015-12-10 08:01:10 -0800
committerKevin Hilman <khilman@linaro.org>2015-12-10 08:01:10 -0800
commit8eec3ec7b6576a80fbeda89beed8f9f667f9dc7b (patch)
treed6acbc72ce4f7434374ba895f88fcfcdc85fa46a /net/bluetooth/hidp/core.c
parent6844488aaa6b23d45106c9c3c3ba2f2ee4a612f9 (diff)
parentcb371265c2f1a0dd0cee03bd7fff413d671c53f0 (diff)
Merge tag 'v4.1.14' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into linux-linaro-lsk-v4.1
This is the 4.1.14 stable release # gpg: Signature made Wed Dec 9 11:03:49 2015 PST using RSA key ID 6092693E # gpg: Good signature from "Greg Kroah-Hartman (Linux kernel stable release signing key) <greg@kroah.com>" * tag 'v4.1.14' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable: (97 commits) Linux 4.1.14 netlink: Add missing goto statement to netlink_insert KVM: s390: enable SIMD only when no VCPUs were created staging/lustre: use jiffies for lp_last_query times xhci: Workaround to get Intel xHCI reset working more reliably tty: Fix tty_send_xchar() lock order inversion tty: audit: Fix audit source ALSA: usb-audio: work around CH345 input SysEx corruption ALSA: usb-audio: prevent CH345 multiport output SysEx corruption ALSA: usb-audio: add packet size quirk for the Medeli DD305 USB: option: add XS Stick W100-2 from 4G Systems USB: serial: option: add support for Novatel MiFi USB620L USB: ti_usb_3410_5052: Add Honeywell HGI80 ID usb: musb: core: fix order of arguments to ulpi write callback USB: qcserial: Fix support for HP lt4112 LTE/HSPA+ Gobi 4G Modem USB: qcserial: Add support for Quectel EC20 Mini PCIe module usblp: do not set TASK_INTERRUPTIBLE before lock usb: ehci-orion: fix probe for !GENERIC_PHY ALSA: usb: Add native DSD support for Aune X1S usb: chipidea: imx: refine clock operations to adapt for all platforms ...
Diffstat (limited to 'net/bluetooth/hidp/core.c')
-rw-r--r--net/bluetooth/hidp/core.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
index 9070dfd6b4ad..4a0015e16d4f 100644
--- a/net/bluetooth/hidp/core.c
+++ b/net/bluetooth/hidp/core.c
@@ -401,6 +401,20 @@ static void hidp_idle_timeout(unsigned long arg)
{
struct hidp_session *session = (struct hidp_session *) arg;
+ /* The HIDP user-space API only contains calls to add and remove
+ * devices. There is no way to forward events of any kind. Therefore,
+ * we have to forcefully disconnect a device on idle-timeouts. This is
+ * unfortunate and weird API design, but it is spec-compliant and
+ * required for backwards-compatibility. Hence, on idle-timeout, we
+ * signal driver-detach events, so poll() will be woken up with an
+ * error-condition on both sockets.
+ */
+
+ session->intr_sock->sk->sk_err = EUNATCH;
+ session->ctrl_sock->sk->sk_err = EUNATCH;
+ wake_up_interruptible(sk_sleep(session->intr_sock->sk));
+ wake_up_interruptible(sk_sleep(session->ctrl_sock->sk));
+
hidp_session_terminate(session);
}