Loading exec.c +66 −14 Original line number Diff line number Diff line Loading @@ -3491,24 +3491,13 @@ static void io_mem_init(void) static void core_region_add(MemoryListener *listener, MemoryRegionSection *section) { if (section->address_space == get_system_memory()) { cpu_register_physical_memory_log(section, section->readonly); } else { iorange_init(§ion->mr->iorange, &memory_region_iorange_ops, section->offset_within_address_space, section->size); ioport_register(§ion->mr->iorange); } } static void core_region_del(MemoryListener *listener, MemoryRegionSection *section) { if (section->address_space == get_system_memory()) { cpu_register_physical_memory_log(section, false); } else { isa_unassign_ioport(section->offset_within_address_space, section->size); } } static void core_log_start(MemoryListener *listener, Loading Loading @@ -3548,6 +3537,55 @@ static void core_eventfd_del(MemoryListener *listener, { } static void io_region_add(MemoryListener *listener, MemoryRegionSection *section) { iorange_init(§ion->mr->iorange, &memory_region_iorange_ops, section->offset_within_address_space, section->size); ioport_register(§ion->mr->iorange); } static void io_region_del(MemoryListener *listener, MemoryRegionSection *section) { isa_unassign_ioport(section->offset_within_address_space, section->size); } static void io_log_start(MemoryListener *listener, MemoryRegionSection *section) { } static void io_log_stop(MemoryListener *listener, MemoryRegionSection *section) { } static void io_log_sync(MemoryListener *listener, MemoryRegionSection *section) { } static void io_log_global_start(MemoryListener *listener) { } static void io_log_global_stop(MemoryListener *listener) { } static void io_eventfd_add(MemoryListener *listener, MemoryRegionSection *section, bool match_data, uint64_t data, int fd) { } static void io_eventfd_del(MemoryListener *listener, MemoryRegionSection *section, bool match_data, uint64_t data, int fd) { } static MemoryListener core_memory_listener = { .region_add = core_region_add, .region_del = core_region_del, Loading @@ -3561,6 +3599,19 @@ static MemoryListener core_memory_listener = { .priority = 0, }; static MemoryListener io_memory_listener = { .region_add = io_region_add, .region_del = io_region_del, .log_start = io_log_start, .log_stop = io_log_stop, .log_sync = io_log_sync, .log_global_start = io_log_global_start, .log_global_stop = io_log_global_stop, .eventfd_add = io_eventfd_add, .eventfd_del = io_eventfd_del, .priority = 0, }; static void memory_map_init(void) { system_memory = g_malloc(sizeof(*system_memory)); Loading @@ -3571,7 +3622,8 @@ static void memory_map_init(void) memory_region_init(system_io, "io", 65536); set_system_io_map(system_io); memory_listener_register(&core_memory_listener, NULL); memory_listener_register(&core_memory_listener, system_memory); memory_listener_register(&io_memory_listener, system_io); } MemoryRegion *get_system_memory(void) Loading Loading
exec.c +66 −14 Original line number Diff line number Diff line Loading @@ -3491,24 +3491,13 @@ static void io_mem_init(void) static void core_region_add(MemoryListener *listener, MemoryRegionSection *section) { if (section->address_space == get_system_memory()) { cpu_register_physical_memory_log(section, section->readonly); } else { iorange_init(§ion->mr->iorange, &memory_region_iorange_ops, section->offset_within_address_space, section->size); ioport_register(§ion->mr->iorange); } } static void core_region_del(MemoryListener *listener, MemoryRegionSection *section) { if (section->address_space == get_system_memory()) { cpu_register_physical_memory_log(section, false); } else { isa_unassign_ioport(section->offset_within_address_space, section->size); } } static void core_log_start(MemoryListener *listener, Loading Loading @@ -3548,6 +3537,55 @@ static void core_eventfd_del(MemoryListener *listener, { } static void io_region_add(MemoryListener *listener, MemoryRegionSection *section) { iorange_init(§ion->mr->iorange, &memory_region_iorange_ops, section->offset_within_address_space, section->size); ioport_register(§ion->mr->iorange); } static void io_region_del(MemoryListener *listener, MemoryRegionSection *section) { isa_unassign_ioport(section->offset_within_address_space, section->size); } static void io_log_start(MemoryListener *listener, MemoryRegionSection *section) { } static void io_log_stop(MemoryListener *listener, MemoryRegionSection *section) { } static void io_log_sync(MemoryListener *listener, MemoryRegionSection *section) { } static void io_log_global_start(MemoryListener *listener) { } static void io_log_global_stop(MemoryListener *listener) { } static void io_eventfd_add(MemoryListener *listener, MemoryRegionSection *section, bool match_data, uint64_t data, int fd) { } static void io_eventfd_del(MemoryListener *listener, MemoryRegionSection *section, bool match_data, uint64_t data, int fd) { } static MemoryListener core_memory_listener = { .region_add = core_region_add, .region_del = core_region_del, Loading @@ -3561,6 +3599,19 @@ static MemoryListener core_memory_listener = { .priority = 0, }; static MemoryListener io_memory_listener = { .region_add = io_region_add, .region_del = io_region_del, .log_start = io_log_start, .log_stop = io_log_stop, .log_sync = io_log_sync, .log_global_start = io_log_global_start, .log_global_stop = io_log_global_stop, .eventfd_add = io_eventfd_add, .eventfd_del = io_eventfd_del, .priority = 0, }; static void memory_map_init(void) { system_memory = g_malloc(sizeof(*system_memory)); Loading @@ -3571,7 +3622,8 @@ static void memory_map_init(void) memory_region_init(system_io, "io", 65536); set_system_io_map(system_io); memory_listener_register(&core_memory_listener, NULL); memory_listener_register(&core_memory_listener, system_memory); memory_listener_register(&io_memory_listener, system_io); } MemoryRegion *get_system_memory(void) Loading