Hi,
Zhang, Zhenhua wrote:
> Sometimes, Udev device 'remove' event could not report correct
> parent node of current udev_device. Current code replies on
> the devpath attached on the parent node to find modem and then
> remove it.
>
> This fix is to change the way to store the devpath info into a
> hashtable. So that we search hashtable to get devpath and
> remove the modem.
> ---
It's a proposed patch to fix Meego bug #395 [1].
oFono relies on udev to report device remove event. The devpath info of the
modem is stored in the parent node of tty port. In below case, we try to find
this parent node of /dev/ttyACM0. The expected path of node is ".../usb1/1-4",
which is modem device itself. On Netbook, however, it returns ".../usb1"
sometimes. In such case, we could not find the correct devpath and modem so
that modem was never removed.
My idea is to use a hashtable to store the mapping between tty path and modem
path. So that we could find the modem path without depending on
udev_device_get_parent() in remove_modem.
Wrong log is listed below. The expected path is
'/devices/pci0000:00/0000:00:1d.7/usb1/1-4/', but it returns
'.../0000:00:1d.7/usb1', which is Linux USB host controller.
Wrong log 1:
remove_modem() device 0x9223820
path #0 /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.1/tty/ttyACM0
path #1 /devices/pci0000:00/0000:00:1d.7/usb1
path #2 /devices/pci0000:00/0000:00:1d.7/usb1
path #3 /devices/pci0000:00/0000:00:1d.7
path #4 /devices/pci0000:00
remove_modem() device 0x9222628
path #0 /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.3/tty/ttyACM1
path #1 /devices/pci0000:00/0000:00:1d.7/usb1
path #2 /devices/pci0000:00/0000:00:1d.7/usb1
path #3 /devices/pci0000:00/0000:00:1d.7
path #4 /devices/pci0000:00
remove_modem() device 0x92233a8
path #0 /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.7/net/wwan0
path #1 /devices/pci0000:00/0000:00:1d.7/usb1
path #2 /devices/pci0000:00/0000:00:1d.7/usb1
path #3 /devices/pci0000:00/0000:00:1d.7
path #4 /devices/pci0000:00
remove_modem() device 0x9224520
path #0 /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.9/tty/ttyACM2
path #1 /devices/pci0000:00/0000:00:1d.7/usb1
path #2 /devices/pci0000:00/0000:00:1d.7/usb1
path #3 /devices/pci0000:00/0000:00:1d.7
path #4 /devices/pci0000:00
Wrong log 2:
remove_modem() device 0x9226398
path #0 /1-4:1.1/tty/ttyACM0
remove_modem() device 0x9226398
path #0 /1-4:1.3/tty/ttyACM1
remove_modem() device 0x9226398
path #0 /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.9/tty/ttyACM2
path #1 /devices/pci0000:00/0000:00:1d.7/usb1
path #2 /devices/pci0000:00/0000:00:1d.7/usb1
path #3 /devices/pci0000:00/0000:00:1d.7
path #4 /devices/pci0000:00
remove_modem() device 0x9224880
path #0 /devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.7/net/wwan0
path #1 /devices/pci0000:00/0000:00:1d.7/usb1
path #2 /devices/pci0000:00/0000:00:1d.7/usb1
path #3 /devices/pci0000:00/0000:00:1d.7
path #4 /devices/pci0000:00
[1] http://bugs.meego.com/show_bug.cgi?id=395
Regards,
Zhenhua
----- Plug a USB dangle into netbook ----
ofonod[1829]: plugins/udev.c:add_modem() device 0x9222e78 -> udev 0x9220ec8
ofonod[1829]: plugins/udev.c:add_modem() add path
/devices/pci0000:00/0000:00:1d.7/usb1/1-4
ofonod[1829]: src/modem.c:ofono_modem_create() name: 3558620217367190, type: mbm
ofonod[1829]: src/modem.c:set_modem_property() modem 0x92236b8 property Path
ofonod[1829]: src/modem.c:set_modem_property() modem 0x92236b8 property
Registered
ofonod[1829]: plugins/udev.c:add_mbm() desc: Dell Wireless 5530 HSPA Mobile
Broadband Minicard Modem
ofonod[1829]: src/modem.c:get_modem_property() modem 0x92236b8 property
Registered
ofonod[1829]: src/modem.c:get_modem_property() modem 0x92236b8 property
ModemDevice
ofonod[1829]: src/modem.c:set_modem_property() modem 0x92236b8 property
ModemDevice
ofonod[1829]: src/modem.c:get_modem_property() modem 0x92236b8 property
ModemDevice
ofonod[1829]: src/modem.c:get_modem_property() modem 0x92236b8 property
NetworkInterface
ofonod[1829]: src/modem.c:get_modem_property() modem 0x92236b8 property Path
ofonod[1829]: plugins/udev.c:add_mbm() desc: Dell Wireless 5530 HSPA Mobile
Broadband Minicard NetworkAdapter
ofonod[1829]: src/modem.c:get_modem_property() modem 0x92236b8 property
Registered
ofonod[1829]: src/modem.c:set_modem_property() modem 0x92236b8 property
NetworkInterface
ofonod[1829]: src/modem.c:get_modem_property() modem 0x92236b8 property
ModemDevice
ofonod[1829]: src/modem.c:get_modem_property() modem 0x92236b8 property
NetworkInterface
ofonod[1829]: src/modem.c:set_modem_property() modem 0x92236b8 property
Registered
ofonod[1829]: src/modem.c:unregister_property() property 0x9223d10
ofonod[1829]: plugins/mbm.c:mbm_probe() 0x92236b8
ofonod[1829]: plugins/udev.c:add_mbm() 0x9222e78
/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.7/net/wwan0
ofonod[1829]: plugins/udev.c:add_mbm() parent path
/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.7
ofonod[1829]: src/modem.c:get_modem_property() modem 0x92236b8 property Path
ofonod[1829]: plugins/udev.c:add_mbm() desc: Dell Wireless 5530 HSPA Mobile
Broadband Minicard GPS Port
ofonod[1829]: src/modem.c:get_modem_property() modem 0x92236b8 property
Registered
ofonod[1829]: src/modem.c:get_modem_property() modem 0x92236b8 property Path
ofonod[1829]: plugins/udev.c:add_mbm() desc: Dell Wireless 5530 HSPA Mobile
Broadband Minicard Modem 2
ofonod[1829]: src/modem.c:get_modem_property() modem 0x92236b8 property
Registered
ofonod[1829]: plugins/mbm.c:mbm_enable() 0x92236b8
ofonod[1829]: src/modem.c:get_modem_property() modem 0x92236b8 property
ModemDevice
ofonod[1829]: src/modem.c:get_modem_property() modem 0x92236b8 property
DataDevice
ofonod[1829]: plugins/mbm.c:mbm_enable() /dev/ttyACM0, (null)
----- Unplug the USB dangle out, #1 is xxx/usb1, expected path is xxx/usb1/1-4
----
ofonod[1829]: plugins/udev.c:remove_modem() device 0x9223820 -> udev 0x9220ec8
ofonod[1829]: plugins/udev.c:print_path() #0
/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.1/tty/ttyACM0
ofonod[1829]: plugins/udev.c:print_path() #1
/devices/pci0000:00/0000:00:1d.7/usb1
ofonod[1829]: plugins/udev.c:print_path() #2
/devices/pci0000:00/0000:00:1d.7/usb1
ofonod[1829]: plugins/udev.c:print_path() #3 /devices/pci0000:00/0000:00:1d.7
ofonod[1829]: plugins/udev.c:print_path() #4 /devices/pci0000:00
ofonod[1829]: plugins/udev.c:remove_modem() device 0x9222628 -> udev 0x9220ec8
ofonod[1829]: plugins/udev.c:print_path() #0
/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.3/tty/ttyACM1
ofonod[1829]: plugins/udev.c:print_path() #1
/devices/pci0000:00/0000:00:1d.7/usb1
ofonod[1829]: plugins/udev.c:print_path() #2
/devices/pci0000:00/0000:00:1d.7/usb1
ofonod[1829]: plugins/udev.c:print_path() #3 /devices/pci0000:00/0000:00:1d.7
ofonod[1829]: plugins/udev.c:print_path() #4 /devices/pci0000:00
ofonod[1829]: plugins/udev.c:remove_modem() device 0x92233a8 -> udev 0x9220ec8
ofonod[1829]: plugins/udev.c:print_path() #0
/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.7/net/wwan0
ofonod[1829]: plugins/udev.c:print_path() #1
/devices/pci0000:00/0000:00:1d.7/usb1
ofonod[1829]: plugins/udev.c:print_path() #2
/devices/pci0000:00/0000:00:1d.7/usb1
ofonod[1829]: plugins/udev.c:print_path() #3 /devices/pci0000:00/0000:00:1d.7
ofonod[1829]: plugins/udev.c:print_path() #4 /devices/pci0000:00
ofonod[1829]: plugins/udev.c:remove_modem() device 0x9224520 -> udev 0x9220ec8
ofonod[1829]: plugins/udev.c:print_path() #0
/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.9/tty/ttyACM2
ofonod[1829]: plugins/udev.c:print_path() #1
/devices/pci0000:00/0000:00:1d.7/usb1
ofonod[1829]: plugins/udev.c:print_path() #2
/devices/pci0000:00/0000:00:1d.7/usb1
ofonod[1829]: plugins/udev.c:print_path() #3 /devices/pci0000:00/0000:00:1d.7
ofonod[1829]: plugins/udev.c:print_path() #4 /devices/pci0000:00
----- Unplug the USB dangle out, sometime the path missed usb path prefix ----
ofonod[1829]: plugins/udev.c:remove_modem() device 0x9226398 -> udev 0x9220ec8
ofonod[1829]: plugins/udev.c:print_path() #0 /1-4:1.1/tty/ttyACM0
ofonod[1829]: plugins/udev.c:remove_modem() device 0x9226398 -> udev 0x9220ec8
ofonod[1829]: plugins/udev.c:print_path() #0 /1-4:1.3/tty/ttyACM1
ofonod[1829]: plugins/udev.c:remove_modem() device 0x9226398 -> udev 0x9220ec8
ofonod[1829]: plugins/udev.c:print_path() #0
/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.9/tty/ttyACM2
ofonod[1829]: plugins/udev.c:print_path() #1
/devices/pci0000:00/0000:00:1d.7/usb1
ofonod[1829]: plugins/udev.c:print_path() #2
/devices/pci0000:00/0000:00:1d.7/usb1
ofonod[1829]: plugins/udev.c:print_path() #3 /devices/pci0000:00/0000:00:1d.7
ofonod[1829]: plugins/udev.c:print_path() #4 /devices/pci0000:00
ofonod[1829]: plugins/udev.c:remove_modem() device 0x9224880 -> udev 0x9220ec8
ofonod[1829]: plugins/udev.c:print_path() #0
/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.7/net/wwan0
ofonod[1829]: plugins/udev.c:print_path() #1
/devices/pci0000:00/0000:00:1d.7/usb1
ofonod[1829]: plugins/udev.c:print_path() #2
/devices/pci0000:00/0000:00:1d.7/usb1
ofonod[1829]: plugins/udev.c:print_path() #3 /devices/pci0000:00/0000:00:1d.7
ofonod[1829]: plugins/udev.c:print_path() #4 /devices/pci0000:00
----- Unplug the USB dangle out, expected result ----
ofonod[1829]: plugins/udev.c:remove_modem() device 0x92237e0 -> udev 0x9220ec8
ofonod[1829]: plugins/udev.c:print_path() #0
/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.1/tty/ttyACM0
ofonod[1829]: plugins/udev.c:print_path() #1
/devices/pci0000:00/0000:00:1d.7/usb1/1-4
ofonod[1829]: src/modem.c:get_modem_property() modem 0x92236b8 property Path
ofonod[1829]: src/modem.c:ofono_modem_remove() 0x92236b8
ofonod[1829]: plugins/mbm.c:mbm_remove() 0x92236b8
ofonod[1829]: src/modem.c:unregister_property() property 0x9223db8
ofonod[1829]: src/modem.c:unregister_property() property 0x9223640
ofonod[1829]: src/modem.c:unregister_property() property 0x9223678
ofonod[1829]: src/modem.c:unregister_property() property 0x9223798
ofonod[1829]: plugins/udev.c:remove_modem() device 0x9223578 -> udev 0x9220ec8
ofonod[1829]: plugins/udev.c:print_path() #0
/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.3/tty/ttyACM1
ofonod[1829]: plugins/udev.c:print_path() #1
/devices/pci0000:00/0000:00:1d.7/usb1/1-4
ofonod[1829]: plugins/udev.c:print_path() #2
/devices/pci0000:00/0000:00:1d.7/usb1/1-4
ofonod[1829]: plugins/udev.c:print_path() #3
/devices/pci0000:00/0000:00:1d.7/usb1
ofonod[1829]: plugins/udev.c:print_path() #4 /devices/pci0000:00/0000:00:1d.7
ofonod[1829]: plugins/udev.c:remove_modem() device 0x92236b8 -> udev 0x9220ec8
ofonod[1829]: plugins/udev.c:print_path() #0
/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.9/tty/ttyACM2
ofonod[1829]: plugins/udev.c:print_path() #1
/devices/pci0000:00/0000:00:1d.7/usb1
ofonod[1829]: plugins/udev.c:print_path() #2
/devices/pci0000:00/0000:00:1d.7/usb1
ofonod[1829]: plugins/udev.c:print_path() #3 /devices/pci0000:00/0000:00:1d.7
ofonod[1829]: plugins/udev.c:print_path() #4 /devices/pci0000:00
ofonod[1829]: plugins/udev.c:remove_modem() device 0x92231c8 -> udev 0x9220ec8
ofonod[1829]: plugins/udev.c:print_path() #0
/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.7/net/wwan0
ofonod[1829]: plugins/udev.c:print_path() #1
/devices/pci0000:00/0000:00:1d.7/usb1
ofonod[1829]: plugins/udev.c:print_path() #2
/devices/pci0000:00/0000:00:1d.7/usb1
ofonod[1829]: plugins/udev.c:print_path() #3 /devices/pci0000:00/0000:00:1d.7
ofonod[1829]: plugins/udev.c:print_path() #4 /devices/pci0000:00
_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono