Changeset fb7e5a9a in mainline for uspace/srv


Ignore:
Timestamp:
2011-09-06T20:03:31Z (14 years ago)
Author:
Maurizio Lombardi <m.lombardi85@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
038b289, f7d6b30
Parents:
7a46bfe (diff), 7e9fce6 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

merge mainline changes

Location:
uspace/srv
Files:
6 added
10 edited

Legend:

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

    r7a46bfe rfb7e5a9a  
    878878       
    879879        return retval;
    880 
     880}
     881
     882int driver_dev_gone(dev_tree_t *tree, dev_node_t *dev)
     883{
     884        async_exch_t *exch;
     885        sysarg_t retval;
     886        driver_t *drv;
     887        devman_handle_t handle;
     888       
     889        assert(dev != NULL);
     890       
     891        log_msg(LVL_DEBUG, "driver_dev_gone(%p)", dev);
     892       
     893        fibril_rwlock_read_lock(&tree->rwlock);
     894        drv = dev->drv;
     895        handle = dev->handle;
     896        fibril_rwlock_read_unlock(&tree->rwlock);
     897       
     898        exch = async_exchange_begin(drv->sess);
     899        retval = async_req_1_0(exch, DRIVER_DEV_GONE, handle);
     900        async_exchange_end(exch);
     901       
     902        return retval;
    881903}
    882904
  • uspace/srv/devman/devman.h

    r7a46bfe rfb7e5a9a  
    263263extern bool start_driver(driver_t *);
    264264extern int driver_dev_remove(dev_tree_t *, dev_node_t *);
     265extern int driver_dev_gone(dev_tree_t *, dev_node_t *);
    265266extern int driver_fun_online(dev_tree_t *, fun_node_t *);
    266267extern int driver_fun_offline(dev_tree_t *, fun_node_t *);
  • uspace/srv/devman/main.c

    r7a46bfe rfb7e5a9a  
    316316                if (fun->child != NULL) {
    317317                        dev_node_t *dev = fun->child;
     318                        device_state_t dev_state;
    318319                       
    319320                        dev_add_ref(dev);
     321                        dev_state = dev->state;
     322                       
    320323                        fibril_rwlock_write_unlock(&device_tree.rwlock);
    321                        
     324
    322325                        /* If device is owned by driver, ask driver to give it up. */
    323                         if (dev->state == DEVICE_USABLE) {
     326                        if (dev_state == DEVICE_USABLE) {
    324327                                rc = driver_dev_remove(&device_tree, dev);
    325328                                if (rc != EOK) {
     
    333336                        if (!list_empty(&dev->functions)) {
    334337                                fibril_rwlock_read_unlock(&device_tree.rwlock);
     338                                dev_del_ref(dev);
    335339                                return EIO;
    336340                        }
     341                       
    337342                        driver_t *driver = dev->drv;
    338343                        fibril_rwlock_read_unlock(&device_tree.rwlock);
     
    507512        fun_node_t *fun;
    508513        int rc;
    509 
    510         printf("devman_drv_fun_online()\n");
     514       
     515        log_msg(LVL_DEBUG, "devman_drv_fun_online()");
     516       
    511517        fun = find_fun_node(&device_tree, IPC_GET_ARG1(*icall));
    512518        if (fun == NULL) {
     
    526532        rc = online_function(fun);
    527533        if (rc != EOK) {
    528                 printf("devman_drv_fun_online() online_fun->ERROR\n");
    529534                fun_del_ref(fun);
    530535                async_answer_0(iid, (sysarg_t) rc);
     
    533538       
    534539        fun_del_ref(fun);
    535         printf("devman_drv_fun_online() online_fun->OK\n");
    536540       
    537541        async_answer_0(iid, (sysarg_t) EOK);
     
    580584        int rc;
    581585       
    582        
    583586        fun_node_t *fun = find_fun_node(&device_tree, fun_handle);
    584587        if (fun == NULL) {
     
    599602       
    600603        if (fun->ftype == fun_inner) {
    601                 /* Handle possible descendants */
    602                 /* TODO - This is a surprise removal */
     604                /* This is a surprise removal. Handle possible descendants */
    603605                if (fun->child != NULL) {
    604                         log_msg(LVL_WARN, "devman_remove_function(): not handling "
    605                             "descendants\n");
     606                        dev_node_t *dev = fun->child;
     607                        device_state_t dev_state;
     608                        int gone_rc;
     609                       
     610                        dev_add_ref(dev);
     611                        dev_state = dev->state;
     612                       
     613                        fibril_rwlock_write_unlock(&device_tree.rwlock);
     614                       
     615                        /* If device is owned by driver, inform driver it is gone. */
     616                        if (dev_state == DEVICE_USABLE)
     617                                gone_rc = driver_dev_gone(&device_tree, dev);
     618                        else
     619                                gone_rc = EOK;
     620                       
     621                        fibril_rwlock_read_lock(&device_tree.rwlock);
     622                       
     623                        /* Verify that driver succeeded and removed all functions */
     624                        if (gone_rc != EOK || !list_empty(&dev->functions)) {
     625                                log_msg(LVL_ERROR, "Driver did not remove "
     626                                    "functions for device that is gone. "
     627                                    "Device node is now defunct.");
     628                               
     629                                /*
     630                                 * Not much we can do but mark the device
     631                                 * node as having invalid state. This
     632                                 * is a driver bug.
     633                                 */
     634                                dev->state = DEVICE_INVALID;
     635                                fibril_rwlock_read_unlock(&device_tree.rwlock);
     636                                dev_del_ref(dev);
     637                                return;
     638                        }
     639                       
     640                        driver_t *driver = dev->drv;
     641                        fibril_rwlock_read_unlock(&device_tree.rwlock);
     642                       
     643                        if (driver)
     644                                detach_driver(&device_tree, dev);
     645                       
     646                        fibril_rwlock_write_lock(&device_tree.rwlock);
     647                        remove_dev_node(&device_tree, dev);
     648                       
     649                        /* Delete ref created when node was inserted */
     650                        dev_del_ref(dev);
     651                        /* Delete ref created by dev_add_ref(dev) above */
     652                        dev_del_ref(dev);
    606653                }
    607654        } else {
  • uspace/srv/fs/exfat/exfat_ops.c

    r7a46bfe rfb7e5a9a  
    8787static bool exfat_is_directory(fs_node_t *);
    8888static bool exfat_is_file(fs_node_t *node);
    89 static service_id_t exfat_device_get(fs_node_t *node);
     89static service_id_t exfat_service_get(fs_node_t *node);
    9090
    9191/*
     
    898898}
    899899
    900 service_id_t exfat_device_get(fs_node_t *node)
     900service_id_t exfat_service_get(fs_node_t *node)
    901901{
    902902        return 0;
     
    921921        .is_directory = exfat_is_directory,
    922922        .is_file = exfat_is_file,
    923         .device_get = exfat_device_get
     923        .service_get = exfat_service_get
    924924};
    925925
  • uspace/srv/fs/ext2fs/ext2fs_ops.c

    r7a46bfe rfb7e5a9a  
    112112static bool ext2fs_is_directory(fs_node_t *);
    113113static bool ext2fs_is_file(fs_node_t *node);
    114 static service_id_t ext2fs_device_get(fs_node_t *node);
     114static service_id_t ext2fs_service_get(fs_node_t *node);
    115115
    116116/*
     
    557557}
    558558
    559 service_id_t ext2fs_device_get(fs_node_t *fn)
     559service_id_t ext2fs_service_get(fs_node_t *fn)
    560560{
    561561        EXT2FS_DBG("");
     
    581581        .is_directory = ext2fs_is_directory,
    582582        .is_file = ext2fs_is_file,
    583         .device_get = ext2fs_device_get
     583        .service_get = ext2fs_service_get
    584584};
    585585
  • uspace/srv/fs/fat/fat_ops.c

    r7a46bfe rfb7e5a9a  
    9090static bool fat_is_directory(fs_node_t *);
    9191static bool fat_is_file(fs_node_t *node);
    92 static service_id_t fat_device_get(fs_node_t *node);
     92static service_id_t fat_service_get(fs_node_t *node);
    9393
    9494/*
     
    838838}
    839839
    840 service_id_t fat_device_get(fs_node_t *node)
     840service_id_t fat_service_get(fs_node_t *node)
    841841{
    842842        return 0;
     
    860860        .is_directory = fat_is_directory,
    861861        .is_file = fat_is_file,
    862         .device_get = fat_device_get
     862        .service_get = fat_service_get
    863863};
    864864
  • uspace/srv/fs/locfs/locfs_ops.c

    r7a46bfe rfb7e5a9a  
    418418}
    419419
    420 static service_id_t locfs_device_get(fs_node_t *fn)
     420static service_id_t locfs_service_get(fs_node_t *fn)
    421421{
    422422        locfs_node_t *node = (locfs_node_t *) fn->data;
     
    445445        .is_directory = locfs_is_directory,
    446446        .is_file = locfs_is_file,
    447         .device_get = locfs_device_get
     447        .service_get = locfs_service_get
    448448};
    449449
  • uspace/srv/fs/mfs/mfs_ops.c

    r7a46bfe rfb7e5a9a  
    5555static int mfs_has_children(bool *has_children, fs_node_t *fsnode);
    5656static int mfs_root_get(fs_node_t **rfn, service_id_t service_id);
    57 static service_id_t mfs_device_get(fs_node_t *fsnode);
     57static service_id_t mfs_service_get(fs_node_t *fsnode);
    5858static aoff64_t mfs_size_get(fs_node_t *node);
    5959static int mfs_match(fs_node_t **rfn, fs_node_t *pfn, const char *component);
     
    8181        .size_get = mfs_size_get,
    8282        .root_get = mfs_root_get,
    83         .device_get = mfs_device_get,
     83        .service_get = mfs_service_get,
    8484        .is_directory = mfs_is_directory,
    8585        .is_file = mfs_is_file,
     
    325325}
    326326
    327 service_id_t mfs_device_get(fs_node_t *fsnode)
     327service_id_t mfs_service_get(fs_node_t *fsnode)
    328328{
    329329        struct mfs_node *node = fsnode->data;
  • uspace/srv/fs/tmpfs/tmpfs_ops.c

    r7a46bfe rfb7e5a9a  
    114114}
    115115
    116 static service_id_t tmpfs_device_get(fs_node_t *fn)
     116static service_id_t tmpfs_service_get(fs_node_t *fn)
    117117{
    118118        return 0;
     
    136136        .is_directory = tmpfs_is_directory,
    137137        .is_file = tmpfs_is_file,
    138         .device_get = tmpfs_device_get
     138        .service_get = tmpfs_service_get
    139139};
    140140
  • uspace/srv/loc/loc.c

    r7a46bfe rfb7e5a9a  
    12771277        categ_dir_add_cat(&cdir, cat);
    12781278
     1279        cat = category_new("test3");
     1280        categ_dir_add_cat(&cdir, cat);
     1281
    12791282        cat = category_new("usbhc");
    12801283        categ_dir_add_cat(&cdir, cat);
    12811284
     1285        cat = category_new("virt-null");
     1286        categ_dir_add_cat(&cdir, cat);
     1287
    12821288        cat = category_new("virtual");
    12831289        categ_dir_add_cat(&cdir, cat);
     1290
    12841291
    12851292        return true;
Note: See TracChangeset for help on using the changeset viewer.