Lines Matching refs:rm
107 static int int_rman_release_resource(struct rman *rm, struct resource_i *r);
122 rman_init(struct rman *rm) in rman_init() argument
132 if (rm->rm_start == 0 && rm->rm_end == 0) in rman_init()
133 rm->rm_end = ~0; in rman_init()
134 if (rm->rm_type == RMAN_UNINIT) in rman_init()
136 if (rm->rm_type == RMAN_GAUGE) in rman_init()
139 TAILQ_INIT(&rm->rm_list); in rman_init()
140 rm->rm_mtx = malloc(sizeof *rm->rm_mtx, M_RMAN, M_NOWAIT | M_ZERO); in rman_init()
141 if (rm->rm_mtx == NULL) in rman_init()
143 mtx_init(rm->rm_mtx, "rman", NULL, MTX_DEF); in rman_init()
146 TAILQ_INSERT_TAIL(&rman_head, rm, rm_link); in rman_init()
152 rman_manage_region(struct rman *rm, rman_res_t start, rman_res_t end) in rman_manage_region() argument
158 rm->rm_descr, start, end); in rman_manage_region()
159 if (start < rm->rm_start || end > rm->rm_end) in rman_manage_region()
166 r->r_rm = rm; in rman_manage_region()
168 mtx_lock(rm->rm_mtx); in rman_manage_region()
171 TAILQ_FOREACH(s, &rm->rm_list, r_link) { in rman_manage_region()
180 TAILQ_INSERT_TAIL(&rm->rm_list, r, r_link); in rman_manage_region()
207 TAILQ_REMOVE(&rm->rm_list, t, r_link); in rman_manage_region()
219 TAILQ_INSERT_AFTER(&rm->rm_list, s, r, r_link); in rman_manage_region()
225 mtx_unlock(rm->rm_mtx); in rman_manage_region()
230 rman_init_from_resource(struct rman *rm, struct resource *r) in rman_init_from_resource() argument
234 if ((rv = rman_init(rm)) != 0) in rman_init_from_resource()
236 return (rman_manage_region(rm, r->__r_i->r_start, r->__r_i->r_end)); in rman_init_from_resource()
240 rman_fini(struct rman *rm) in rman_fini() argument
244 mtx_lock(rm->rm_mtx); in rman_fini()
245 TAILQ_FOREACH(r, &rm->rm_list, r_link) { in rman_fini()
247 mtx_unlock(rm->rm_mtx); in rman_fini()
256 while (!TAILQ_EMPTY(&rm->rm_list)) { in rman_fini()
257 r = TAILQ_FIRST(&rm->rm_list); in rman_fini()
258 TAILQ_REMOVE(&rm->rm_list, r, r_link); in rman_fini()
261 mtx_unlock(rm->rm_mtx); in rman_fini()
263 TAILQ_REMOVE(&rman_head, rm, rm_link); in rman_fini()
265 mtx_destroy(rm->rm_mtx); in rman_fini()
266 free(rm->rm_mtx, M_RMAN); in rman_fini()
272 rman_first_free_region(struct rman *rm, rman_res_t *start, rman_res_t *end) in rman_first_free_region() argument
276 mtx_lock(rm->rm_mtx); in rman_first_free_region()
277 TAILQ_FOREACH(r, &rm->rm_list, r_link) { in rman_first_free_region()
281 mtx_unlock(rm->rm_mtx); in rman_first_free_region()
285 mtx_unlock(rm->rm_mtx); in rman_first_free_region()
290 rman_last_free_region(struct rman *rm, rman_res_t *start, rman_res_t *end) in rman_last_free_region() argument
294 mtx_lock(rm->rm_mtx); in rman_last_free_region()
295 TAILQ_FOREACH_REVERSE(r, &rm->rm_list, resource_head, r_link) { in rman_last_free_region()
299 mtx_unlock(rm->rm_mtx); in rman_last_free_region()
303 mtx_unlock(rm->rm_mtx); in rman_last_free_region()
312 struct rman *rm; in rman_adjust_resource() local
331 rm = r->r_rm; in rman_adjust_resource()
332 mtx_lock(rm->rm_mtx); in rman_adjust_resource()
334 TAILQ_FOREACH(s, &rm->rm_list, r_link) { in rman_adjust_resource()
354 mtx_unlock(rm->rm_mtx); in rman_adjust_resource()
359 mtx_unlock(rm->rm_mtx); in rman_adjust_resource()
374 TAILQ_REMOVE(&rm->rm_list, s, r_link); in rman_adjust_resource()
384 TAILQ_REMOVE(&rm->rm_list, t, r_link); in rman_adjust_resource()
389 mtx_unlock(rm->rm_mtx); in rman_adjust_resource()
400 new->r_rm = rm; in rman_adjust_resource()
401 mtx_lock(rm->rm_mtx); in rman_adjust_resource()
409 mtx_unlock(rm->rm_mtx); in rman_adjust_resource()
415 new->r_rm = rm; in rman_adjust_resource()
416 mtx_lock(rm->rm_mtx); in rman_adjust_resource()
423 TAILQ_INSERT_AFTER(&rm->rm_list, r, new, r_link); in rman_adjust_resource()
424 mtx_unlock(rm->rm_mtx); in rman_adjust_resource()
432 rman_reserve_resource(struct rman *rm, rman_res_t start, rman_res_t end, in rman_reserve_resource() argument
442 "device %s\n", __func__, rm->rm_descr, start, end, count, flags, in rman_reserve_resource()
450 mtx_lock(rm->rm_mtx); in rman_reserve_resource()
452 r = TAILQ_FIRST(&rm->rm_list); in rman_reserve_resource()
459 for (r = TAILQ_FIRST(&rm->rm_list); in rman_reserve_resource()
543 rv->r_rm = rm; in rman_reserve_resource()
563 r->r_rm = rm; in rman_reserve_resource()
565 TAILQ_INSERT_AFTER(&rm->rm_list, s, rv, in rman_reserve_resource()
567 TAILQ_INSERT_AFTER(&rm->rm_list, rv, r, in rman_reserve_resource()
582 TAILQ_INSERT_AFTER(&rm->rm_list, s, rv, in rman_reserve_resource()
613 rv->r_rm = rm; in rman_reserve_resource()
637 mtx_unlock(rm->rm_mtx); in rman_reserve_resource()
645 struct rman *rm; in rman_activate_resource() local
648 rm = r->r_rm; in rman_activate_resource()
649 mtx_lock(rm->rm_mtx); in rman_activate_resource()
651 mtx_unlock(rm->rm_mtx); in rman_activate_resource()
658 struct rman *rm; in rman_deactivate_resource() local
660 rm = r->__r_i->r_rm; in rman_deactivate_resource()
661 mtx_lock(rm->rm_mtx); in rman_deactivate_resource()
663 mtx_unlock(rm->rm_mtx); in rman_deactivate_resource()
668 int_rman_release_resource(struct rman *rm, struct resource_i *r) in int_rman_release_resource() argument
691 TAILQ_REMOVE(&rm->rm_list, r, r_link); in int_rman_release_resource()
726 TAILQ_REMOVE(&rm->rm_list, r, r_link); in int_rman_release_resource()
727 TAILQ_REMOVE(&rm->rm_list, t, r_link); in int_rman_release_resource()
734 TAILQ_REMOVE(&rm->rm_list, r, r_link); in int_rman_release_resource()
740 TAILQ_REMOVE(&rm->rm_list, r, r_link); in int_rman_release_resource()
766 struct rman *rm; in rman_release_resource() local
769 rm = r->r_rm; in rman_release_resource()
770 mtx_lock(rm->rm_mtx); in rman_release_resource()
771 rv = int_rman_release_resource(rm, r); in rman_release_resource()
772 mtx_unlock(rm->rm_mtx); in rman_release_resource()
935 rman_is_region_manager(const struct resource *r, const struct rman *rm) in rman_is_region_manager() argument
938 return (r->__r_i->r_rm == rm); in rman_is_region_manager()
953 struct rman *rm; in sysctl_rman() local
972 TAILQ_FOREACH(rm, &rman_head, rm_link) { in sysctl_rman()
977 if (rm == NULL) in sysctl_rman()
986 urm.rm_handle = (uintptr_t)rm; in sysctl_rman()
987 if (rm->rm_descr != NULL) in sysctl_rman()
988 strlcpy(urm.rm_descr, rm->rm_descr, RM_TEXTLEN); in sysctl_rman()
989 urm.rm_start = rm->rm_start; in sysctl_rman()
990 urm.rm_size = rm->rm_end - rm->rm_start + 1; in sysctl_rman()
991 urm.rm_type = rm->rm_type; in sysctl_rman()
1000 mtx_lock(rm->rm_mtx); in sysctl_rman()
1001 TAILQ_FOREACH(res, &rm->rm_list, r_link) { in sysctl_rman()
1012 mtx_unlock(rm->rm_mtx); in sysctl_rman()
1037 mtx_unlock(rm->rm_mtx); in sysctl_rman()
1048 dump_rman_header(struct rman *rm) in dump_rman_header() argument
1054 rm, rm->rm_descr, (rman_res_t)rm->rm_start, (rman_res_t)rm->rm_end); in dump_rman_header()
1058 dump_rman(struct rman *rm) in dump_rman() argument
1065 TAILQ_FOREACH(r, &rm->rm_list, r_link) { in dump_rman()
1094 struct rman *rm; in DB_SHOW_COMMAND_FLAGS() local
1096 TAILQ_FOREACH(rm, &rman_head, rm_link) { in DB_SHOW_COMMAND_FLAGS()
1097 dump_rman_header(rm); in DB_SHOW_COMMAND_FLAGS()
1103 struct rman *rm; in DB_SHOW_ALL_COMMAND() local
1105 TAILQ_FOREACH(rm, &rman_head, rm_link) { in DB_SHOW_ALL_COMMAND()
1106 dump_rman_header(rm); in DB_SHOW_ALL_COMMAND()
1107 dump_rman(rm); in DB_SHOW_ALL_COMMAND()