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

Reply via email to