aboutsummaryrefslogtreecommitdiff
path: root/net/bluetooth/hidp/core.c
diff options
context:
space:
mode:
authorKevin Hilman <khilman@linaro.org>2015-12-10 07:19:16 -0800
committerKevin Hilman <khilman@linaro.org>2015-12-10 07:19:16 -0800
commitd235b7b42ab59e2e616082a0735b3bcc76685c7b (patch)
tree2b2275cd21df35e47b2ce4be5ccdce2d6d5e5fae /net/bluetooth/hidp/core.c
parentde862fe2cd3432b1d1acb0b570a33dbdd02bf4a1 (diff)
parent03ed106ff4c200d01f3c72f71fa9c5b18da07d9b (diff)
Merge tag 'v3.10.94' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into linux-linaro-lsk-v3.10lsk-v3.10-16.01lsk-v3.10-15.12
This is the 3.10.94 stable release # gpg: Signature made Wed Dec 9 10:43:26 2015 PST using RSA key ID 6092693E # gpg: checking the trustdb # gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model # gpg: depth: 0 valid: 1 signed: 72 trust: 0-, 0q, 0n, 0m, 0f, 1u # gpg: depth: 1 valid: 72 signed: 112 trust: 63-, 1q, 0n, 1m, 7f, 0u # gpg: depth: 2 valid: 49 signed: 64 trust: 49-, 0q, 0n, 0m, 0f, 0u # gpg: next trustdb check due at 2015-12-15 # gpg: Good signature from "Greg Kroah-Hartman (Linux kernel stable release signing key) <greg@kroah.com>" * tag 'v3.10.94' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable: (32 commits) Linux 3.10.94 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: musb: core: fix order of arguments to ulpi write callback usblp: do not set TASK_INTERRUPTIBLE before lock arm64: Fix compat register mappings can: sja1000: clear interrupts on start Bluetooth: hidp: fix device disconnect on idle timeout staging: rtl8712: Add device ID for Sitecom WLA2100 mwifiex: fix mwifiex_rdeeprom_read() net: mvneta: Fix CPU_MAP registers initialisation mac80211: fix driver RSSI event calculations x86/cpu: Fix SMAP check in PVOPS environments x86/cpu: Call verify_cpu() after having entered long mode too x86/setup: Fix low identity map for >= 2GB kernel range x86/setup: Extend low identity map to cover whole kernel range ARM: orion: Fix DSA platform device after mvmdio conversion ...
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 de030f50f72b..c60563394cd1 100644
--- a/net/bluetooth/hidp/core.c
+++ b/net/bluetooth/hidp/core.c
@@ -396,6 +396,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);
}