4 * Copyright (c) 2003 Fabrice Bellard
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
21 #include <sys/types.h>
25 #include "qemu-common.h"
29 #if !defined(CONFIG_USER_ONLY)
30 #include "hw/boards.h"
33 #include "qemu/osdep.h"
34 #include "sysemu/kvm.h"
35 #include "sysemu/sysemu.h"
36 #include "hw/xen/xen.h"
37 #include "qemu/timer.h"
38 #include "qemu/config-file.h"
39 #include "qemu/error-report.h"
40 #include "exec/memory.h"
41 #include "sysemu/dma.h"
42 #include "exec/address-spaces.h"
43 #if defined(CONFIG_USER_ONLY)
45 #else /* !CONFIG_USER_ONLY */
46 #include "sysemu/xen-mapcache.h"
49 #include "exec/cpu-all.h"
50 #include "qemu/rcu_queue.h"
51 #include "exec/cputlb.h"
52 #include "translate-all.h"
54 #include "exec/memory-internal.h"
55 #include "exec/ram_addr.h"
57 #include "qemu/range.h"
59 //#define DEBUG_SUBPAGE
61 #if !defined(CONFIG_USER_ONLY)
62 /* ram_list is read under rcu_read_lock()/rcu_read_unlock(). Writes
63 * are protected by the ramlist lock.
65 RAMList ram_list = { .blocks = QLIST_HEAD_INITIALIZER(ram_list.blocks) };
67 static MemoryRegion *system_memory;
68 static MemoryRegion *system_io;
70 AddressSpace address_space_io;
71 AddressSpace address_space_memory;
73 MemoryRegion io_mem_rom, io_mem_notdirty;
74 static MemoryRegion io_mem_unassigned;
76 /* RAM is pre-allocated and passed into qemu_ram_alloc_from_ptr */
77 #define RAM_PREALLOC (1 << 0)
79 /* RAM is mmap-ed with MAP_SHARED */
80 #define RAM_SHARED (1 << 1)
82 /* Only a portion of RAM (used_length) is actually used, and migrated.
83 * This used_length size can change across reboots.
85 #define RAM_RESIZEABLE (1 << 2)
89 struct CPUTailQ cpus = QTAILQ_HEAD_INITIALIZER(cpus);
90 /* current CPU in the current thread. It is only valid inside
92 DEFINE_TLS(CPUState *, current_cpu);
93 /* 0 = Do not count executed instructions.
94 1 = Precise instruction counting.
95 2 = Adaptive rate instruction counting. */
98 #if !defined(CONFIG_USER_ONLY)
100 typedef struct PhysPageEntry PhysPageEntry;
102 struct PhysPageEntry {
103 /* How many bits skip to next level (in units of L2_SIZE). 0 for a leaf. */
105 /* index into phys_sections (!skip) or phys_map_nodes (skip) */
109 #define PHYS_MAP_NODE_NIL (((uint32_t)~0) >> 6)
111 /* Size of the L2 (and L3, etc) page tables. */
112 #define ADDR_SPACE_BITS 64
115 #define P_L2_SIZE (1 << P_L2_BITS)
117 #define P_L2_LEVELS (((ADDR_SPACE_BITS - TARGET_PAGE_BITS - 1) / P_L2_BITS) + 1)
119 typedef PhysPageEntry Node[P_L2_SIZE];
121 typedef struct PhysPageMap {
124 unsigned sections_nb;
125 unsigned sections_nb_alloc;
127 unsigned nodes_nb_alloc;
129 MemoryRegionSection *sections;
132 struct AddressSpaceDispatch {
135 /* This is a multi-level map on the physical address space.
136 * The bottom level has pointers to MemoryRegionSections.
138 PhysPageEntry phys_map;
143 #define SUBPAGE_IDX(addr) ((addr) & ~TARGET_PAGE_MASK)
144 typedef struct subpage_t {
148 uint16_t sub_section[TARGET_PAGE_SIZE];
151 #define PHYS_SECTION_UNASSIGNED 0
152 #define PHYS_SECTION_NOTDIRTY 1
153 #define PHYS_SECTION_ROM 2
154 #define PHYS_SECTION_WATCH 3
156 static void io_mem_init(void);
157 static void memory_map_init(void);
158 static void tcg_commit(MemoryListener *listener);
160 static MemoryRegion io_mem_watch;
163 #if !defined(CONFIG_USER_ONLY)
165 static void phys_map_node_reserve(PhysPageMap *map, unsigned nodes)
167 if (map->nodes_nb + nodes > map->nodes_nb_alloc) {
168 map->nodes_nb_alloc = MAX(map->nodes_nb_alloc * 2, 16);
169 map->nodes_nb_alloc = MAX(map->nodes_nb_alloc, map->nodes_nb + nodes);
170 map->nodes = g_renew(Node, map->nodes, map->nodes_nb_alloc);
174 static uint32_t phys_map_node_alloc(PhysPageMap *map, bool leaf)
181 ret = map->nodes_nb++;
183 assert(ret != PHYS_MAP_NODE_NIL);
184 assert(ret != map->nodes_nb_alloc);
186 e.skip = leaf ? 0 : 1;
187 e.ptr = leaf ? PHYS_SECTION_UNASSIGNED : PHYS_MAP_NODE_NIL;
188 for (i = 0; i < P_L2_SIZE; ++i) {
189 memcpy(&p[i], &e, sizeof(e));
194 static void phys_page_set_level(PhysPageMap *map, PhysPageEntry *lp,
195 hwaddr *index, hwaddr *nb, uint16_t leaf,
199 hwaddr step = (hwaddr)1 << (level * P_L2_BITS);
201 if (lp->skip && lp->ptr == PHYS_MAP_NODE_NIL) {
202 lp->ptr = phys_map_node_alloc(map, level == 0);
204 p = map->nodes[lp->ptr];
205 lp = &p[(*index >> (level * P_L2_BITS)) & (P_L2_SIZE - 1)];
207 while (*nb && lp < &p[P_L2_SIZE]) {
208 if ((*index & (step - 1)) == 0 && *nb >= step) {
214 phys_page_set_level(map, lp, index, nb, leaf, level - 1);
220 static void phys_page_set(AddressSpaceDispatch *d,
221 hwaddr index, hwaddr nb,
224 /* Wildly overreserve - it doesn't matter much. */
225 phys_map_node_reserve(&d->map, 3 * P_L2_LEVELS);
227 phys_page_set_level(&d->map, &d->phys_map, &index, &nb, leaf, P_L2_LEVELS - 1);
230 /* Compact a non leaf page entry. Simply detect that the entry has a single child,
231 * and update our entry so we can skip it and go directly to the destination.
233 static void phys_page_compact(PhysPageEntry *lp, Node *nodes, unsigned long *compacted)
235 unsigned valid_ptr = P_L2_SIZE;
240 if (lp->ptr == PHYS_MAP_NODE_NIL) {
245 for (i = 0; i < P_L2_SIZE; i++) {
246 if (p[i].ptr == PHYS_MAP_NODE_NIL) {
253 phys_page_compact(&p[i], nodes, compacted);
257 /* We can only compress if there's only one child. */
262 assert(valid_ptr < P_L2_SIZE);
264 /* Don't compress if it won't fit in the # of bits we have. */
265 if (lp->skip + p[valid_ptr].skip >= (1 << 3)) {
269 lp->ptr = p[valid_ptr].ptr;
270 if (!p[valid_ptr].skip) {
271 /* If our only child is a leaf, make this a leaf. */
272 /* By design, we should have made this node a leaf to begin with so we
273 * should never reach here.
274 * But since it's so simple to handle this, let's do it just in case we
279 lp->skip += p[valid_ptr].skip;
283 static void phys_page_compact_all(AddressSpaceDispatch *d, int nodes_nb)
285 DECLARE_BITMAP(compacted, nodes_nb);
287 if (d->phys_map.skip) {
288 phys_page_compact(&d->phys_map, d->map.nodes, compacted);
292 static MemoryRegionSection *phys_page_find(PhysPageEntry lp, hwaddr addr,
293 Node *nodes, MemoryRegionSection *sections)
296 hwaddr index = addr >> TARGET_PAGE_BITS;
299 for (i = P_L2_LEVELS; lp.skip && (i -= lp.skip) >= 0;) {
300 if (lp.ptr == PHYS_MAP_NODE_NIL) {
301 return §ions[PHYS_SECTION_UNASSIGNED];
304 lp = p[(index >> (i * P_L2_BITS)) & (P_L2_SIZE - 1)];
307 if (sections[lp.ptr].size.hi ||
308 range_covers_byte(sections[lp.ptr].offset_within_address_space,
309 sections[lp.ptr].size.lo, addr)) {
310 return §ions[lp.ptr];
312 return §ions[PHYS_SECTION_UNASSIGNED];
316 bool memory_region_is_unassigned(MemoryRegion *mr)
318 return mr != &io_mem_rom && mr != &io_mem_notdirty && !mr->rom_device
319 && mr != &io_mem_watch;
322 /* Called from RCU critical section */
323 static MemoryRegionSection *address_space_lookup_region(AddressSpaceDispatch *d,
325 bool resolve_subpage)
327 MemoryRegionSection *section;
330 section = phys_page_find(d->phys_map, addr, d->map.nodes, d->map.sections);
331 if (resolve_subpage && section->mr->subpage) {
332 subpage = container_of(section->mr, subpage_t, iomem);
333 section = &d->map.sections[subpage->sub_section[SUBPAGE_IDX(addr)]];
338 /* Called from RCU critical section */
339 static MemoryRegionSection *
340 address_space_translate_internal(AddressSpaceDispatch *d, hwaddr addr, hwaddr *xlat,
341 hwaddr *plen, bool resolve_subpage)
343 MemoryRegionSection *section;
346 section = address_space_lookup_region(d, addr, resolve_subpage);
347 /* Compute offset within MemoryRegionSection */
348 addr -= section->offset_within_address_space;
350 /* Compute offset within MemoryRegion */
351 *xlat = addr + section->offset_within_region;
353 diff = int128_sub(section->mr->size, int128_make64(addr));
354 *plen = int128_get64(int128_min(diff, int128_make64(*plen)));
358 static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write)
360 if (memory_region_is_ram(mr)) {
361 return !(is_write && mr->readonly);
363 if (memory_region_is_romd(mr)) {
370 /* Called from RCU critical section */
371 MemoryRegion *address_space_translate(AddressSpace *as, hwaddr addr,
372 hwaddr *xlat, hwaddr *plen,
376 MemoryRegionSection *section;
380 AddressSpaceDispatch *d = atomic_rcu_read(&as->dispatch);
381 section = address_space_translate_internal(d, addr, &addr, plen, true);
384 if (!mr->iommu_ops) {
388 iotlb = mr->iommu_ops->translate(mr, addr, is_write);
389 addr = ((iotlb.translated_addr & ~iotlb.addr_mask)
390 | (addr & iotlb.addr_mask));
391 *plen = MIN(*plen, (addr | iotlb.addr_mask) - addr + 1);
392 if (!(iotlb.perm & (1 << is_write))) {
393 mr = &io_mem_unassigned;
397 as = iotlb.target_as;
400 if (xen_enabled() && memory_access_is_direct(mr, is_write)) {
401 hwaddr page = ((addr & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE) - addr;
402 *plen = MIN(page, *plen);
409 /* Called from RCU critical section */
410 MemoryRegionSection *
411 address_space_translate_for_iotlb(CPUState *cpu, hwaddr addr,
412 hwaddr *xlat, hwaddr *plen)
414 MemoryRegionSection *section;
415 section = address_space_translate_internal(cpu->memory_dispatch,
416 addr, xlat, plen, false);
418 assert(!section->mr->iommu_ops);
423 #if !defined(CONFIG_USER_ONLY)
425 static int cpu_common_post_load(void *opaque, int version_id)
427 CPUState *cpu = opaque;
429 /* 0x01 was CPU_INTERRUPT_EXIT. This line can be removed when the
430 version_id is increased. */
431 cpu->interrupt_request &= ~0x01;
437 static int cpu_common_pre_load(void *opaque)
439 CPUState *cpu = opaque;
441 cpu->exception_index = -1;
446 static bool cpu_common_exception_index_needed(void *opaque)
448 CPUState *cpu = opaque;
450 return tcg_enabled() && cpu->exception_index != -1;
453 static const VMStateDescription vmstate_cpu_common_exception_index = {
454 .name = "cpu_common/exception_index",
456 .minimum_version_id = 1,
457 .needed = cpu_common_exception_index_needed,
458 .fields = (VMStateField[]) {
459 VMSTATE_INT32(exception_index, CPUState),
460 VMSTATE_END_OF_LIST()
464 const VMStateDescription vmstate_cpu_common = {
465 .name = "cpu_common",
467 .minimum_version_id = 1,
468 .pre_load = cpu_common_pre_load,
469 .post_load = cpu_common_post_load,
470 .fields = (VMStateField[]) {
471 VMSTATE_UINT32(halted, CPUState),
472 VMSTATE_UINT32(interrupt_request, CPUState),
473 VMSTATE_END_OF_LIST()
475 .subsections = (const VMStateDescription*[]) {
476 &vmstate_cpu_common_exception_index,
483 CPUState *qemu_get_cpu(int index)
488 if (cpu->cpu_index == index) {
496 #if !defined(CONFIG_USER_ONLY)
497 void tcg_cpu_address_space_init(CPUState *cpu, AddressSpace *as)
499 /* We only support one address space per cpu at the moment. */
500 assert(cpu->as == as);
502 if (cpu->tcg_as_listener) {
503 memory_listener_unregister(cpu->tcg_as_listener);
505 cpu->tcg_as_listener = g_new0(MemoryListener, 1);
507 cpu->tcg_as_listener->commit = tcg_commit;
508 memory_listener_register(cpu->tcg_as_listener, as);
512 void cpu_exec_init(CPUArchState *env)
514 CPUState *cpu = ENV_GET_CPU(env);
515 CPUClass *cc = CPU_GET_CLASS(cpu);
519 #if defined(CONFIG_USER_ONLY)
523 CPU_FOREACH(some_cpu) {
526 cpu->cpu_index = cpu_index;
528 QTAILQ_INIT(&cpu->breakpoints);
529 QTAILQ_INIT(&cpu->watchpoints);
530 #ifndef CONFIG_USER_ONLY
531 cpu->as = &address_space_memory;
532 cpu->thread_id = qemu_get_thread_id();
533 cpu_reload_memory_map(cpu);
535 QTAILQ_INSERT_TAIL(&cpus, cpu, node);
536 #if defined(CONFIG_USER_ONLY)
539 if (qdev_get_vmsd(DEVICE(cpu)) == NULL) {
540 vmstate_register(NULL, cpu_index, &vmstate_cpu_common, cpu);
542 #if defined(CPU_SAVE_VERSION) && !defined(CONFIG_USER_ONLY)
543 register_savevm(NULL, "cpu", cpu_index, CPU_SAVE_VERSION,
544 cpu_save, cpu_load, env);
545 assert(cc->vmsd == NULL);
546 assert(qdev_get_vmsd(DEVICE(cpu)) == NULL);
548 if (cc->vmsd != NULL) {
549 vmstate_register(NULL, cpu_index, cc->vmsd, cpu);
553 #if defined(CONFIG_USER_ONLY)
554 static void breakpoint_invalidate(CPUState *cpu, target_ulong pc)
556 tb_invalidate_phys_page_range(pc, pc + 1, 0);
559 static void breakpoint_invalidate(CPUState *cpu, target_ulong pc)
561 hwaddr phys = cpu_get_phys_page_debug(cpu, pc);
563 tb_invalidate_phys_addr(cpu->as,
564 phys | (pc & ~TARGET_PAGE_MASK));
569 #if defined(CONFIG_USER_ONLY)
570 void cpu_watchpoint_remove_all(CPUState *cpu, int mask)
575 int cpu_watchpoint_remove(CPUState *cpu, vaddr addr, vaddr len,
581 void cpu_watchpoint_remove_by_ref(CPUState *cpu, CPUWatchpoint *watchpoint)
585 int cpu_watchpoint_insert(CPUState *cpu, vaddr addr, vaddr len,
586 int flags, CPUWatchpoint **watchpoint)
591 /* Add a watchpoint. */
592 int cpu_watchpoint_insert(CPUState *cpu, vaddr addr, vaddr len,
593 int flags, CPUWatchpoint **watchpoint)
597 /* forbid ranges which are empty or run off the end of the address space */
598 if (len == 0 || (addr + len - 1) < addr) {
599 error_report("tried to set invalid watchpoint at %"
600 VADDR_PRIx ", len=%" VADDR_PRIu, addr, len);
603 wp = g_malloc(sizeof(*wp));
609 /* keep all GDB-injected watchpoints in front */
610 if (flags & BP_GDB) {
611 QTAILQ_INSERT_HEAD(&cpu->watchpoints, wp, entry);
613 QTAILQ_INSERT_TAIL(&cpu->watchpoints, wp, entry);
616 tlb_flush_page(cpu, addr);
623 /* Remove a specific watchpoint. */
624 int cpu_watchpoint_remove(CPUState *cpu, vaddr addr, vaddr len,
629 QTAILQ_FOREACH(wp, &cpu->watchpoints, entry) {
630 if (addr == wp->vaddr && len == wp->len
631 && flags == (wp->flags & ~BP_WATCHPOINT_HIT)) {
632 cpu_watchpoint_remove_by_ref(cpu, wp);
639 /* Remove a specific watchpoint by reference. */
640 void cpu_watchpoint_remove_by_ref(CPUState *cpu, CPUWatchpoint *watchpoint)
642 QTAILQ_REMOVE(&cpu->watchpoints, watchpoint, entry);
644 tlb_flush_page(cpu, watchpoint->vaddr);
649 /* Remove all matching watchpoints. */
650 void cpu_watchpoint_remove_all(CPUState *cpu, int mask)
652 CPUWatchpoint *wp, *next;
654 QTAILQ_FOREACH_SAFE(wp, &cpu->watchpoints, entry, next) {
655 if (wp->flags & mask) {
656 cpu_watchpoint_remove_by_ref(cpu, wp);
661 /* Return true if this watchpoint address matches the specified
662 * access (ie the address range covered by the watchpoint overlaps
663 * partially or completely with the address range covered by the
666 static inline bool cpu_watchpoint_address_matches(CPUWatchpoint *wp,
670 /* We know the lengths are non-zero, but a little caution is
671 * required to avoid errors in the case where the range ends
672 * exactly at the top of the address space and so addr + len
673 * wraps round to zero.
675 vaddr wpend = wp->vaddr + wp->len - 1;
676 vaddr addrend = addr + len - 1;
678 return !(addr > wpend || wp->vaddr > addrend);
683 /* Add a breakpoint. */
684 int cpu_breakpoint_insert(CPUState *cpu, vaddr pc, int flags,
685 CPUBreakpoint **breakpoint)
689 bp = g_malloc(sizeof(*bp));
694 /* keep all GDB-injected breakpoints in front */
695 if (flags & BP_GDB) {
696 QTAILQ_INSERT_HEAD(&cpu->breakpoints, bp, entry);
698 QTAILQ_INSERT_TAIL(&cpu->breakpoints, bp, entry);
701 breakpoint_invalidate(cpu, pc);
709 /* Remove a specific breakpoint. */
710 int cpu_breakpoint_remove(CPUState *cpu, vaddr pc, int flags)
714 QTAILQ_FOREACH(bp, &cpu->breakpoints, entry) {
715 if (bp->pc == pc && bp->flags == flags) {
716 cpu_breakpoint_remove_by_ref(cpu, bp);
723 /* Remove a specific breakpoint by reference. */
724 void cpu_breakpoint_remove_by_ref(CPUState *cpu, CPUBreakpoint *breakpoint)
726 QTAILQ_REMOVE(&cpu->breakpoints, breakpoint, entry);
728 breakpoint_invalidate(cpu, breakpoint->pc);
733 /* Remove all matching breakpoints. */
734 void cpu_breakpoint_remove_all(CPUState *cpu, int mask)
736 CPUBreakpoint *bp, *next;
738 QTAILQ_FOREACH_SAFE(bp, &cpu->breakpoints, entry, next) {
739 if (bp->flags & mask) {
740 cpu_breakpoint_remove_by_ref(cpu, bp);
745 /* enable or disable single step mode. EXCP_DEBUG is returned by the
746 CPU loop after each instruction */
747 void cpu_single_step(CPUState *cpu, int enabled)
749 if (cpu->singlestep_enabled != enabled) {
750 cpu->singlestep_enabled = enabled;
752 kvm_update_guest_debug(cpu, 0);
754 /* must flush all the translated code to avoid inconsistencies */
755 /* XXX: only flush what is necessary */
756 CPUArchState *env = cpu->env_ptr;
762 void cpu_abort(CPUState *cpu, const char *fmt, ...)
769 fprintf(stderr, "qemu: fatal: ");
770 vfprintf(stderr, fmt, ap);
771 fprintf(stderr, "\n");
772 cpu_dump_state(cpu, stderr, fprintf, CPU_DUMP_FPU | CPU_DUMP_CCOP);
773 if (qemu_log_enabled()) {
774 qemu_log("qemu: fatal: ");
775 qemu_log_vprintf(fmt, ap2);
777 log_cpu_state(cpu, CPU_DUMP_FPU | CPU_DUMP_CCOP);
783 #if defined(CONFIG_USER_ONLY)
785 struct sigaction act;
786 sigfillset(&act.sa_mask);
787 act.sa_handler = SIG_DFL;
788 sigaction(SIGABRT, &act, NULL);
794 #if !defined(CONFIG_USER_ONLY)
795 /* Called from RCU critical section */
796 static RAMBlock *qemu_get_ram_block(ram_addr_t addr)
800 block = atomic_rcu_read(&ram_list.mru_block);
801 if (block && addr - block->offset < block->max_length) {
804 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
805 if (addr - block->offset < block->max_length) {
810 fprintf(stderr, "Bad ram offset %" PRIx64 "\n", (uint64_t)addr);
814 /* It is safe to write mru_block outside the iothread lock. This
819 * xxx removed from list
823 * call_rcu(reclaim_ramblock, xxx);
826 * atomic_rcu_set is not needed here. The block was already published
827 * when it was placed into the list. Here we're just making an extra
828 * copy of the pointer.
830 ram_list.mru_block = block;
834 static void tlb_reset_dirty_range_all(ram_addr_t start, ram_addr_t length)
840 end = TARGET_PAGE_ALIGN(start + length);
841 start &= TARGET_PAGE_MASK;
844 block = qemu_get_ram_block(start);
845 assert(block == qemu_get_ram_block(end - 1));
846 start1 = (uintptr_t)ramblock_ptr(block, start - block->offset);
847 cpu_tlb_reset_dirty_all(start1, length);
851 /* Note: start and end must be within the same ram block. */
852 bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t start,
856 unsigned long end, page;
863 end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS;
864 page = start >> TARGET_PAGE_BITS;
865 dirty = bitmap_test_and_clear_atomic(ram_list.dirty_memory[client],
868 if (dirty && tcg_enabled()) {
869 tlb_reset_dirty_range_all(start, length);
875 /* Called from RCU critical section */
876 hwaddr memory_region_section_get_iotlb(CPUState *cpu,
877 MemoryRegionSection *section,
879 hwaddr paddr, hwaddr xlat,
881 target_ulong *address)
886 if (memory_region_is_ram(section->mr)) {
888 iotlb = (memory_region_get_ram_addr(section->mr) & TARGET_PAGE_MASK)
890 if (!section->readonly) {
891 iotlb |= PHYS_SECTION_NOTDIRTY;
893 iotlb |= PHYS_SECTION_ROM;
896 iotlb = section - section->address_space->dispatch->map.sections;
900 /* Make accesses to pages with watchpoints go via the
901 watchpoint trap routines. */
902 QTAILQ_FOREACH(wp, &cpu->watchpoints, entry) {
903 if (cpu_watchpoint_address_matches(wp, vaddr, TARGET_PAGE_SIZE)) {
904 /* Avoid trapping reads of pages with a write breakpoint. */
905 if ((prot & PAGE_WRITE) || (wp->flags & BP_MEM_READ)) {
906 iotlb = PHYS_SECTION_WATCH + paddr;
907 *address |= TLB_MMIO;
915 #endif /* defined(CONFIG_USER_ONLY) */
917 #if !defined(CONFIG_USER_ONLY)
919 static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
921 static subpage_t *subpage_init(AddressSpace *as, hwaddr base);
923 static void *(*phys_mem_alloc)(size_t size, uint64_t *align) =
927 * Set a custom physical guest memory alloator.
928 * Accelerators with unusual needs may need this. Hopefully, we can
929 * get rid of it eventually.
931 void phys_mem_set_alloc(void *(*alloc)(size_t, uint64_t *align))
933 phys_mem_alloc = alloc;
936 static uint16_t phys_section_add(PhysPageMap *map,
937 MemoryRegionSection *section)
939 /* The physical section number is ORed with a page-aligned
940 * pointer to produce the iotlb entries. Thus it should
941 * never overflow into the page-aligned value.
943 assert(map->sections_nb < TARGET_PAGE_SIZE);
945 if (map->sections_nb == map->sections_nb_alloc) {
946 map->sections_nb_alloc = MAX(map->sections_nb_alloc * 2, 16);
947 map->sections = g_renew(MemoryRegionSection, map->sections,
948 map->sections_nb_alloc);
950 map->sections[map->sections_nb] = *section;
951 memory_region_ref(section->mr);
952 return map->sections_nb++;
955 static void phys_section_destroy(MemoryRegion *mr)
957 memory_region_unref(mr);
960 subpage_t *subpage = container_of(mr, subpage_t, iomem);
961 object_unref(OBJECT(&subpage->iomem));
966 static void phys_sections_free(PhysPageMap *map)
968 while (map->sections_nb > 0) {
969 MemoryRegionSection *section = &map->sections[--map->sections_nb];
970 phys_section_destroy(section->mr);
972 g_free(map->sections);
976 static void register_subpage(AddressSpaceDispatch *d, MemoryRegionSection *section)
979 hwaddr base = section->offset_within_address_space
981 MemoryRegionSection *existing = phys_page_find(d->phys_map, base,
982 d->map.nodes, d->map.sections);
983 MemoryRegionSection subsection = {
984 .offset_within_address_space = base,
985 .size = int128_make64(TARGET_PAGE_SIZE),
989 assert(existing->mr->subpage || existing->mr == &io_mem_unassigned);
991 if (!(existing->mr->subpage)) {
992 subpage = subpage_init(d->as, base);
993 subsection.address_space = d->as;
994 subsection.mr = &subpage->iomem;
995 phys_page_set(d, base >> TARGET_PAGE_BITS, 1,
996 phys_section_add(&d->map, &subsection));
998 subpage = container_of(existing->mr, subpage_t, iomem);
1000 start = section->offset_within_address_space & ~TARGET_PAGE_MASK;
1001 end = start + int128_get64(section->size) - 1;
1002 subpage_register(subpage, start, end,
1003 phys_section_add(&d->map, section));
1007 static void register_multipage(AddressSpaceDispatch *d,
1008 MemoryRegionSection *section)
1010 hwaddr start_addr = section->offset_within_address_space;
1011 uint16_t section_index = phys_section_add(&d->map, section);
1012 uint64_t num_pages = int128_get64(int128_rshift(section->size,
1016 phys_page_set(d, start_addr >> TARGET_PAGE_BITS, num_pages, section_index);
1019 static void mem_add(MemoryListener *listener, MemoryRegionSection *section)
1021 AddressSpace *as = container_of(listener, AddressSpace, dispatch_listener);
1022 AddressSpaceDispatch *d = as->next_dispatch;
1023 MemoryRegionSection now = *section, remain = *section;
1024 Int128 page_size = int128_make64(TARGET_PAGE_SIZE);
1026 if (now.offset_within_address_space & ~TARGET_PAGE_MASK) {
1027 uint64_t left = TARGET_PAGE_ALIGN(now.offset_within_address_space)
1028 - now.offset_within_address_space;
1030 now.size = int128_min(int128_make64(left), now.size);
1031 register_subpage(d, &now);
1033 now.size = int128_zero();
1035 while (int128_ne(remain.size, now.size)) {
1036 remain.size = int128_sub(remain.size, now.size);
1037 remain.offset_within_address_space += int128_get64(now.size);
1038 remain.offset_within_region += int128_get64(now.size);
1040 if (int128_lt(remain.size, page_size)) {
1041 register_subpage(d, &now);
1042 } else if (remain.offset_within_address_space & ~TARGET_PAGE_MASK) {
1043 now.size = page_size;
1044 register_subpage(d, &now);
1046 now.size = int128_and(now.size, int128_neg(page_size));
1047 register_multipage(d, &now);
1052 void qemu_flush_coalesced_mmio_buffer(void)
1055 kvm_flush_coalesced_mmio_buffer();
1058 void qemu_mutex_lock_ramlist(void)
1060 qemu_mutex_lock(&ram_list.mutex);
1063 void qemu_mutex_unlock_ramlist(void)
1065 qemu_mutex_unlock(&ram_list.mutex);
1070 #include <sys/vfs.h>
1072 #define HUGETLBFS_MAGIC 0x958458f6
1074 static long gethugepagesize(const char *path, Error **errp)
1080 ret = statfs(path, &fs);
1081 } while (ret != 0 && errno == EINTR);
1084 error_setg_errno(errp, errno, "failed to get page size of file %s",
1089 if (fs.f_type != HUGETLBFS_MAGIC)
1090 fprintf(stderr, "Warning: path not on HugeTLBFS: %s\n", path);
1095 static void *file_ram_alloc(RAMBlock *block,
1101 char *sanitized_name;
1106 Error *local_err = NULL;
1108 hpagesize = gethugepagesize(path, &local_err);
1110 error_propagate(errp, local_err);
1113 block->mr->align = hpagesize;
1115 if (memory < hpagesize) {
1116 error_setg(errp, "memory size 0x" RAM_ADDR_FMT " must be equal to "
1117 "or larger than huge page size 0x%" PRIx64,
1122 if (kvm_enabled() && !kvm_has_sync_mmu()) {
1124 "host lacks kvm mmu notifiers, -mem-path unsupported");
1128 /* Make name safe to use with mkstemp by replacing '/' with '_'. */
1129 sanitized_name = g_strdup(memory_region_name(block->mr));
1130 for (c = sanitized_name; *c != '\0'; c++) {
1135 filename = g_strdup_printf("%s/qemu_back_mem.%s.XXXXXX", path,
1137 g_free(sanitized_name);
1139 fd = mkstemp(filename);
1141 error_setg_errno(errp, errno,
1142 "unable to create backing store for hugepages");
1149 memory = (memory+hpagesize-1) & ~(hpagesize-1);
1152 * ftruncate is not supported by hugetlbfs in older
1153 * hosts, so don't bother bailing out on errors.
1154 * If anything goes wrong with it under other filesystems,
1157 if (ftruncate(fd, memory)) {
1158 perror("ftruncate");
1161 area = mmap(0, memory, PROT_READ | PROT_WRITE,
1162 (block->flags & RAM_SHARED ? MAP_SHARED : MAP_PRIVATE),
1164 if (area == MAP_FAILED) {
1165 error_setg_errno(errp, errno,
1166 "unable to map backing store for hugepages");
1172 os_mem_prealloc(fd, area, memory);
1180 error_report("%s", error_get_pretty(*errp));
1187 /* Called with the ramlist lock held. */
1188 static ram_addr_t find_ram_offset(ram_addr_t size)
1190 RAMBlock *block, *next_block;
1191 ram_addr_t offset = RAM_ADDR_MAX, mingap = RAM_ADDR_MAX;
1193 assert(size != 0); /* it would hand out same offset multiple times */
1195 if (QLIST_EMPTY_RCU(&ram_list.blocks)) {
1199 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1200 ram_addr_t end, next = RAM_ADDR_MAX;
1202 end = block->offset + block->max_length;
1204 QLIST_FOREACH_RCU(next_block, &ram_list.blocks, next) {
1205 if (next_block->offset >= end) {
1206 next = MIN(next, next_block->offset);
1209 if (next - end >= size && next - end < mingap) {
1211 mingap = next - end;
1215 if (offset == RAM_ADDR_MAX) {
1216 fprintf(stderr, "Failed to find gap of requested size: %" PRIu64 "\n",
1224 ram_addr_t last_ram_offset(void)
1227 ram_addr_t last = 0;
1230 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1231 last = MAX(last, block->offset + block->max_length);
1237 static void qemu_ram_setup_dump(void *addr, ram_addr_t size)
1241 /* Use MADV_DONTDUMP, if user doesn't want the guest memory in the core */
1242 if (!machine_dump_guest_core(current_machine)) {
1243 ret = qemu_madvise(addr, size, QEMU_MADV_DONTDUMP);
1245 perror("qemu_madvise");
1246 fprintf(stderr, "madvise doesn't support MADV_DONTDUMP, "
1247 "but dump_guest_core=off specified\n");
1252 /* Called within an RCU critical section, or while the ramlist lock
1255 static RAMBlock *find_ram_block(ram_addr_t addr)
1259 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1260 if (block->offset == addr) {
1268 /* Called with iothread lock held. */
1269 void qemu_ram_set_idstr(ram_addr_t addr, const char *name, DeviceState *dev)
1271 RAMBlock *new_block, *block;
1274 new_block = find_ram_block(addr);
1276 assert(!new_block->idstr[0]);
1279 char *id = qdev_get_dev_path(dev);
1281 snprintf(new_block->idstr, sizeof(new_block->idstr), "%s/", id);
1285 pstrcat(new_block->idstr, sizeof(new_block->idstr), name);
1287 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1288 if (block != new_block && !strcmp(block->idstr, new_block->idstr)) {
1289 fprintf(stderr, "RAMBlock \"%s\" already registered, abort!\n",
1297 /* Called with iothread lock held. */
1298 void qemu_ram_unset_idstr(ram_addr_t addr)
1302 /* FIXME: arch_init.c assumes that this is not called throughout
1303 * migration. Ignore the problem since hot-unplug during migration
1304 * does not work anyway.
1308 block = find_ram_block(addr);
1310 memset(block->idstr, 0, sizeof(block->idstr));
1315 static int memory_try_enable_merging(void *addr, size_t len)
1317 if (!machine_mem_merge(current_machine)) {
1318 /* disabled by the user */
1322 return qemu_madvise(addr, len, QEMU_MADV_MERGEABLE);
1325 /* Only legal before guest might have detected the memory size: e.g. on
1326 * incoming migration, or right after reset.
1328 * As memory core doesn't know how is memory accessed, it is up to
1329 * resize callback to update device state and/or add assertions to detect
1330 * misuse, if necessary.
1332 int qemu_ram_resize(ram_addr_t base, ram_addr_t newsize, Error **errp)
1334 RAMBlock *block = find_ram_block(base);
1338 newsize = TARGET_PAGE_ALIGN(newsize);
1340 if (block->used_length == newsize) {
1344 if (!(block->flags & RAM_RESIZEABLE)) {
1345 error_setg_errno(errp, EINVAL,
1346 "Length mismatch: %s: 0x" RAM_ADDR_FMT
1347 " in != 0x" RAM_ADDR_FMT, block->idstr,
1348 newsize, block->used_length);
1352 if (block->max_length < newsize) {
1353 error_setg_errno(errp, EINVAL,
1354 "Length too large: %s: 0x" RAM_ADDR_FMT
1355 " > 0x" RAM_ADDR_FMT, block->idstr,
1356 newsize, block->max_length);
1360 cpu_physical_memory_clear_dirty_range(block->offset, block->used_length);
1361 block->used_length = newsize;
1362 cpu_physical_memory_set_dirty_range(block->offset, block->used_length,
1364 memory_region_set_size(block->mr, newsize);
1365 if (block->resized) {
1366 block->resized(block->idstr, newsize, block->host);
1371 static ram_addr_t ram_block_add(RAMBlock *new_block, Error **errp)
1374 RAMBlock *last_block = NULL;
1375 ram_addr_t old_ram_size, new_ram_size;
1377 old_ram_size = last_ram_offset() >> TARGET_PAGE_BITS;
1379 qemu_mutex_lock_ramlist();
1380 new_block->offset = find_ram_offset(new_block->max_length);
1382 if (!new_block->host) {
1383 if (xen_enabled()) {
1384 xen_ram_alloc(new_block->offset, new_block->max_length,
1387 new_block->host = phys_mem_alloc(new_block->max_length,
1388 &new_block->mr->align);
1389 if (!new_block->host) {
1390 error_setg_errno(errp, errno,
1391 "cannot set up guest memory '%s'",
1392 memory_region_name(new_block->mr));
1393 qemu_mutex_unlock_ramlist();
1396 memory_try_enable_merging(new_block->host, new_block->max_length);
1400 /* Keep the list sorted from biggest to smallest block. Unlike QTAILQ,
1401 * QLIST (which has an RCU-friendly variant) does not have insertion at
1402 * tail, so save the last element in last_block.
1404 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1406 if (block->max_length < new_block->max_length) {
1411 QLIST_INSERT_BEFORE_RCU(block, new_block, next);
1412 } else if (last_block) {
1413 QLIST_INSERT_AFTER_RCU(last_block, new_block, next);
1414 } else { /* list is empty */
1415 QLIST_INSERT_HEAD_RCU(&ram_list.blocks, new_block, next);
1417 ram_list.mru_block = NULL;
1419 /* Write list before version */
1422 qemu_mutex_unlock_ramlist();
1424 new_ram_size = last_ram_offset() >> TARGET_PAGE_BITS;
1426 if (new_ram_size > old_ram_size) {
1429 /* ram_list.dirty_memory[] is protected by the iothread lock. */
1430 for (i = 0; i < DIRTY_MEMORY_NUM; i++) {
1431 ram_list.dirty_memory[i] =
1432 bitmap_zero_extend(ram_list.dirty_memory[i],
1433 old_ram_size, new_ram_size);
1436 cpu_physical_memory_set_dirty_range(new_block->offset,
1437 new_block->used_length,
1440 if (new_block->host) {
1441 qemu_ram_setup_dump(new_block->host, new_block->max_length);
1442 qemu_madvise(new_block->host, new_block->max_length, QEMU_MADV_HUGEPAGE);
1443 qemu_madvise(new_block->host, new_block->max_length, QEMU_MADV_DONTFORK);
1444 if (kvm_enabled()) {
1445 kvm_setup_guest_memory(new_block->host, new_block->max_length);
1449 return new_block->offset;
1453 ram_addr_t qemu_ram_alloc_from_file(ram_addr_t size, MemoryRegion *mr,
1454 bool share, const char *mem_path,
1457 RAMBlock *new_block;
1459 Error *local_err = NULL;
1461 if (xen_enabled()) {
1462 error_setg(errp, "-mem-path not supported with Xen");
1466 if (phys_mem_alloc != qemu_anon_ram_alloc) {
1468 * file_ram_alloc() needs to allocate just like
1469 * phys_mem_alloc, but we haven't bothered to provide
1473 "-mem-path not supported with this accelerator");
1477 size = TARGET_PAGE_ALIGN(size);
1478 new_block = g_malloc0(sizeof(*new_block));
1480 new_block->used_length = size;
1481 new_block->max_length = size;
1482 new_block->flags = share ? RAM_SHARED : 0;
1483 new_block->host = file_ram_alloc(new_block, size,
1485 if (!new_block->host) {
1490 addr = ram_block_add(new_block, &local_err);
1493 error_propagate(errp, local_err);
1501 ram_addr_t qemu_ram_alloc_internal(ram_addr_t size, ram_addr_t max_size,
1502 void (*resized)(const char*,
1505 void *host, bool resizeable,
1506 MemoryRegion *mr, Error **errp)
1508 RAMBlock *new_block;
1510 Error *local_err = NULL;
1512 size = TARGET_PAGE_ALIGN(size);
1513 max_size = TARGET_PAGE_ALIGN(max_size);
1514 new_block = g_malloc0(sizeof(*new_block));
1516 new_block->resized = resized;
1517 new_block->used_length = size;
1518 new_block->max_length = max_size;
1519 assert(max_size >= size);
1521 new_block->host = host;
1523 new_block->flags |= RAM_PREALLOC;
1526 new_block->flags |= RAM_RESIZEABLE;
1528 addr = ram_block_add(new_block, &local_err);
1531 error_propagate(errp, local_err);
1537 ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host,
1538 MemoryRegion *mr, Error **errp)
1540 return qemu_ram_alloc_internal(size, size, NULL, host, false, mr, errp);
1543 ram_addr_t qemu_ram_alloc(ram_addr_t size, MemoryRegion *mr, Error **errp)
1545 return qemu_ram_alloc_internal(size, size, NULL, NULL, false, mr, errp);
1548 ram_addr_t qemu_ram_alloc_resizeable(ram_addr_t size, ram_addr_t maxsz,
1549 void (*resized)(const char*,
1552 MemoryRegion *mr, Error **errp)
1554 return qemu_ram_alloc_internal(size, maxsz, resized, NULL, true, mr, errp);
1557 void qemu_ram_free_from_ptr(ram_addr_t addr)
1561 qemu_mutex_lock_ramlist();
1562 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1563 if (addr == block->offset) {
1564 QLIST_REMOVE_RCU(block, next);
1565 ram_list.mru_block = NULL;
1566 /* Write list before version */
1569 g_free_rcu(block, rcu);
1573 qemu_mutex_unlock_ramlist();
1576 static void reclaim_ramblock(RAMBlock *block)
1578 if (block->flags & RAM_PREALLOC) {
1580 } else if (xen_enabled()) {
1581 xen_invalidate_map_cache_entry(block->host);
1583 } else if (block->fd >= 0) {
1584 munmap(block->host, block->max_length);
1588 qemu_anon_ram_free(block->host, block->max_length);
1593 void qemu_ram_free(ram_addr_t addr)
1597 qemu_mutex_lock_ramlist();
1598 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1599 if (addr == block->offset) {
1600 QLIST_REMOVE_RCU(block, next);
1601 ram_list.mru_block = NULL;
1602 /* Write list before version */
1605 call_rcu(block, reclaim_ramblock, rcu);
1609 qemu_mutex_unlock_ramlist();
1613 void qemu_ram_remap(ram_addr_t addr, ram_addr_t length)
1620 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1621 offset = addr - block->offset;
1622 if (offset < block->max_length) {
1623 vaddr = ramblock_ptr(block, offset);
1624 if (block->flags & RAM_PREALLOC) {
1626 } else if (xen_enabled()) {
1630 if (block->fd >= 0) {
1631 flags |= (block->flags & RAM_SHARED ?
1632 MAP_SHARED : MAP_PRIVATE);
1633 area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
1634 flags, block->fd, offset);
1637 * Remap needs to match alloc. Accelerators that
1638 * set phys_mem_alloc never remap. If they did,
1639 * we'd need a remap hook here.
1641 assert(phys_mem_alloc == qemu_anon_ram_alloc);
1643 flags |= MAP_PRIVATE | MAP_ANONYMOUS;
1644 area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
1647 if (area != vaddr) {
1648 fprintf(stderr, "Could not remap addr: "
1649 RAM_ADDR_FMT "@" RAM_ADDR_FMT "\n",
1653 memory_try_enable_merging(vaddr, length);
1654 qemu_ram_setup_dump(vaddr, length);
1659 #endif /* !_WIN32 */
1661 int qemu_get_ram_fd(ram_addr_t addr)
1667 block = qemu_get_ram_block(addr);
1673 void *qemu_get_ram_block_host_ptr(ram_addr_t addr)
1679 block = qemu_get_ram_block(addr);
1680 ptr = ramblock_ptr(block, 0);
1685 /* Return a host pointer to ram allocated with qemu_ram_alloc.
1686 * This should not be used for general purpose DMA. Use address_space_map
1687 * or address_space_rw instead. For local memory (e.g. video ram) that the
1688 * device owns, use memory_region_get_ram_ptr.
1690 * By the time this function returns, the returned pointer is not protected
1691 * by RCU anymore. If the caller is not within an RCU critical section and
1692 * does not hold the iothread lock, it must have other means of protecting the
1693 * pointer, such as a reference to the region that includes the incoming
1696 void *qemu_get_ram_ptr(ram_addr_t addr)
1702 block = qemu_get_ram_block(addr);
1704 if (xen_enabled() && block->host == NULL) {
1705 /* We need to check if the requested address is in the RAM
1706 * because we don't want to map the entire memory in QEMU.
1707 * In that case just map until the end of the page.
1709 if (block->offset == 0) {
1710 ptr = xen_map_cache(addr, 0, 0);
1714 block->host = xen_map_cache(block->offset, block->max_length, 1);
1716 ptr = ramblock_ptr(block, addr - block->offset);
1723 /* Return a host pointer to guest's ram. Similar to qemu_get_ram_ptr
1724 * but takes a size argument.
1726 * By the time this function returns, the returned pointer is not protected
1727 * by RCU anymore. If the caller is not within an RCU critical section and
1728 * does not hold the iothread lock, it must have other means of protecting the
1729 * pointer, such as a reference to the region that includes the incoming
1732 static void *qemu_ram_ptr_length(ram_addr_t addr, hwaddr *size)
1738 if (xen_enabled()) {
1739 return xen_map_cache(addr, *size, 1);
1743 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1744 if (addr - block->offset < block->max_length) {
1745 if (addr - block->offset + *size > block->max_length)
1746 *size = block->max_length - addr + block->offset;
1747 ptr = ramblock_ptr(block, addr - block->offset);
1753 fprintf(stderr, "Bad ram offset %" PRIx64 "\n", (uint64_t)addr);
1758 /* Some of the softmmu routines need to translate from a host pointer
1759 * (typically a TLB entry) back to a ram offset.
1761 * By the time this function returns, the returned pointer is not protected
1762 * by RCU anymore. If the caller is not within an RCU critical section and
1763 * does not hold the iothread lock, it must have other means of protecting the
1764 * pointer, such as a reference to the region that includes the incoming
1767 MemoryRegion *qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr)
1770 uint8_t *host = ptr;
1773 if (xen_enabled()) {
1775 *ram_addr = xen_ram_addr_from_mapcache(ptr);
1776 mr = qemu_get_ram_block(*ram_addr)->mr;
1782 block = atomic_rcu_read(&ram_list.mru_block);
1783 if (block && block->host && host - block->host < block->max_length) {
1787 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1788 /* This case append when the block is not mapped. */
1789 if (block->host == NULL) {
1792 if (host - block->host < block->max_length) {
1801 *ram_addr = block->offset + (host - block->host);
1807 static void notdirty_mem_write(void *opaque, hwaddr ram_addr,
1808 uint64_t val, unsigned size)
1810 if (!cpu_physical_memory_get_dirty_flag(ram_addr, DIRTY_MEMORY_CODE)) {
1811 tb_invalidate_phys_page_fast(ram_addr, size);
1815 stb_p(qemu_get_ram_ptr(ram_addr), val);
1818 stw_p(qemu_get_ram_ptr(ram_addr), val);
1821 stl_p(qemu_get_ram_ptr(ram_addr), val);
1826 /* Set both VGA and migration bits for simplicity and to remove
1827 * the notdirty callback faster.
1829 cpu_physical_memory_set_dirty_range(ram_addr, size,
1830 DIRTY_CLIENTS_NOCODE);
1831 /* we remove the notdirty callback only if the code has been
1833 if (!cpu_physical_memory_is_clean(ram_addr)) {
1834 CPUArchState *env = current_cpu->env_ptr;
1835 tlb_set_dirty(env, current_cpu->mem_io_vaddr);
1839 static bool notdirty_mem_accepts(void *opaque, hwaddr addr,
1840 unsigned size, bool is_write)
1845 static const MemoryRegionOps notdirty_mem_ops = {
1846 .write = notdirty_mem_write,
1847 .valid.accepts = notdirty_mem_accepts,
1848 .endianness = DEVICE_NATIVE_ENDIAN,
1851 /* Generate a debug exception if a watchpoint has been hit. */
1852 static void check_watchpoint(int offset, int len, MemTxAttrs attrs, int flags)
1854 CPUState *cpu = current_cpu;
1855 CPUArchState *env = cpu->env_ptr;
1856 target_ulong pc, cs_base;
1861 if (cpu->watchpoint_hit) {
1862 /* We re-entered the check after replacing the TB. Now raise
1863 * the debug interrupt so that is will trigger after the
1864 * current instruction. */
1865 cpu_interrupt(cpu, CPU_INTERRUPT_DEBUG);
1868 vaddr = (cpu->mem_io_vaddr & TARGET_PAGE_MASK) + offset;
1869 QTAILQ_FOREACH(wp, &cpu->watchpoints, entry) {
1870 if (cpu_watchpoint_address_matches(wp, vaddr, len)
1871 && (wp->flags & flags)) {
1872 if (flags == BP_MEM_READ) {
1873 wp->flags |= BP_WATCHPOINT_HIT_READ;
1875 wp->flags |= BP_WATCHPOINT_HIT_WRITE;
1877 wp->hitaddr = vaddr;
1878 wp->hitattrs = attrs;
1879 if (!cpu->watchpoint_hit) {
1880 cpu->watchpoint_hit = wp;
1881 tb_check_watchpoint(cpu);
1882 if (wp->flags & BP_STOP_BEFORE_ACCESS) {
1883 cpu->exception_index = EXCP_DEBUG;
1886 cpu_get_tb_cpu_state(env, &pc, &cs_base, &cpu_flags);
1887 tb_gen_code(cpu, pc, cs_base, cpu_flags, 1);
1888 cpu_resume_from_signal(cpu, NULL);
1892 wp->flags &= ~BP_WATCHPOINT_HIT;
1897 /* Watchpoint access routines. Watchpoints are inserted using TLB tricks,
1898 so these check for a hit then pass through to the normal out-of-line
1900 static MemTxResult watch_mem_read(void *opaque, hwaddr addr, uint64_t *pdata,
1901 unsigned size, MemTxAttrs attrs)
1906 check_watchpoint(addr & ~TARGET_PAGE_MASK, size, attrs, BP_MEM_READ);
1909 data = address_space_ldub(&address_space_memory, addr, attrs, &res);
1912 data = address_space_lduw(&address_space_memory, addr, attrs, &res);
1915 data = address_space_ldl(&address_space_memory, addr, attrs, &res);
1923 static MemTxResult watch_mem_write(void *opaque, hwaddr addr,
1924 uint64_t val, unsigned size,
1929 check_watchpoint(addr & ~TARGET_PAGE_MASK, size, attrs, BP_MEM_WRITE);
1932 address_space_stb(&address_space_memory, addr, val, attrs, &res);
1935 address_space_stw(&address_space_memory, addr, val, attrs, &res);
1938 address_space_stl(&address_space_memory, addr, val, attrs, &res);
1945 static const MemoryRegionOps watch_mem_ops = {
1946 .read_with_attrs = watch_mem_read,
1947 .write_with_attrs = watch_mem_write,
1948 .endianness = DEVICE_NATIVE_ENDIAN,
1951 static MemTxResult subpage_read(void *opaque, hwaddr addr, uint64_t *data,
1952 unsigned len, MemTxAttrs attrs)
1954 subpage_t *subpage = opaque;
1958 #if defined(DEBUG_SUBPAGE)
1959 printf("%s: subpage %p len %u addr " TARGET_FMT_plx "\n", __func__,
1960 subpage, len, addr);
1962 res = address_space_read(subpage->as, addr + subpage->base,
1969 *data = ldub_p(buf);
1972 *data = lduw_p(buf);
1985 static MemTxResult subpage_write(void *opaque, hwaddr addr,
1986 uint64_t value, unsigned len, MemTxAttrs attrs)
1988 subpage_t *subpage = opaque;
1991 #if defined(DEBUG_SUBPAGE)
1992 printf("%s: subpage %p len %u addr " TARGET_FMT_plx
1993 " value %"PRIx64"\n",
1994 __func__, subpage, len, addr, value);
2012 return address_space_write(subpage->as, addr + subpage->base,
2016 static bool subpage_accepts(void *opaque, hwaddr addr,
2017 unsigned len, bool is_write)
2019 subpage_t *subpage = opaque;
2020 #if defined(DEBUG_SUBPAGE)
2021 printf("%s: subpage %p %c len %u addr " TARGET_FMT_plx "\n",
2022 __func__, subpage, is_write ? 'w' : 'r', len, addr);
2025 return address_space_access_valid(subpage->as, addr + subpage->base,
2029 static const MemoryRegionOps subpage_ops = {
2030 .read_with_attrs = subpage_read,
2031 .write_with_attrs = subpage_write,
2032 .impl.min_access_size = 1,
2033 .impl.max_access_size = 8,
2034 .valid.min_access_size = 1,
2035 .valid.max_access_size = 8,
2036 .valid.accepts = subpage_accepts,
2037 .endianness = DEVICE_NATIVE_ENDIAN,
2040 static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
2045 if (start >= TARGET_PAGE_SIZE || end >= TARGET_PAGE_SIZE)
2047 idx = SUBPAGE_IDX(start);
2048 eidx = SUBPAGE_IDX(end);
2049 #if defined(DEBUG_SUBPAGE)
2050 printf("%s: %p start %08x end %08x idx %08x eidx %08x section %d\n",
2051 __func__, mmio, start, end, idx, eidx, section);
2053 for (; idx <= eidx; idx++) {
2054 mmio->sub_section[idx] = section;
2060 static subpage_t *subpage_init(AddressSpace *as, hwaddr base)
2064 mmio = g_malloc0(sizeof(subpage_t));
2068 memory_region_init_io(&mmio->iomem, NULL, &subpage_ops, mmio,
2069 NULL, TARGET_PAGE_SIZE);
2070 mmio->iomem.subpage = true;
2071 #if defined(DEBUG_SUBPAGE)
2072 printf("%s: %p base " TARGET_FMT_plx " len %08x\n", __func__,
2073 mmio, base, TARGET_PAGE_SIZE);
2075 subpage_register(mmio, 0, TARGET_PAGE_SIZE-1, PHYS_SECTION_UNASSIGNED);
2080 static uint16_t dummy_section(PhysPageMap *map, AddressSpace *as,
2084 MemoryRegionSection section = {
2085 .address_space = as,
2087 .offset_within_address_space = 0,
2088 .offset_within_region = 0,
2089 .size = int128_2_64(),
2092 return phys_section_add(map, §ion);
2095 MemoryRegion *iotlb_to_region(CPUState *cpu, hwaddr index)
2097 AddressSpaceDispatch *d = atomic_rcu_read(&cpu->memory_dispatch);
2098 MemoryRegionSection *sections = d->map.sections;
2100 return sections[index & ~TARGET_PAGE_MASK].mr;
2103 static void io_mem_init(void)
2105 memory_region_init_io(&io_mem_rom, NULL, &unassigned_mem_ops, NULL, NULL, UINT64_MAX);
2106 memory_region_init_io(&io_mem_unassigned, NULL, &unassigned_mem_ops, NULL,
2108 memory_region_init_io(&io_mem_notdirty, NULL, ¬dirty_mem_ops, NULL,
2110 memory_region_init_io(&io_mem_watch, NULL, &watch_mem_ops, NULL,
2114 static void mem_begin(MemoryListener *listener)
2116 AddressSpace *as = container_of(listener, AddressSpace, dispatch_listener);
2117 AddressSpaceDispatch *d = g_new0(AddressSpaceDispatch, 1);
2120 n = dummy_section(&d->map, as, &io_mem_unassigned);
2121 assert(n == PHYS_SECTION_UNASSIGNED);
2122 n = dummy_section(&d->map, as, &io_mem_notdirty);
2123 assert(n == PHYS_SECTION_NOTDIRTY);
2124 n = dummy_section(&d->map, as, &io_mem_rom);
2125 assert(n == PHYS_SECTION_ROM);
2126 n = dummy_section(&d->map, as, &io_mem_watch);
2127 assert(n == PHYS_SECTION_WATCH);
2129 d->phys_map = (PhysPageEntry) { .ptr = PHYS_MAP_NODE_NIL, .skip = 1 };
2131 as->next_dispatch = d;
2134 static void address_space_dispatch_free(AddressSpaceDispatch *d)
2136 phys_sections_free(&d->map);
2140 static void mem_commit(MemoryListener *listener)
2142 AddressSpace *as = container_of(listener, AddressSpace, dispatch_listener);
2143 AddressSpaceDispatch *cur = as->dispatch;
2144 AddressSpaceDispatch *next = as->next_dispatch;
2146 phys_page_compact_all(next, next->map.nodes_nb);
2148 atomic_rcu_set(&as->dispatch, next);
2150 call_rcu(cur, address_space_dispatch_free, rcu);
2154 static void tcg_commit(MemoryListener *listener)
2158 /* since each CPU stores ram addresses in its TLB cache, we must
2159 reset the modified entries */
2162 /* FIXME: Disentangle the cpu.h circular files deps so we can
2163 directly get the right CPU from listener. */
2164 if (cpu->tcg_as_listener != listener) {
2167 cpu_reload_memory_map(cpu);
2171 void address_space_init_dispatch(AddressSpace *as)
2173 as->dispatch = NULL;
2174 as->dispatch_listener = (MemoryListener) {
2176 .commit = mem_commit,
2177 .region_add = mem_add,
2178 .region_nop = mem_add,
2181 memory_listener_register(&as->dispatch_listener, as);
2184 void address_space_unregister(AddressSpace *as)
2186 memory_listener_unregister(&as->dispatch_listener);
2189 void address_space_destroy_dispatch(AddressSpace *as)
2191 AddressSpaceDispatch *d = as->dispatch;
2193 atomic_rcu_set(&as->dispatch, NULL);
2195 call_rcu(d, address_space_dispatch_free, rcu);
2199 static void memory_map_init(void)
2201 system_memory = g_malloc(sizeof(*system_memory));
2203 memory_region_init(system_memory, NULL, "system", UINT64_MAX);
2204 address_space_init(&address_space_memory, system_memory, "memory");
2206 system_io = g_malloc(sizeof(*system_io));
2207 memory_region_init_io(system_io, NULL, &unassigned_io_ops, NULL, "io",
2209 address_space_init(&address_space_io, system_io, "I/O");
2212 MemoryRegion *get_system_memory(void)
2214 return system_memory;
2217 MemoryRegion *get_system_io(void)
2222 #endif /* !defined(CONFIG_USER_ONLY) */
2224 /* physical memory access (slow version, mainly for debug) */
2225 #if defined(CONFIG_USER_ONLY)
2226 int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
2227 uint8_t *buf, int len, int is_write)
2234 page = addr & TARGET_PAGE_MASK;
2235 l = (page + TARGET_PAGE_SIZE) - addr;
2238 flags = page_get_flags(page);
2239 if (!(flags & PAGE_VALID))
2242 if (!(flags & PAGE_WRITE))
2244 /* XXX: this code should not depend on lock_user */
2245 if (!(p = lock_user(VERIFY_WRITE, addr, l, 0)))
2248 unlock_user(p, addr, l);
2250 if (!(flags & PAGE_READ))
2252 /* XXX: this code should not depend on lock_user */
2253 if (!(p = lock_user(VERIFY_READ, addr, l, 1)))
2256 unlock_user(p, addr, 0);
2267 static void invalidate_and_set_dirty(MemoryRegion *mr, hwaddr addr,
2270 uint8_t dirty_log_mask = memory_region_get_dirty_log_mask(mr);
2271 /* No early return if dirty_log_mask is or becomes 0, because
2272 * cpu_physical_memory_set_dirty_range will still call
2273 * xen_modified_memory.
2275 if (dirty_log_mask) {
2277 cpu_physical_memory_range_includes_clean(addr, length, dirty_log_mask);
2279 if (dirty_log_mask & (1 << DIRTY_MEMORY_CODE)) {
2280 tb_invalidate_phys_range(addr, addr + length);
2281 dirty_log_mask &= ~(1 << DIRTY_MEMORY_CODE);
2283 cpu_physical_memory_set_dirty_range(addr, length, dirty_log_mask);
2286 static int memory_access_size(MemoryRegion *mr, unsigned l, hwaddr addr)
2288 unsigned access_size_max = mr->ops->valid.max_access_size;
2290 /* Regions are assumed to support 1-4 byte accesses unless
2291 otherwise specified. */
2292 if (access_size_max == 0) {
2293 access_size_max = 4;
2296 /* Bound the maximum access by the alignment of the address. */
2297 if (!mr->ops->impl.unaligned) {
2298 unsigned align_size_max = addr & -addr;
2299 if (align_size_max != 0 && align_size_max < access_size_max) {
2300 access_size_max = align_size_max;
2304 /* Don't attempt accesses larger than the maximum. */
2305 if (l > access_size_max) {
2306 l = access_size_max;
2309 l = 1 << (qemu_fls(l) - 1);
2315 MemTxResult address_space_rw(AddressSpace *as, hwaddr addr, MemTxAttrs attrs,
2316 uint8_t *buf, int len, bool is_write)
2323 MemTxResult result = MEMTX_OK;
2328 mr = address_space_translate(as, addr, &addr1, &l, is_write);
2331 if (!memory_access_is_direct(mr, is_write)) {
2332 l = memory_access_size(mr, l, addr1);
2333 /* XXX: could force current_cpu to NULL to avoid
2337 /* 64 bit write access */
2339 result |= memory_region_dispatch_write(mr, addr1, val, 8,
2343 /* 32 bit write access */
2345 result |= memory_region_dispatch_write(mr, addr1, val, 4,
2349 /* 16 bit write access */
2351 result |= memory_region_dispatch_write(mr, addr1, val, 2,
2355 /* 8 bit write access */
2357 result |= memory_region_dispatch_write(mr, addr1, val, 1,
2364 addr1 += memory_region_get_ram_addr(mr);
2366 ptr = qemu_get_ram_ptr(addr1);
2367 memcpy(ptr, buf, l);
2368 invalidate_and_set_dirty(mr, addr1, l);
2371 if (!memory_access_is_direct(mr, is_write)) {
2373 l = memory_access_size(mr, l, addr1);
2376 /* 64 bit read access */
2377 result |= memory_region_dispatch_read(mr, addr1, &val, 8,
2382 /* 32 bit read access */
2383 result |= memory_region_dispatch_read(mr, addr1, &val, 4,
2388 /* 16 bit read access */
2389 result |= memory_region_dispatch_read(mr, addr1, &val, 2,
2394 /* 8 bit read access */
2395 result |= memory_region_dispatch_read(mr, addr1, &val, 1,
2404 ptr = qemu_get_ram_ptr(mr->ram_addr + addr1);
2405 memcpy(buf, ptr, l);
2417 MemTxResult address_space_write(AddressSpace *as, hwaddr addr, MemTxAttrs attrs,
2418 const uint8_t *buf, int len)
2420 return address_space_rw(as, addr, attrs, (uint8_t *)buf, len, true);
2423 MemTxResult address_space_read(AddressSpace *as, hwaddr addr, MemTxAttrs attrs,
2424 uint8_t *buf, int len)
2426 return address_space_rw(as, addr, attrs, buf, len, false);
2430 void cpu_physical_memory_rw(hwaddr addr, uint8_t *buf,
2431 int len, int is_write)
2433 address_space_rw(&address_space_memory, addr, MEMTXATTRS_UNSPECIFIED,
2434 buf, len, is_write);
2437 enum write_rom_type {
2442 static inline void cpu_physical_memory_write_rom_internal(AddressSpace *as,
2443 hwaddr addr, const uint8_t *buf, int len, enum write_rom_type type)
2453 mr = address_space_translate(as, addr, &addr1, &l, true);
2455 if (!(memory_region_is_ram(mr) ||
2456 memory_region_is_romd(mr))) {
2459 addr1 += memory_region_get_ram_addr(mr);
2461 ptr = qemu_get_ram_ptr(addr1);
2464 memcpy(ptr, buf, l);
2465 invalidate_and_set_dirty(mr, addr1, l);
2468 flush_icache_range((uintptr_t)ptr, (uintptr_t)ptr + l);
2479 /* used for ROM loading : can write in RAM and ROM */
2480 void cpu_physical_memory_write_rom(AddressSpace *as, hwaddr addr,
2481 const uint8_t *buf, int len)
2483 cpu_physical_memory_write_rom_internal(as, addr, buf, len, WRITE_DATA);
2486 void cpu_flush_icache_range(hwaddr start, int len)
2489 * This function should do the same thing as an icache flush that was
2490 * triggered from within the guest. For TCG we are always cache coherent,
2491 * so there is no need to flush anything. For KVM / Xen we need to flush
2492 * the host's instruction cache at least.
2494 if (tcg_enabled()) {
2498 cpu_physical_memory_write_rom_internal(&address_space_memory,
2499 start, NULL, len, FLUSH_CACHE);
2510 static BounceBuffer bounce;
2512 typedef struct MapClient {
2514 QLIST_ENTRY(MapClient) link;
2517 QemuMutex map_client_list_lock;
2518 static QLIST_HEAD(map_client_list, MapClient) map_client_list
2519 = QLIST_HEAD_INITIALIZER(map_client_list);
2521 static void cpu_unregister_map_client_do(MapClient *client)
2523 QLIST_REMOVE(client, link);
2527 static void cpu_notify_map_clients_locked(void)
2531 while (!QLIST_EMPTY(&map_client_list)) {
2532 client = QLIST_FIRST(&map_client_list);
2533 qemu_bh_schedule(client->bh);
2534 cpu_unregister_map_client_do(client);
2538 void cpu_register_map_client(QEMUBH *bh)
2540 MapClient *client = g_malloc(sizeof(*client));
2542 qemu_mutex_lock(&map_client_list_lock);
2544 QLIST_INSERT_HEAD(&map_client_list, client, link);
2545 if (!atomic_read(&bounce.in_use)) {
2546 cpu_notify_map_clients_locked();
2548 qemu_mutex_unlock(&map_client_list_lock);
2551 void cpu_exec_init_all(void)
2553 qemu_mutex_init(&ram_list.mutex);
2556 qemu_mutex_init(&map_client_list_lock);
2559 void cpu_unregister_map_client(QEMUBH *bh)
2563 qemu_mutex_lock(&map_client_list_lock);
2564 QLIST_FOREACH(client, &map_client_list, link) {
2565 if (client->bh == bh) {
2566 cpu_unregister_map_client_do(client);
2570 qemu_mutex_unlock(&map_client_list_lock);
2573 static void cpu_notify_map_clients(void)
2575 qemu_mutex_lock(&map_client_list_lock);
2576 cpu_notify_map_clients_locked();
2577 qemu_mutex_unlock(&map_client_list_lock);
2580 bool address_space_access_valid(AddressSpace *as, hwaddr addr, int len, bool is_write)
2588 mr = address_space_translate(as, addr, &xlat, &l, is_write);
2589 if (!memory_access_is_direct(mr, is_write)) {
2590 l = memory_access_size(mr, l, addr);
2591 if (!memory_region_access_valid(mr, xlat, l, is_write)) {
2603 /* Map a physical memory region into a host virtual address.
2604 * May map a subset of the requested range, given by and returned in *plen.
2605 * May return NULL if resources needed to perform the mapping are exhausted.
2606 * Use only for reads OR writes - not for read-modify-write operations.
2607 * Use cpu_register_map_client() to know when retrying the map operation is
2608 * likely to succeed.
2610 void *address_space_map(AddressSpace *as,
2617 hwaddr l, xlat, base;
2618 MemoryRegion *mr, *this_mr;
2627 mr = address_space_translate(as, addr, &xlat, &l, is_write);
2629 if (!memory_access_is_direct(mr, is_write)) {
2630 if (atomic_xchg(&bounce.in_use, true)) {
2634 /* Avoid unbounded allocations */
2635 l = MIN(l, TARGET_PAGE_SIZE);
2636 bounce.buffer = qemu_memalign(TARGET_PAGE_SIZE, l);
2640 memory_region_ref(mr);
2643 address_space_read(as, addr, MEMTXATTRS_UNSPECIFIED,
2649 return bounce.buffer;
2653 raddr = memory_region_get_ram_addr(mr);
2664 this_mr = address_space_translate(as, addr, &xlat, &l, is_write);
2665 if (this_mr != mr || xlat != base + done) {
2670 memory_region_ref(mr);
2673 return qemu_ram_ptr_length(raddr + base, plen);
2676 /* Unmaps a memory region previously mapped by address_space_map().
2677 * Will also mark the memory as dirty if is_write == 1. access_len gives
2678 * the amount of memory that was actually read or written by the caller.
2680 void address_space_unmap(AddressSpace *as, void *buffer, hwaddr len,
2681 int is_write, hwaddr access_len)
2683 if (buffer != bounce.buffer) {
2687 mr = qemu_ram_addr_from_host(buffer, &addr1);
2690 invalidate_and_set_dirty(mr, addr1, access_len);
2692 if (xen_enabled()) {
2693 xen_invalidate_map_cache_entry(buffer);
2695 memory_region_unref(mr);
2699 address_space_write(as, bounce.addr, MEMTXATTRS_UNSPECIFIED,
2700 bounce.buffer, access_len);
2702 qemu_vfree(bounce.buffer);
2703 bounce.buffer = NULL;
2704 memory_region_unref(bounce.mr);
2705 atomic_mb_set(&bounce.in_use, false);
2706 cpu_notify_map_clients();
2709 void *cpu_physical_memory_map(hwaddr addr,
2713 return address_space_map(&address_space_memory, addr, plen, is_write);
2716 void cpu_physical_memory_unmap(void *buffer, hwaddr len,
2717 int is_write, hwaddr access_len)
2719 return address_space_unmap(&address_space_memory, buffer, len, is_write, access_len);
2722 /* warning: addr must be aligned */
2723 static inline uint32_t address_space_ldl_internal(AddressSpace *as, hwaddr addr,
2725 MemTxResult *result,
2726 enum device_endian endian)
2736 mr = address_space_translate(as, addr, &addr1, &l, false);
2737 if (l < 4 || !memory_access_is_direct(mr, false)) {
2739 r = memory_region_dispatch_read(mr, addr1, &val, 4, attrs);
2740 #if defined(TARGET_WORDS_BIGENDIAN)
2741 if (endian == DEVICE_LITTLE_ENDIAN) {
2745 if (endian == DEVICE_BIG_ENDIAN) {
2751 ptr = qemu_get_ram_ptr((memory_region_get_ram_addr(mr)
2755 case DEVICE_LITTLE_ENDIAN:
2756 val = ldl_le_p(ptr);
2758 case DEVICE_BIG_ENDIAN:
2759 val = ldl_be_p(ptr);
2774 uint32_t address_space_ldl(AddressSpace *as, hwaddr addr,
2775 MemTxAttrs attrs, MemTxResult *result)
2777 return address_space_ldl_internal(as, addr, attrs, result,
2778 DEVICE_NATIVE_ENDIAN);
2781 uint32_t address_space_ldl_le(AddressSpace *as, hwaddr addr,
2782 MemTxAttrs attrs, MemTxResult *result)
2784 return address_space_ldl_internal(as, addr, attrs, result,
2785 DEVICE_LITTLE_ENDIAN);
2788 uint32_t address_space_ldl_be(AddressSpace *as, hwaddr addr,
2789 MemTxAttrs attrs, MemTxResult *result)
2791 return address_space_ldl_internal(as, addr, attrs, result,
2795 uint32_t ldl_phys(AddressSpace *as, hwaddr addr)
2797 return address_space_ldl(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
2800 uint32_t ldl_le_phys(AddressSpace *as, hwaddr addr)
2802 return address_space_ldl_le(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
2805 uint32_t ldl_be_phys(AddressSpace *as, hwaddr addr)
2807 return address_space_ldl_be(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
2810 /* warning: addr must be aligned */
2811 static inline uint64_t address_space_ldq_internal(AddressSpace *as, hwaddr addr,
2813 MemTxResult *result,
2814 enum device_endian endian)
2824 mr = address_space_translate(as, addr, &addr1, &l,
2826 if (l < 8 || !memory_access_is_direct(mr, false)) {
2828 r = memory_region_dispatch_read(mr, addr1, &val, 8, attrs);
2829 #if defined(TARGET_WORDS_BIGENDIAN)
2830 if (endian == DEVICE_LITTLE_ENDIAN) {
2834 if (endian == DEVICE_BIG_ENDIAN) {
2840 ptr = qemu_get_ram_ptr((memory_region_get_ram_addr(mr)
2844 case DEVICE_LITTLE_ENDIAN:
2845 val = ldq_le_p(ptr);
2847 case DEVICE_BIG_ENDIAN:
2848 val = ldq_be_p(ptr);
2863 uint64_t address_space_ldq(AddressSpace *as, hwaddr addr,
2864 MemTxAttrs attrs, MemTxResult *result)
2866 return address_space_ldq_internal(as, addr, attrs, result,
2867 DEVICE_NATIVE_ENDIAN);
2870 uint64_t address_space_ldq_le(AddressSpace *as, hwaddr addr,
2871 MemTxAttrs attrs, MemTxResult *result)
2873 return address_space_ldq_internal(as, addr, attrs, result,
2874 DEVICE_LITTLE_ENDIAN);
2877 uint64_t address_space_ldq_be(AddressSpace *as, hwaddr addr,
2878 MemTxAttrs attrs, MemTxResult *result)
2880 return address_space_ldq_internal(as, addr, attrs, result,
2884 uint64_t ldq_phys(AddressSpace *as, hwaddr addr)
2886 return address_space_ldq(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
2889 uint64_t ldq_le_phys(AddressSpace *as, hwaddr addr)
2891 return address_space_ldq_le(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
2894 uint64_t ldq_be_phys(AddressSpace *as, hwaddr addr)
2896 return address_space_ldq_be(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
2900 uint32_t address_space_ldub(AddressSpace *as, hwaddr addr,
2901 MemTxAttrs attrs, MemTxResult *result)
2906 r = address_space_rw(as, addr, attrs, &val, 1, 0);
2913 uint32_t ldub_phys(AddressSpace *as, hwaddr addr)
2915 return address_space_ldub(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
2918 /* warning: addr must be aligned */
2919 static inline uint32_t address_space_lduw_internal(AddressSpace *as,
2922 MemTxResult *result,
2923 enum device_endian endian)
2933 mr = address_space_translate(as, addr, &addr1, &l,
2935 if (l < 2 || !memory_access_is_direct(mr, false)) {
2937 r = memory_region_dispatch_read(mr, addr1, &val, 2, attrs);
2938 #if defined(TARGET_WORDS_BIGENDIAN)
2939 if (endian == DEVICE_LITTLE_ENDIAN) {
2943 if (endian == DEVICE_BIG_ENDIAN) {
2949 ptr = qemu_get_ram_ptr((memory_region_get_ram_addr(mr)
2953 case DEVICE_LITTLE_ENDIAN:
2954 val = lduw_le_p(ptr);
2956 case DEVICE_BIG_ENDIAN:
2957 val = lduw_be_p(ptr);
2972 uint32_t address_space_lduw(AddressSpace *as, hwaddr addr,
2973 MemTxAttrs attrs, MemTxResult *result)
2975 return address_space_lduw_internal(as, addr, attrs, result,
2976 DEVICE_NATIVE_ENDIAN);
2979 uint32_t address_space_lduw_le(AddressSpace *as, hwaddr addr,
2980 MemTxAttrs attrs, MemTxResult *result)
2982 return address_space_lduw_internal(as, addr, attrs, result,
2983 DEVICE_LITTLE_ENDIAN);
2986 uint32_t address_space_lduw_be(AddressSpace *as, hwaddr addr,
2987 MemTxAttrs attrs, MemTxResult *result)
2989 return address_space_lduw_internal(as, addr, attrs, result,
2993 uint32_t lduw_phys(AddressSpace *as, hwaddr addr)
2995 return address_space_lduw(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
2998 uint32_t lduw_le_phys(AddressSpace *as, hwaddr addr)
3000 return address_space_lduw_le(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3003 uint32_t lduw_be_phys(AddressSpace *as, hwaddr addr)
3005 return address_space_lduw_be(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3008 /* warning: addr must be aligned. The ram page is not masked as dirty
3009 and the code inside is not invalidated. It is useful if the dirty
3010 bits are used to track modified PTEs */
3011 void address_space_stl_notdirty(AddressSpace *as, hwaddr addr, uint32_t val,
3012 MemTxAttrs attrs, MemTxResult *result)
3019 uint8_t dirty_log_mask;
3022 mr = address_space_translate(as, addr, &addr1, &l,
3024 if (l < 4 || !memory_access_is_direct(mr, true)) {
3025 r = memory_region_dispatch_write(mr, addr1, val, 4, attrs);
3027 addr1 += memory_region_get_ram_addr(mr) & TARGET_PAGE_MASK;
3028 ptr = qemu_get_ram_ptr(addr1);
3031 dirty_log_mask = memory_region_get_dirty_log_mask(mr);
3032 dirty_log_mask &= ~(1 << DIRTY_MEMORY_CODE);
3033 cpu_physical_memory_set_dirty_range(addr1, 4, dirty_log_mask);
3042 void stl_phys_notdirty(AddressSpace *as, hwaddr addr, uint32_t val)
3044 address_space_stl_notdirty(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3047 /* warning: addr must be aligned */
3048 static inline void address_space_stl_internal(AddressSpace *as,
3049 hwaddr addr, uint32_t val,
3051 MemTxResult *result,
3052 enum device_endian endian)
3061 mr = address_space_translate(as, addr, &addr1, &l,
3063 if (l < 4 || !memory_access_is_direct(mr, true)) {
3064 #if defined(TARGET_WORDS_BIGENDIAN)
3065 if (endian == DEVICE_LITTLE_ENDIAN) {
3069 if (endian == DEVICE_BIG_ENDIAN) {
3073 r = memory_region_dispatch_write(mr, addr1, val, 4, attrs);
3076 addr1 += memory_region_get_ram_addr(mr) & TARGET_PAGE_MASK;
3077 ptr = qemu_get_ram_ptr(addr1);
3079 case DEVICE_LITTLE_ENDIAN:
3082 case DEVICE_BIG_ENDIAN:
3089 invalidate_and_set_dirty(mr, addr1, 4);
3098 void address_space_stl(AddressSpace *as, hwaddr addr, uint32_t val,
3099 MemTxAttrs attrs, MemTxResult *result)
3101 address_space_stl_internal(as, addr, val, attrs, result,
3102 DEVICE_NATIVE_ENDIAN);
3105 void address_space_stl_le(AddressSpace *as, hwaddr addr, uint32_t val,
3106 MemTxAttrs attrs, MemTxResult *result)
3108 address_space_stl_internal(as, addr, val, attrs, result,
3109 DEVICE_LITTLE_ENDIAN);
3112 void address_space_stl_be(AddressSpace *as, hwaddr addr, uint32_t val,
3113 MemTxAttrs attrs, MemTxResult *result)
3115 address_space_stl_internal(as, addr, val, attrs, result,
3119 void stl_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3121 address_space_stl(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3124 void stl_le_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3126 address_space_stl_le(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3129 void stl_be_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3131 address_space_stl_be(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3135 void address_space_stb(AddressSpace *as, hwaddr addr, uint32_t val,
3136 MemTxAttrs attrs, MemTxResult *result)
3141 r = address_space_rw(as, addr, attrs, &v, 1, 1);
3147 void stb_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3149 address_space_stb(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3152 /* warning: addr must be aligned */
3153 static inline void address_space_stw_internal(AddressSpace *as,
3154 hwaddr addr, uint32_t val,
3156 MemTxResult *result,
3157 enum device_endian endian)
3166 mr = address_space_translate(as, addr, &addr1, &l, true);
3167 if (l < 2 || !memory_access_is_direct(mr, true)) {
3168 #if defined(TARGET_WORDS_BIGENDIAN)
3169 if (endian == DEVICE_LITTLE_ENDIAN) {
3173 if (endian == DEVICE_BIG_ENDIAN) {
3177 r = memory_region_dispatch_write(mr, addr1, val, 2, attrs);
3180 addr1 += memory_region_get_ram_addr(mr) & TARGET_PAGE_MASK;
3181 ptr = qemu_get_ram_ptr(addr1);
3183 case DEVICE_LITTLE_ENDIAN:
3186 case DEVICE_BIG_ENDIAN:
3193 invalidate_and_set_dirty(mr, addr1, 2);
3202 void address_space_stw(AddressSpace *as, hwaddr addr, uint32_t val,
3203 MemTxAttrs attrs, MemTxResult *result)
3205 address_space_stw_internal(as, addr, val, attrs, result,
3206 DEVICE_NATIVE_ENDIAN);
3209 void address_space_stw_le(AddressSpace *as, hwaddr addr, uint32_t val,
3210 MemTxAttrs attrs, MemTxResult *result)
3212 address_space_stw_internal(as, addr, val, attrs, result,
3213 DEVICE_LITTLE_ENDIAN);
3216 void address_space_stw_be(AddressSpace *as, hwaddr addr, uint32_t val,
3217 MemTxAttrs attrs, MemTxResult *result)
3219 address_space_stw_internal(as, addr, val, attrs, result,
3223 void stw_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3225 address_space_stw(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3228 void stw_le_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3230 address_space_stw_le(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3233 void stw_be_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3235 address_space_stw_be(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3239 void address_space_stq(AddressSpace *as, hwaddr addr, uint64_t val,
3240 MemTxAttrs attrs, MemTxResult *result)
3244 r = address_space_rw(as, addr, attrs, (void *) &val, 8, 1);
3250 void address_space_stq_le(AddressSpace *as, hwaddr addr, uint64_t val,
3251 MemTxAttrs attrs, MemTxResult *result)
3254 val = cpu_to_le64(val);
3255 r = address_space_rw(as, addr, attrs, (void *) &val, 8, 1);
3260 void address_space_stq_be(AddressSpace *as, hwaddr addr, uint64_t val,
3261 MemTxAttrs attrs, MemTxResult *result)
3264 val = cpu_to_be64(val);
3265 r = address_space_rw(as, addr, attrs, (void *) &val, 8, 1);
3271 void stq_phys(AddressSpace *as, hwaddr addr, uint64_t val)
3273 address_space_stq(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3276 void stq_le_phys(AddressSpace *as, hwaddr addr, uint64_t val)
3278 address_space_stq_le(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3281 void stq_be_phys(AddressSpace *as, hwaddr addr, uint64_t val)
3283 address_space_stq_be(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3286 /* virtual memory access for debug (includes writing to ROM) */
3287 int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
3288 uint8_t *buf, int len, int is_write)
3295 page = addr & TARGET_PAGE_MASK;
3296 phys_addr = cpu_get_phys_page_debug(cpu, page);
3297 /* if no physical page mapped, return an error */
3298 if (phys_addr == -1)
3300 l = (page + TARGET_PAGE_SIZE) - addr;
3303 phys_addr += (addr & ~TARGET_PAGE_MASK);
3305 cpu_physical_memory_write_rom(cpu->as, phys_addr, buf, l);
3307 address_space_rw(cpu->as, phys_addr, MEMTXATTRS_UNSPECIFIED,
3319 * A helper function for the _utterly broken_ virtio device model to find out if
3320 * it's running on a big endian machine. Don't do this at home kids!
3322 bool target_words_bigendian(void);
3323 bool target_words_bigendian(void)
3325 #if defined(TARGET_WORDS_BIGENDIAN)
3332 #ifndef CONFIG_USER_ONLY
3333 bool cpu_physical_memory_is_io(hwaddr phys_addr)
3340 mr = address_space_translate(&address_space_memory,
3341 phys_addr, &phys_addr, &l, false);
3343 res = !(memory_region_is_ram(mr) || memory_region_is_romd(mr));
3348 int qemu_ram_foreach_block(RAMBlockIterFunc func, void *opaque)
3354 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
3355 ret = func(block->idstr, block->host, block->offset,
3356 block->used_length, opaque);