Changeset fb7e5a9a in mainline for uspace/srv
- Timestamp:
- 2011-09-06T20:03:31Z (14 years ago)
- 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. - Location:
- uspace/srv
- Files:
-
- 6 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/devman/devman.c
r7a46bfe rfb7e5a9a 878 878 879 879 return retval; 880 880 } 881 882 int 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; 881 903 } 882 904 -
uspace/srv/devman/devman.h
r7a46bfe rfb7e5a9a 263 263 extern bool start_driver(driver_t *); 264 264 extern int driver_dev_remove(dev_tree_t *, dev_node_t *); 265 extern int driver_dev_gone(dev_tree_t *, dev_node_t *); 265 266 extern int driver_fun_online(dev_tree_t *, fun_node_t *); 266 267 extern int driver_fun_offline(dev_tree_t *, fun_node_t *); -
uspace/srv/devman/main.c
r7a46bfe rfb7e5a9a 316 316 if (fun->child != NULL) { 317 317 dev_node_t *dev = fun->child; 318 device_state_t dev_state; 318 319 319 320 dev_add_ref(dev); 321 dev_state = dev->state; 322 320 323 fibril_rwlock_write_unlock(&device_tree.rwlock); 321 324 322 325 /* If device is owned by driver, ask driver to give it up. */ 323 if (dev ->state == DEVICE_USABLE) {326 if (dev_state == DEVICE_USABLE) { 324 327 rc = driver_dev_remove(&device_tree, dev); 325 328 if (rc != EOK) { … … 333 336 if (!list_empty(&dev->functions)) { 334 337 fibril_rwlock_read_unlock(&device_tree.rwlock); 338 dev_del_ref(dev); 335 339 return EIO; 336 340 } 341 337 342 driver_t *driver = dev->drv; 338 343 fibril_rwlock_read_unlock(&device_tree.rwlock); … … 507 512 fun_node_t *fun; 508 513 int rc; 509 510 printf("devman_drv_fun_online()\n"); 514 515 log_msg(LVL_DEBUG, "devman_drv_fun_online()"); 516 511 517 fun = find_fun_node(&device_tree, IPC_GET_ARG1(*icall)); 512 518 if (fun == NULL) { … … 526 532 rc = online_function(fun); 527 533 if (rc != EOK) { 528 printf("devman_drv_fun_online() online_fun->ERROR\n");529 534 fun_del_ref(fun); 530 535 async_answer_0(iid, (sysarg_t) rc); … … 533 538 534 539 fun_del_ref(fun); 535 printf("devman_drv_fun_online() online_fun->OK\n");536 540 537 541 async_answer_0(iid, (sysarg_t) EOK); … … 580 584 int rc; 581 585 582 583 586 fun_node_t *fun = find_fun_node(&device_tree, fun_handle); 584 587 if (fun == NULL) { … … 599 602 600 603 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 */ 603 605 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); 606 653 } 607 654 } else { -
uspace/srv/fs/exfat/exfat_ops.c
r7a46bfe rfb7e5a9a 87 87 static bool exfat_is_directory(fs_node_t *); 88 88 static bool exfat_is_file(fs_node_t *node); 89 static service_id_t exfat_ device_get(fs_node_t *node);89 static service_id_t exfat_service_get(fs_node_t *node); 90 90 91 91 /* … … 898 898 } 899 899 900 service_id_t exfat_ device_get(fs_node_t *node)900 service_id_t exfat_service_get(fs_node_t *node) 901 901 { 902 902 return 0; … … 921 921 .is_directory = exfat_is_directory, 922 922 .is_file = exfat_is_file, 923 . device_get = exfat_device_get923 .service_get = exfat_service_get 924 924 }; 925 925 -
uspace/srv/fs/ext2fs/ext2fs_ops.c
r7a46bfe rfb7e5a9a 112 112 static bool ext2fs_is_directory(fs_node_t *); 113 113 static bool ext2fs_is_file(fs_node_t *node); 114 static service_id_t ext2fs_ device_get(fs_node_t *node);114 static service_id_t ext2fs_service_get(fs_node_t *node); 115 115 116 116 /* … … 557 557 } 558 558 559 service_id_t ext2fs_ device_get(fs_node_t *fn)559 service_id_t ext2fs_service_get(fs_node_t *fn) 560 560 { 561 561 EXT2FS_DBG(""); … … 581 581 .is_directory = ext2fs_is_directory, 582 582 .is_file = ext2fs_is_file, 583 . device_get = ext2fs_device_get583 .service_get = ext2fs_service_get 584 584 }; 585 585 -
uspace/srv/fs/fat/fat_ops.c
r7a46bfe rfb7e5a9a 90 90 static bool fat_is_directory(fs_node_t *); 91 91 static bool fat_is_file(fs_node_t *node); 92 static service_id_t fat_ device_get(fs_node_t *node);92 static service_id_t fat_service_get(fs_node_t *node); 93 93 94 94 /* … … 838 838 } 839 839 840 service_id_t fat_ device_get(fs_node_t *node)840 service_id_t fat_service_get(fs_node_t *node) 841 841 { 842 842 return 0; … … 860 860 .is_directory = fat_is_directory, 861 861 .is_file = fat_is_file, 862 . device_get = fat_device_get862 .service_get = fat_service_get 863 863 }; 864 864 -
uspace/srv/fs/locfs/locfs_ops.c
r7a46bfe rfb7e5a9a 418 418 } 419 419 420 static service_id_t locfs_ device_get(fs_node_t *fn)420 static service_id_t locfs_service_get(fs_node_t *fn) 421 421 { 422 422 locfs_node_t *node = (locfs_node_t *) fn->data; … … 445 445 .is_directory = locfs_is_directory, 446 446 .is_file = locfs_is_file, 447 . device_get = locfs_device_get447 .service_get = locfs_service_get 448 448 }; 449 449 -
uspace/srv/fs/mfs/mfs_ops.c
r7a46bfe rfb7e5a9a 55 55 static int mfs_has_children(bool *has_children, fs_node_t *fsnode); 56 56 static 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);57 static service_id_t mfs_service_get(fs_node_t *fsnode); 58 58 static aoff64_t mfs_size_get(fs_node_t *node); 59 59 static int mfs_match(fs_node_t **rfn, fs_node_t *pfn, const char *component); … … 81 81 .size_get = mfs_size_get, 82 82 .root_get = mfs_root_get, 83 . device_get = mfs_device_get,83 .service_get = mfs_service_get, 84 84 .is_directory = mfs_is_directory, 85 85 .is_file = mfs_is_file, … … 325 325 } 326 326 327 service_id_t mfs_ device_get(fs_node_t *fsnode)327 service_id_t mfs_service_get(fs_node_t *fsnode) 328 328 { 329 329 struct mfs_node *node = fsnode->data; -
uspace/srv/fs/tmpfs/tmpfs_ops.c
r7a46bfe rfb7e5a9a 114 114 } 115 115 116 static service_id_t tmpfs_ device_get(fs_node_t *fn)116 static service_id_t tmpfs_service_get(fs_node_t *fn) 117 117 { 118 118 return 0; … … 136 136 .is_directory = tmpfs_is_directory, 137 137 .is_file = tmpfs_is_file, 138 . device_get = tmpfs_device_get138 .service_get = tmpfs_service_get 139 139 }; 140 140 -
uspace/srv/loc/loc.c
r7a46bfe rfb7e5a9a 1277 1277 categ_dir_add_cat(&cdir, cat); 1278 1278 1279 cat = category_new("test3"); 1280 categ_dir_add_cat(&cdir, cat); 1281 1279 1282 cat = category_new("usbhc"); 1280 1283 categ_dir_add_cat(&cdir, cat); 1281 1284 1285 cat = category_new("virt-null"); 1286 categ_dir_add_cat(&cdir, cat); 1287 1282 1288 cat = category_new("virtual"); 1283 1289 categ_dir_add_cat(&cdir, cat); 1290 1284 1291 1285 1292 return true;
Note:
See TracChangeset
for help on using the changeset viewer.