Ignore:
File:
1 edited

Legend:

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

    r8300c72 r3083c74  
    11/*
    2  * Copyright (c) 2025 Jiri Svoboda
    32 * Copyright (c) 2010 Lenka Trochtova
    43 * All rights reserved.
     
    429428}
    430429
    431 errno_t fun_quiesce(fun_node_t *fun)
    432 {
    433         errno_t rc;
    434 
    435         log_msg(LOG_DEFAULT, LVL_DEBUG, "fun_quiesce(%s)", fun->pathname);
    436         fibril_rwlock_read_lock(&device_tree.rwlock);
    437 
    438         if (fun->state == FUN_OFF_LINE) {
    439                 fibril_rwlock_read_unlock(&device_tree.rwlock);
    440                 log_msg(LOG_DEFAULT, LVL_DEBUG, "Function %s is off line.",
    441                     fun->pathname);
    442                 return EOK;
    443         }
    444 
    445         if (fun->ftype != fun_inner) {
    446                 /* Nothing to do */
    447                 log_msg(LOG_DEFAULT, LVL_DEBUG, "Nothing to do for external "
    448                     "function %s\n", fun->pathname);
    449                 fibril_rwlock_read_unlock(&device_tree.rwlock);
    450                 return EOK;
    451         }
    452 
    453         log_msg(LOG_DEFAULT, LVL_DEBUG, "Quiescing inner function %s.",
    454             fun->pathname);
    455 
    456         if (fun->child == NULL) {
    457                 log_msg(LOG_DEFAULT, LVL_DEBUG, "Function %s child is NULL.",
    458                     fun->pathname);
    459                 fibril_rwlock_read_unlock(&device_tree.rwlock);
    460                 return EOK;
    461         }
    462 
    463         dev_node_t *dev = fun->child;
    464         device_state_t dev_state;
    465 
    466         dev_add_ref(dev);
    467         dev_state = dev->state;
    468 
    469         fibril_rwlock_read_unlock(&device_tree.rwlock);
    470 
    471         /* If device is owned by driver, ask driver to quiesce it. */
    472         if (dev_state == DEVICE_USABLE) {
    473                 log_msg(LOG_DEFAULT, LVL_DEBUG, "Call driver_dev_quiesce() "
    474                     "for %s.", fun->pathname);
    475                 rc = driver_dev_quiesce(&device_tree, dev);
    476                 if (rc != EOK) {
    477                         log_msg(LOG_DEFAULT, LVL_ERROR,
    478                             "driver_dev_quiesce() -> %d", (int)rc);
    479                         dev_del_ref(dev);
    480                         return ENOTSUP;
    481                 }
    482         }
    483 
    484         dev_del_ref(dev);
    485         return EOK;
    486 }
    487 
    488430/** @}
    489431 */
Note: See TracChangeset for help on using the changeset viewer.