diff options
author | David S. Miller <davem@davemloft.net> | 2015-10-24 05:13:16 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-10-24 05:13:16 -0700 |
commit | a72c9512bf2bef12c5e66a4d910c4b348fe31d61 (patch) | |
tree | cfce1711f9a5fc1ef0774e9f2e31945600ff15e0 /net/bluetooth/hidp/core.c | |
parent | 379a80a1d048dcacfc2011d5d32e16d5c804b9f4 (diff) | |
parent | 13972adc3240ea8b18b44906b819c622941a64b6 (diff) | |
download | kernel_replicant_linux-a72c9512bf2bef12c5e66a4d910c4b348fe31d61.tar.gz kernel_replicant_linux-a72c9512bf2bef12c5e66a4d910c4b348fe31d61.tar.bz2 kernel_replicant_linux-a72c9512bf2bef12c5e66a4d910c4b348fe31d61.zip |
Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next
Johan Hedberg says:
====================
pull request: bluetooth-next 2015-10-22
Here's probably the last bluetooth-next pull request for 4.4. Among
several other changes it contains the rest of the fixes & cleanups from
the Bluetooth UnplugFest (that didn't need to be hurried to 4.3).
- Refactoring & cleanups to 6lowpan code
- New USB ids for two Atheros controllers and BCM43142A0 from Broadcom
- Fix (quirk) for broken Broadcom BCM2045 controllers
- Support for latest Apple controllers
- Improvements to the vendor diagnostic message support
Please let me know if there are any issues pulling. Thanks.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bluetooth/hidp/core.c')
-rw-r--r-- | net/bluetooth/hidp/core.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c index f1a117f8cad2..0bec4588c3c8 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); } |