Lines Matching full:as
155 #define MEMORY_LISTENER_UPDATE_REGION(fr, as, dir, callback, _args...) \ argument
158 address_space_to_flatview(as)); \
159 MEMORY_LISTENER_CALL(as, callback, dir, &mrs, ##_args); \
576 AddressSpace *as; in memory_region_to_address_space() local
581 QTAILQ_FOREACH(as, &address_spaces, address_spaces_link) { in memory_region_to_address_space()
582 if (mr == as->root) { in memory_region_to_address_space()
583 return as; in memory_region_to_address_space()
704 /* The alias is included in its entirety. Use it as in memory_region_get_flatview_root()
770 static void address_space_add_del_ioeventfds(AddressSpace *as, in address_space_add_del_ioeventfds() argument
781 * and deleting as necessary. in address_space_add_del_ioeventfds()
792 .fv = address_space_to_flatview(as), in address_space_add_del_ioeventfds()
796 MEMORY_LISTENER_CALL(as, eventfd_del, Forward, §ion, in address_space_add_del_ioeventfds()
805 .fv = address_space_to_flatview(as), in address_space_add_del_ioeventfds()
809 MEMORY_LISTENER_CALL(as, eventfd_add, Reverse, §ion, in address_space_add_del_ioeventfds()
819 FlatView *address_space_get_flatview(AddressSpace *as) in address_space_get_flatview() argument
825 view = address_space_to_flatview(as); in address_space_get_flatview()
826 /* If somebody has replaced as->current_map concurrently, in address_space_get_flatview()
833 static void address_space_update_ioeventfds(AddressSpace *as) in address_space_update_ioeventfds() argument
843 if (!as->ioeventfd_notifiers) { in address_space_update_ioeventfds()
849 * the previous size as the starting value, with some headroom to avoid in address_space_update_ioeventfds()
852 ioeventfd_max = QEMU_ALIGN_UP(as->ioeventfd_nb, 4); in address_space_update_ioeventfds()
855 view = address_space_get_flatview(as); in address_space_update_ioeventfds()
874 address_space_add_del_ioeventfds(as, ioeventfds, ioeventfd_nb, in address_space_update_ioeventfds()
875 as->ioeventfds, as->ioeventfd_nb); in address_space_update_ioeventfds()
877 g_free(as->ioeventfds); in address_space_update_ioeventfds()
878 as->ioeventfds = ioeventfds; in address_space_update_ioeventfds()
879 as->ioeventfd_nb = ioeventfd_nb; in address_space_update_ioeventfds()
888 static void flat_range_coalesced_io_notify(FlatRange *fr, AddressSpace *as, in flat_range_coalesced_io_notify() argument
902 MEMORY_LISTENER_UPDATE_REGION(fr, as, Forward, coalesced_io_add, in flat_range_coalesced_io_notify()
906 MEMORY_LISTENER_UPDATE_REGION(fr, as, Reverse, coalesced_io_del, in flat_range_coalesced_io_notify()
912 static void flat_range_coalesced_io_del(FlatRange *fr, AddressSpace *as) in flat_range_coalesced_io_del() argument
917 flat_range_coalesced_io_notify(fr, as, cmr, false); in flat_range_coalesced_io_del()
921 static void flat_range_coalesced_io_add(FlatRange *fr, AddressSpace *as) in flat_range_coalesced_io_add() argument
931 flat_range_coalesced_io_notify(fr, as, cmr, true); in flat_range_coalesced_io_add()
939 AddressSpace *as, bool add) in flat_range_coalesced_io_notify_listener_add_del() argument
967 static void address_space_update_topology_pass(AddressSpace *as, in address_space_update_topology_pass() argument
999 flat_range_coalesced_io_del(frold, as); in address_space_update_topology_pass()
1000 MEMORY_LISTENER_UPDATE_REGION(frold, as, Reverse, region_del); in address_space_update_topology_pass()
1008 MEMORY_LISTENER_UPDATE_REGION(frnew, as, Forward, region_nop); in address_space_update_topology_pass()
1010 MEMORY_LISTENER_UPDATE_REGION(frnew, as, Forward, log_start, in address_space_update_topology_pass()
1015 MEMORY_LISTENER_UPDATE_REGION(frnew, as, Reverse, log_stop, in address_space_update_topology_pass()
1027 MEMORY_LISTENER_UPDATE_REGION(frnew, as, Forward, region_add); in address_space_update_topology_pass()
1028 flat_range_coalesced_io_add(frnew, as); in address_space_update_topology_pass()
1058 AddressSpace *as; in flatviews_reset() local
1067 QTAILQ_FOREACH(as, &address_spaces, address_spaces_link) { in flatviews_reset()
1068 MemoryRegion *physmr = memory_region_get_flatview_root(as->root); in flatviews_reset()
1078 static void address_space_set_flatview(AddressSpace *as) in address_space_set_flatview() argument
1080 FlatView *old_view = address_space_to_flatview(as); in address_space_set_flatview()
1081 MemoryRegion *physmr = memory_region_get_flatview_root(as->root); in address_space_set_flatview()
1096 if (!QTAILQ_EMPTY(&as->listeners)) { in address_space_set_flatview()
1102 address_space_update_topology_pass(as, old_view2, new_view, false); in address_space_set_flatview()
1103 address_space_update_topology_pass(as, old_view2, new_view, true); in address_space_set_flatview()
1107 qatomic_rcu_set(&as->current_map, new_view); in address_space_set_flatview()
1123 static void address_space_update_topology(AddressSpace *as) in address_space_update_topology() argument
1125 MemoryRegion *physmr = memory_region_get_flatview_root(as->root); in address_space_update_topology()
1131 address_space_set_flatview(as); in address_space_update_topology()
1142 AddressSpace *as; in memory_region_transaction_commit() local
1154 QTAILQ_FOREACH(as, &address_spaces, address_spaces_link) { in memory_region_transaction_commit()
1155 address_space_set_flatview(as); in memory_region_transaction_commit()
1156 address_space_update_ioeventfds(as); in memory_region_transaction_commit()
1162 QTAILQ_FOREACH(as, &address_spaces, address_spaces_link) { in memory_region_transaction_commit()
1163 address_space_update_ioeventfds(as); in memory_region_transaction_commit()
1421 /* Treat zero as compatibility all valid */ in memory_region_access_valid()
1831 * The memory region is a child of its owner. As long as the in memory_region_ref()
2221 error_setg(errp, "iommu has granularity incompatible with target AS"); in memory_translate_iotlb()
2263 AddressSpace *as; in memory_region_sync_dirty_bitmap() local
2274 as = listener->address_space; in memory_region_sync_dirty_bitmap()
2275 view = address_space_get_flatview(as); in memory_region_sync_dirty_bitmap()
2301 AddressSpace *as; in memory_region_clear_dirty_bitmap() local
2310 as = listener->address_space; in memory_region_clear_dirty_bitmap()
2311 view = address_space_get_flatview(as); in memory_region_clear_dirty_bitmap()
2478 AddressSpace *as; in memory_region_update_coalesced_range() local
2482 QTAILQ_FOREACH(as, &address_spaces, address_spaces_link) { in memory_region_update_coalesced_range()
2483 view = address_space_get_flatview(as); in memory_region_update_coalesced_range()
2486 flat_range_coalesced_io_notify(fr, as, cmr, add); in memory_region_update_coalesced_range()
2789 /* Same as memory_region_find, but it does not add a reference to the
2797 AddressSpace *as; in memory_region_find_rcu() local
2808 as = memory_region_to_address_space(root); in memory_region_find_rcu()
2809 if (!as) { in memory_region_find_rcu()
2814 view = address_space_to_flatview(as); in memory_region_find_rcu()
3023 AddressSpace *as) in listener_add_address_space() argument
3046 view = address_space_get_flatview(as); in listener_add_address_space()
3056 listener, as, true); in listener_add_address_space()
3067 for (i = 0; i < as->ioeventfd_nb; i++) { in listener_add_address_space()
3068 fd = &as->ioeventfds[i]; in listener_add_address_space()
3088 AddressSpace *as) in listener_del_address_space() argument
3098 view = address_space_get_flatview(as); in listener_del_address_space()
3108 listener, as, false); in listener_del_address_space()
3118 for (i = 0; i < as->ioeventfd_nb; i++) { in listener_del_address_space()
3119 fd = &as->ioeventfds[i]; in listener_del_address_space()
3138 void memory_listener_register(MemoryListener *listener, AddressSpace *as) in memory_listener_register() argument
3145 listener->address_space = as; in memory_listener_register()
3158 if (QTAILQ_EMPTY(&as->listeners) in memory_listener_register()
3159 || listener->priority >= QTAILQ_LAST(&as->listeners)->priority) { in memory_listener_register()
3160 QTAILQ_INSERT_TAIL(&as->listeners, listener, link_as); in memory_listener_register()
3162 QTAILQ_FOREACH(other, &as->listeners, link_as) { in memory_listener_register()
3170 listener_add_address_space(listener, as); in memory_listener_register()
3173 as->ioeventfd_notifiers++; in memory_listener_register()
3193 void address_space_remove_listeners(AddressSpace *as) in address_space_remove_listeners() argument
3195 while (!QTAILQ_EMPTY(&as->listeners)) { in address_space_remove_listeners()
3196 memory_listener_unregister(QTAILQ_FIRST(&as->listeners)); in address_space_remove_listeners()
3200 void address_space_init(AddressSpace *as, MemoryRegion *root, const char *name) in address_space_init() argument
3203 as->root = root; in address_space_init()
3204 as->current_map = NULL; in address_space_init()
3205 as->ioeventfd_nb = 0; in address_space_init()
3206 as->ioeventfds = NULL; in address_space_init()
3207 QTAILQ_INIT(&as->listeners); in address_space_init()
3208 QTAILQ_INSERT_TAIL(&address_spaces, as, address_spaces_link); in address_space_init()
3209 as->max_bounce_buffer_size = DEFAULT_MAX_BOUNCE_BUFFER_SIZE; in address_space_init()
3210 as->bounce_buffer_size = 0; in address_space_init()
3211 qemu_mutex_init(&as->map_client_list_lock); in address_space_init()
3212 QLIST_INIT(&as->map_client_list); in address_space_init()
3213 as->name = g_strdup(name ? name : "anonymous"); in address_space_init()
3214 address_space_update_topology(as); in address_space_init()
3215 address_space_update_ioeventfds(as); in address_space_init()
3218 static void do_address_space_destroy(AddressSpace *as) in do_address_space_destroy() argument
3220 assert(qatomic_read(&as->bounce_buffer_size) == 0); in do_address_space_destroy()
3221 assert(QLIST_EMPTY(&as->map_client_list)); in do_address_space_destroy()
3222 qemu_mutex_destroy(&as->map_client_list_lock); in do_address_space_destroy()
3224 assert(QTAILQ_EMPTY(&as->listeners)); in do_address_space_destroy()
3226 flatview_unref(as->current_map); in do_address_space_destroy()
3227 g_free(as->name); in do_address_space_destroy()
3228 g_free(as->ioeventfds); in do_address_space_destroy()
3229 memory_region_unref(as->root); in do_address_space_destroy()
3232 void address_space_destroy(AddressSpace *as) in address_space_destroy() argument
3234 MemoryRegion *root = as->root; in address_space_destroy()
3238 as->root = NULL; in address_space_destroy()
3240 QTAILQ_REMOVE(&address_spaces, as, address_spaces_link); in address_space_destroy()
3242 /* At this point, as->dispatch and as->current_map are dummy in address_space_destroy()
3246 as->root = root; in address_space_destroy()
3247 call_rcu(as, do_address_space_destroy, rcu); in address_space_destroy()
3446 AddressSpace *as; in mtree_print_flatview() local
3452 as = g_array_index(fv_address_spaces, AddressSpace*, i); in mtree_print_flatview()
3453 qemu_printf(" AS \"%s\", root: %s", in mtree_print_flatview()
3454 as->name, memory_region_name(as->root)); in mtree_print_flatview()
3455 if (as->root->alias) { in mtree_print_flatview()
3456 qemu_printf(", alias %s", memory_region_name(as->root->alias)); in mtree_print_flatview()
3499 as = g_array_index(fv_address_spaces, AddressSpace*, i); in mtree_print_flatview()
3500 if (fvi->ac->has_memory(current_machine, as, in mtree_print_flatview()
3539 AddressSpace *as; in mtree_info_flatview() local
3550 QTAILQ_FOREACH(as, &address_spaces, address_spaces_link) { in mtree_info_flatview()
3551 view = address_space_get_flatview(as); in mtree_info_flatview()
3555 fv_address_spaces = g_array_new(false, false, sizeof(as)); in mtree_info_flatview()
3559 g_array_append_val(fv_address_spaces, as); in mtree_info_flatview()
3587 AddressSpace *as = data; in mtree_print_as_name() local
3589 qemu_printf("address-space: %s\n", as->name); in mtree_print_as_name()
3617 AddressSpace *as; in mtree_info_as() local
3628 QTAILQ_FOREACH(as, &address_spaces, address_spaces_link) { in mtree_info_as()
3629 /* Create hashtable, key=AS root MR, value = list of AS */ in mtree_info_as()
3630 as_same_root_mr_list = g_hash_table_lookup(views, as->root); in mtree_info_as()
3631 as_same_root_mr_list = g_slist_insert_sorted(as_same_root_mr_list, as, in mtree_info_as()
3633 g_hash_table_insert(views, as->root, as_same_root_mr_list); in mtree_info_as()