Ignore:
File:
1 edited

Legend:

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

    r45059d6b rd0dd7b5  
    548548
    549549        fibril_mutex_lock(&driver->driver_mutex);
     550       
     551        async_exch_t *exch = async_exchange_begin(driver->sess);
     552        async_sess_t *sess = async_connect_me_to(EXCHANGE_SERIALIZE, exch,
     553            DRIVER_DEVMAN, 0, 0);
     554        async_exchange_end(exch);
     555
     556        if (!sess) {
     557                fibril_mutex_unlock(&driver->driver_mutex);
     558                return;
     559        }
    550560
    551561        /*
     
    573583                fibril_mutex_unlock(&driver->driver_mutex);
    574584
    575                 add_device(driver, dev, tree);
     585                add_device(sess, driver, dev, tree);
    576586
    577587                /*
     
    593603                link = driver->devices.head.next;
    594604        }
     605
     606        async_hangup(sess);
    595607
    596608        /*
     
    706718 * @param node          The device's node in the device tree.
    707719 */
    708 void add_device(driver_t *drv, dev_node_t *dev, dev_tree_t *tree)
     720void add_device(async_sess_t *sess, driver_t *drv, dev_node_t *dev,
     721    dev_tree_t *tree)
    709722{
    710723        /*
     
    723736        }
    724737       
    725         async_exch_t *exch = async_exchange_begin(drv->sess);
     738        async_exch_t *exch = async_exchange_begin(sess);
    726739       
    727740        ipc_call_t answer;
     
    793806        fibril_mutex_unlock(&drv->driver_mutex);
    794807
    795         /* Notify the driver about the new device. */
    796         if (is_running)
    797                 add_device(drv, dev, tree);
     808        if (is_running) {
     809                /* Notify the driver about the new device. */
     810                async_exch_t *exch = async_exchange_begin(drv->sess);
     811                async_sess_t *sess = async_connect_me_to(EXCHANGE_SERIALIZE, exch,
     812                    DRIVER_DEVMAN, 0, 0);
     813                async_exchange_end(exch);
     814               
     815                if (sess) {
     816                        add_device(sess, drv, dev, tree);
     817                        async_hangup(sess);
     818                }
     819        }
    798820       
    799821        return true;
     
    897919        return dev;
    898920}
    899 
    900 /** Get list of device functions. */
    901 int dev_get_functions(dev_tree_t *tree, dev_node_t *dev,
    902     devman_handle_t *hdl_buf, size_t buf_size, size_t *act_size)
    903 {
    904         size_t act_cnt;
    905         size_t buf_cnt;
    906 
    907         assert(fibril_rwlock_is_locked(&tree->rwlock));
    908 
    909         buf_cnt = buf_size / sizeof(devman_handle_t);
    910 
    911         act_cnt = list_count(&dev->functions);
    912         *act_size = act_cnt * sizeof(devman_handle_t);
    913 
    914         if (buf_size % sizeof(devman_handle_t) != 0)
    915                 return EINVAL;
    916 
    917         size_t pos = 0;
    918         list_foreach(dev->functions, item) {
    919                 fun_node_t *fun =
    920                     list_get_instance(item, fun_node_t, dev_functions);
    921 
    922                 if (pos < buf_cnt)
    923                         hdl_buf[pos] = fun->handle;
    924                 pos++;
    925         }
    926 
    927         return EOK;
    928 }
    929 
    930921
    931922/* Function nodes */
     
    11541145        char *rel_path = path;
    11551146        char *next_path_elem = NULL;
    1156         bool cont = (rel_path[1] != '\0');
     1147        bool cont = true;
    11571148       
    11581149        while (cont && fun != NULL) {
Note: See TracChangeset for help on using the changeset viewer.