Changeset 957cfa58 in mainline for uspace/srv/devman/main.c


Ignore:
Timestamp:
2010-05-26T20:25:43Z (14 years ago)
Author:
Lenka Trochtova <trochtova.lenka@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c9f3b45c
Parents:
d51ee2b
Message:

devman - use hash table to lookup device according to its handle.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/devman/main.c

    rd51ee2b r957cfa58  
    246246static void devman_add_child(ipc_callid_t callid, ipc_call_t *call)
    247247{
    248         // printf(NAME ": devman_add_child\n");
     248        //printf(NAME ": devman_add_child\n");
    249249       
    250250        device_handle_t parent_handle = IPC_GET_ARG1(*call);
    251251        ipcarg_t match_count = IPC_GET_ARG2(*call);
    252        
    253         node_t *parent =  find_dev_node(&device_tree, parent_handle);
     252        dev_tree_t *tree = &device_tree;
     253       
     254        fibril_rwlock_write_lock(&tree->rwlock);
     255        node_t *parent =  find_dev_node_no_lock(&device_tree, parent_handle);
    254256       
    255257        if (NULL == parent) {
     258                fibril_rwlock_write_unlock(&tree->rwlock);
    256259                ipc_answer_0(callid, ENOENT);
    257260                return;
     
    261264        int rc = async_string_receive(&dev_name, DEVMAN_NAME_MAXLEN, NULL);     
    262265        if (EOK != rc) {
     266                fibril_rwlock_write_unlock(&tree->rwlock);
    263267                ipc_answer_0(callid, rc);
    264268                return;
    265269        }
    266         // printf(NAME ": newly added child device's name is '%s'.\n", dev_name);
     270        //printf(NAME ": newly added child device's name is '%s'.\n", dev_name);
    267271       
    268272        node_t *node = create_dev_node();
    269273        if (!insert_dev_node(&device_tree, node, dev_name, parent)) {
     274                fibril_rwlock_write_unlock(&tree->rwlock);
    270275                delete_dev_node(node);
    271276                ipc_answer_0(callid, ENOMEM);
    272277                return;
    273278        }       
     279        fibril_rwlock_write_unlock(&tree->rwlock);
    274280       
    275281        printf(NAME ": devman_add_child %s\n", node->pathname);
     
    281287       
    282288        // try to find suitable driver and assign it to the device     
    283         assign_driver(node, &drivers_list);
     289        assign_driver(node, &drivers_list);     
    284290}
    285291
Note: See TracChangeset for help on using the changeset viewer.