2009-06-24 11:11:32

by Thomas Bächler

[permalink] [raw]
Subject: Bluetooth HID devices not getting properly removed

I am unsure where to put this bug, because it actually manifests inside
HAL. I think the bluetooth hid driver is at fault, because there is an
inconsistency in uevents between USB and bluetooth mice.

So this is what happens: When I add a bluetooth mouse, udev receives
certain uevents, this is an excerpt from udevadm monitor:

KERNEL[1245834026.993304] add
/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/bluetooth/hci0/hci0:11
(bluetooth)
KERNEL[1245834027.252241] add
/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/bluetooth/hci0/hci0:11/0005:046D:B002.0005
(hid)
KERNEL[1245834027.252301] add
/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/bluetooth/hci0/hci0:11/input12
(input)

Pay attention to the input device, it is added with a full device path.
When removing the mouse, this happens:

KERNEL[1245834012.631443] remove
/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/bluetooth/hci0/hci0:11
(bluetooth)
KERNEL[1245834012.632668] remove /hci0:11/input12/mouse2 (input)
KERNEL[1245834012.641797] remove /hci0:11/input12/event8 (input)
KERNEL[1245834012.655447] remove /hci0:11/input12 (input)
KERNEL[1245834012.655502] remove /hci0:11/0005:046D:B002.0004 (hid)

See how the device path of the removed input devices is truncated? When
I do the same with a USB mouse, a full device path is returned each time.

All of this results in hal not removing its logical input device, which
means the number of (non-existent) mice in the hal device tree increases
whenever I disable and re-enable my mouse.

So where do I put this bug? Linux? Bluez? Udev? Hal? My guess is Linux,
as these device paths come from Linux originally and are in fact
inconsistent. This is all tested on 2.6.30, I have no idea if it was the
case on older kernels.

Please CC me on replies.


Attachments:
signature.asc (260.00 B)
OpenPGP digital signature

2009-06-24 11:28:54

by David Woodhouse

[permalink] [raw]
Subject: Re: Bluetooth HID devices not getting properly removed

On Wed, 2009-06-24 at 13:11 +0200, Thomas Bächler wrote:
>
> KERNEL[1245834012.631443] remove
> /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/bluetooth/hci0/hci0:11
> (bluetooth)
> KERNEL[1245834012.632668] remove /hci0:11/input12/mouse2 (input)
> KERNEL[1245834012.641797] remove /hci0:11/input12/event8 (input)
> KERNEL[1245834012.655447] remove /hci0:11/input12 (input)
> KERNEL[1245834012.655502] remove /hci0:11/0005:046D:B002.0004 (hid)
>
> See how the device path of the removed input devices is truncated? When
> I do the same with a USB mouse, a full device path is returned each time.
>
> All of this results in hal not removing its logical input device, which
> means the number of (non-existent) mice in the hal device tree increases
> whenever I disable and re-enable my mouse.
>
> So where do I put this bug? Linux? Bluez? Udev? Hal? My guess is Linux,
> as these device paths come from Linux originally and are in fact
> inconsistent. This is all tested on 2.6.30, I have no idea if it was the
> case on older kernels.

It's in the BlueZ HID code. I pointed it out to Marcel a few months ago
-- it happens when the ACL connection is killed (orphaning the HID
device in sysfs), and the HID device is only killed _later_, so the path
on the removal is wrong.

--
David Woodhouse Open Source Technology Centre
[email protected] Intel Corporation