Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changes between Version 2 and Version 3 of Ticket #700, comment 2


Ignore:
Timestamp:
2017-11-03T18:43:43Z (3 years ago)
Author:
Jakub Jermář
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #700, comment 2

    v2 v3  
    1 From the ipc log, I have partially reconstructed the wait graph of the system.
     1From the ipc log, I have reconstructed the wait graph.
    22
    33  1. `devman` sends DRIVER_DEV_ADD(1024) to `ps2mouse`
    44  1. `ps2mouse` sends DEVMAN_ADD_FUNCTION(1025) to `devman`
    55  1. `devman` grabs device_tree.rwlock in fun_online()
    6   1. `devman` enters loc_register_tree_function() and loc_service_register(); sends LOC_SERVICE_REGISTER(1027) to `locsrv` followed by IPC_M_DATA_WRITE(7)
    7   1. `locsrv` for some reason does not reply to the LOC_SERVICE_REGISTER request; since there is no IPC on which LOC_SERVICE_REGISTER depends directly, this could mean that the request in `locsrv` is blocking on a synchronization primitive
    8   1. `locsrv` itself has 4 (!) active calls (method=1024) to ethip; I think these are LOC_EVENT_CAT_CHANGE(1024) messages sent one after another, probably by drivers that added themselves into a category, but we don't see them now because event change notification happens after enlisting in a category is completed.
    9   1. `ethip` is itself not answering any of the four LOC_EVENT_CAT_CHANGE calls from `locsrv` and sends NIC_SET_STATE(NIC_STATE_ACTIVE) to `e1k`; it blocks in ethip_nic_check_new()->ethip_nic_open()->nic_set_state() and holds ethip_discovery_lock to prevent other invocations of ethip_nic_check_new()
     6  1. `devman` enters loc_register_tree_function() and loc_service_register(); sends LOC_SERVICE_REGISTER(1027) to `locsrv` followed by IPC_M_DATA_WRITE(7); the connection to `locsrv` is "serialized" and so it uses only a single phone
     7  1. `locsrv` does not reply to the LOC_SERVICE_REGISTER request because the fibril which is handling connections from `devman` is itself blocked
     8  1. `locsrv` itself has 4 active LOC_EVENT_CAT_CHANGE(1024) calls to `ethip`; these had all been sent one after another by drivers that already added themselves into a category, but we don't see them now because event change notifications happen after enlisting in a category is completed (ie. after the request is answered).
     9  1. `ethip` is itself not answering any of the four LOC_EVENT_CAT_CHANGE calls from `locsrv` and blocks on NIC_SET_STATE(NIC_STATE_ACTIVE) to `e1k`
    1010  1. `e1k` sends HW_RES_ENABLE_INTERRUPT for IRQ 11 to `pciintel`
    1111  1. `pciintel` sends IPC_CONNECT_ME_TO(2) to `ns` which in turn forwards it to `devman`