[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

mouseemu on powerbook5,8



Hi all,

You may recall I experienced problems with mouseemu on my Oct. 2005
AlBook. On initial boot, mouseemu eats all CPU and refuses to work.

Well, I looked a bit into the problem and found the cause. But let's
start with the problem:

Problem:
--------

On intial boot, reliably, mouseemu eats all CPU and stays like that
until stopped. A restart makes it work again (sometimes needs a second
try to actually start).

Reason:
-------

Here are the files opened by mouseemu on intial boot, before Bluetooth
starts:

roo:~# lsof |grep mouseemu
[...]
mouseemu  3560        root    3r      CHR      13,64               2525 /dev/input/event0
mouseemu  3560        root    4r      CHR      13,65               2537 /dev/input/event1
mouseemu  3560        root    5r      CHR      13,66               2549 /dev/input/event2
mouseemu  3560        root    6u      CHR     10,223               8986 /dev/input/uinput
mouseemu  3560        root    7u      CHR     10,223               8986 /dev/input/uinput

What these correspond to:

roo:~# for i in `ls -d /sys/class/input/input*`; do echo "$i: `cat $i/name`"; ls -d $i/event*; done
/sys/class/input/input0: HID 05ac:1000
/sys/class/input/input0/event0
/sys/class/input/input1: HID 05ac:1000
/sys/class/input/input1/event1
/sys/class/input/input2: Apple Computer Apple Internal Keyboard / Trackpad
/sys/class/input/input2/event2

In fact, event0 and event1 correspond to the internal Bluetooth dongle,
which is still configured as an HID device at this time.

However, as part of the Bluetooth startup, it is switched to HCI mode,
which produces this in dmesg:

usb 2-2: usbfs: USBDEVFS_CONTROL failed cmd hid2hci rqt 64 rq 0 len 0 ret -110
usb 2-2: USB disconnect, address 2
drivers/usb/input/hid-core.c: can't resubmit intr, 0001:10:15.0-2/input1, status -19
usb 2-2: new full speed USB device using ohci_hcd and address 3

Judging by the working Bluetooth, the switch to HCI seems to work, but
there are some logs. Most notably, the USB device
disconnects/reconnects. This of course makes the two event files linked
to the HID personality of the Bluetooth dongle disappear. That in return
makes mouseemu eat the CPU, because it sits in a tight select loop, as
shown by this strace output:

select(6, [3 4 5], NULL, NULL, {1, 0})  = 2 (in [3 4], left {1, 0})
read(3, 0x7fe8d940, 16)                 = -1 ENODEV (No such device)
read(4, 0x7fe8d930, 16)                 = -1 ENODEV (No such device)
..
etc. ad infinitum

So obviously FD 3 and 4 no longer map to an existing device. Those were
(see lsof output above) event0 and event1.

Solution
--------

mouseemu needs to handle disappearing event devices gracefully.


Does this seem OK?

If yes, I'll file a bug against mouseemu. Of course, one could also
start mouseemu after bluetooth. But I'm not sure what would happen if
for instance a Bluetooth mouse is added after starting mouseemu (would
it work?) or disconnected (would mouseemu produce the same problem), or
the same with a keyboard (since I think it's keyboards mouseemu is
interested in, to "catch" emulation button events).

So it seems to me that mouseemu needs to be tolerant to changing
devices, both in working as expected with new ones, and adapting to
removed existing ones.

Comments?

Cheers

Michel

-------------------------------------------------------------------------
Michel Lanners                 |  " Read Philosophy.  Study Art.
23, Rue Paul Henkes            |    Ask Questions.  Make Mistakes.
L-1710 Luxembourg              |
email   mlan@cpu.lu            |
http://www.cpu.lu/~mlan        |                     Learn Always. "



Reply to: