Skip to contentSkip to conversation

Bluetooth input fixes for stable

DISCUSSION Brian Rogers 2 participants 2 messages Oct 13, 2009 – Oct 15, 2009 2 messages not in the archive Bluetooth drivers

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

A message that is not in the archive (sent off-list or not yet received): [email protected]

#2 lore raw
Quoted 8 lines · Tim Gardner
Quoted 6 lines · Brian Rogers

For Karmic's kernel, I recommend the following cherry-picks from upstream:

364f63519d94442ed373ac7da79033c8282df46a
9eba32b86d17ef87131fa0bce43c614904ab5781
edad63886993d18ab800c49f6587a93432ef8b35

Quoted 8 lines
Quoted 4 lines

They ensure Bluetooth input devices such as keyboards and mice are removed completely and in proper order when they disconnect, so that HAL sees the removal and relays the info to X. Without this, disconnected Bluetooth devices are left in X, and duplicates appear on each reconnection until the input device limit is hit. Then no newly connected input devices will work.

Brian

These look suitable for 2.6.31 stable. Have you sent them to [email protected]?

Actually, I hadn't sent these to stable yet, but that's a good idea. CCing relevant parties.

It's not actually a regression (or at least not a recent one) since the stale input device problem has existed as far back as I can remember, but these commits do 'fix a real bug that bothers people', as the guideline states, so I guess it's appropriate for stable.

Commit messages below:

commit 364f63519d94442ed373ac7da79033c8282df46a

Author: Marcel Holtmann <[email protected]>
Date:   Sat Aug 22 14:15:53 2009 -0700

Bluetooth: Disconnect HIDRAW devices on disconnect

Currently the HID subsystem will create HIDRAW devices for the transport driver, but it will not disconnect them. Until the HID subsytem gets fixed, ensure that HIDRAW and HIDDEV devices are disconnected when the Bluetooth HID device gets removed.

Based on a patch from Brian Rogers <[email protected]>

commit 9eba32b86d17ef87131fa0bce43c614904ab5781

Author: Marcel Holtmann <[email protected]>
Date:   Sat Aug 22 14:19:26 2009 -0700

Bluetooth: Add extra device reference counting for connections

The device model itself has no real usable reference counting at the moment and this causes problems if parents are deleted before their children. The device model itself handles the memory details of this correctly, but the uevent order is not consistent. This causes various problems for systems like HAL or even X.

So until device_put() does a proper cleanup, the device for Bluetooth connection will be protected with an extra reference counting to ensure the correct order of uevents when connections are terminated.

This is not an automatic feature. Higher Bluetooth layers like HIDP or BNEP should grab this new reference to ensure that their uevents are send before the ones from the parent device.

Based on a report by Brian Rogers <[email protected]>

commit edad63886993d18ab800c49f6587a93432ef8b35

Author: Marcel Holtmann <[email protected]>
Date:   Sat Aug 22 14:22:15 2009 -0700

Bluetooth: Let HIDP grab the device reference for connections

The core exports the hci_conn_hold_device() and hci_conn_put_device() functions for device reference of connections. Use this to ensure that the uevents from the parent are send after the child ones.

Based on a report by Brian Rogers <[email protected]>

#3 lore raw
Quoted 78 lines · Brian Rogers
Quoted 15 lines · Tim Gardner
Quoted 13 lines · Brian Rogers

For Karmic's kernel, I recommend the following cherry-picks from upstream:

364f63519d94442ed373ac7da79033c8282df46a
9eba32b86d17ef87131fa0bce43c614904ab5781
edad63886993d18ab800c49f6587a93432ef8b35

They ensure Bluetooth input devices such as keyboards and mice are removed completely and in proper order when they disconnect, so that HAL sees the removal and relays the info to X. Without this, disconnected Bluetooth devices are left in X, and duplicates appear on each reconnection until the input device limit is hit. Then no newly connected input devices will work.

Quoted 6 lines
Quoted 2 lines

Brian

These look suitable for 2.6.31 stable. Have you sent them to [email protected]?

Actually, I hadn't sent these to stable yet, but that's a good idea. CCing relevant parties.

It's not actually a regression (or at least not a recent one) since the stale input device problem has existed as far back as I can remember, but these commits do 'fix a real bug that bothers people', as the guideline states, so I guess it's appropriate for stable.

Commit messages below:

commit 364f63519d94442ed373ac7da79033c8282df46a

Author: Marcel Holtmann <[email protected]>
Date:   Sat Aug 22 14:15:53 2009 -0700

Bluetooth: Disconnect HIDRAW devices on disconnect

Currently the HID subsystem will create HIDRAW devices for the transport driver, but it will not disconnect them. Until the HID subsytem gets fixed, ensure that HIDRAW and HIDDEV devices are disconnected when the Bluetooth HID device gets removed.

Based on a patch from Brian Rogers <[email protected]>

commit 9eba32b86d17ef87131fa0bce43c614904ab5781

Author: Marcel Holtmann <[email protected]>
Date:   Sat Aug 22 14:19:26 2009 -0700

Bluetooth: Add extra device reference counting for connections

The device model itself has no real usable reference counting at the moment and this causes problems if parents are deleted before their children. The device model itself handles the memory details of this correctly, but the uevent order is not consistent. This causes various problems for systems like HAL or even X.

So until device_put() does a proper cleanup, the device for Bluetooth connection will be protected with an extra reference counting to ensure the correct order of uevents when connections are terminated.

This is not an automatic feature. Higher Bluetooth layers like HIDP or BNEP should grab this new reference to ensure that their uevents are send before the ones from the parent device.

Based on a report by Brian Rogers <[email protected]>

commit edad63886993d18ab800c49f6587a93432ef8b35

Author: Marcel Holtmann <[email protected]>
Date:   Sat Aug 22 14:22:15 2009 -0700

Bluetooth: Let HIDP grab the device reference for connections

Quoted 7 lines

The core exports the hci_conn_hold_device() and hci_conn_put_device() functions for device reference of connections. Use this to ensure that the uevents from the parent are send after the child ones.

Based on a report by Brian Rogers <[email protected]>

All queued up now.

thanks,

greg k-h