target-arm/arm-powerctl: wake up sleeping CPUs
[qemu/ar7.git] / exec.c
blobab3062936701479cb1c1435b93889aa9e33a330e
1 /*
2 * Virtual page mapping
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/>.
19 #include "qemu/osdep.h"
20 #include "qapi/error.h"
21 #ifndef _WIN32
22 #endif
24 #include "qemu/cutils.h"
25 #include "cpu.h"
26 #include "exec/exec-all.h"
27 #include "tcg.h"
28 #include "hw/qdev-core.h"
29 #if !defined(CONFIG_USER_ONLY)
30 #include "hw/boards.h"
31 #include "hw/xen/xen.h"
32 #endif
33 #include "sysemu/kvm.h"
34 #include "sysemu/sysemu.h"
35 #include "qemu/timer.h"
36 #include "qemu/config-file.h"
37 #include "qemu/error-report.h"
38 #if defined(CONFIG_USER_ONLY)
39 #include "qemu.h"
40 #else /* !CONFIG_USER_ONLY */
41 #include "hw/hw.h"
42 #include "exec/memory.h"
43 #include "exec/ioport.h"
44 #include "sysemu/dma.h"
45 #include "exec/address-spaces.h"
46 #include "sysemu/xen-mapcache.h"
47 #include "trace.h"
48 #endif
49 #include "exec/cpu-all.h"
50 #include "qemu/rcu_queue.h"
51 #include "qemu/main-loop.h"
52 #include "translate-all.h"
53 #include "sysemu/replay.h"
55 #include "exec/memory-internal.h"
56 #include "exec/ram_addr.h"
57 #include "exec/log.h"
59 #include "migration/vmstate.h"
61 #include "qemu/range.h"
62 #ifndef _WIN32
63 #include "qemu/mmap-alloc.h"
64 #endif
66 //#define DEBUG_SUBPAGE
68 #if !defined(CONFIG_USER_ONLY)
69 /* ram_list is read under rcu_read_lock()/rcu_read_unlock(). Writes
70 * are protected by the ramlist lock.
72 RAMList ram_list = { .blocks = QLIST_HEAD_INITIALIZER(ram_list.blocks) };
74 static MemoryRegion *system_memory;
75 static MemoryRegion *system_io;
77 AddressSpace address_space_io;
78 AddressSpace address_space_memory;
80 MemoryRegion io_mem_rom, io_mem_notdirty;
81 static MemoryRegion io_mem_unassigned;
83 /* RAM is pre-allocated and passed into qemu_ram_alloc_from_ptr */
84 #define RAM_PREALLOC (1 << 0)
86 /* RAM is mmap-ed with MAP_SHARED */
87 #define RAM_SHARED (1 << 1)
89 /* Only a portion of RAM (used_length) is actually used, and migrated.
90 * This used_length size can change across reboots.
92 #define RAM_RESIZEABLE (1 << 2)
94 #endif
96 #ifdef TARGET_PAGE_BITS_VARY
97 int target_page_bits;
98 bool target_page_bits_decided;
99 #endif
101 struct CPUTailQ cpus = QTAILQ_HEAD_INITIALIZER(cpus);
102 /* current CPU in the current thread. It is only valid inside
103 cpu_exec() */
104 __thread CPUState *current_cpu;
105 /* 0 = Do not count executed instructions.
106 1 = Precise instruction counting.
107 2 = Adaptive rate instruction counting. */
108 int use_icount;
110 bool set_preferred_target_page_bits(int bits)
112 /* The target page size is the lowest common denominator for all
113 * the CPUs in the system, so we can only make it smaller, never
114 * larger. And we can't make it smaller once we've committed to
115 * a particular size.
117 #ifdef TARGET_PAGE_BITS_VARY
118 assert(bits >= TARGET_PAGE_BITS_MIN);
119 if (target_page_bits == 0 || target_page_bits > bits) {
120 if (target_page_bits_decided) {
121 return false;
123 target_page_bits = bits;
125 #endif
126 return true;
129 #if !defined(CONFIG_USER_ONLY)
131 static void finalize_target_page_bits(void)
133 #ifdef TARGET_PAGE_BITS_VARY
134 if (target_page_bits == 0) {
135 target_page_bits = TARGET_PAGE_BITS_MIN;
137 target_page_bits_decided = true;
138 #endif
141 typedef struct PhysPageEntry PhysPageEntry;
143 struct PhysPageEntry {
144 /* How many bits skip to next level (in units of L2_SIZE). 0 for a leaf. */
145 uint32_t skip : 6;
146 /* index into phys_sections (!skip) or phys_map_nodes (skip) */
147 uint32_t ptr : 26;
150 #define PHYS_MAP_NODE_NIL (((uint32_t)~0) >> 6)
152 /* Size of the L2 (and L3, etc) page tables. */
153 #define ADDR_SPACE_BITS 64
155 #define P_L2_BITS 9
156 #define P_L2_SIZE (1 << P_L2_BITS)
158 #define P_L2_LEVELS (((ADDR_SPACE_BITS - TARGET_PAGE_BITS - 1) / P_L2_BITS) + 1)
160 typedef PhysPageEntry Node[P_L2_SIZE];
162 typedef struct PhysPageMap {
163 struct rcu_head rcu;
165 unsigned sections_nb;
166 unsigned sections_nb_alloc;
167 unsigned nodes_nb;
168 unsigned nodes_nb_alloc;
169 Node *nodes;
170 MemoryRegionSection *sections;
171 } PhysPageMap;
173 struct AddressSpaceDispatch {
174 struct rcu_head rcu;
176 MemoryRegionSection *mru_section;
177 /* This is a multi-level map on the physical address space.
178 * The bottom level has pointers to MemoryRegionSections.
180 PhysPageEntry phys_map;
181 PhysPageMap map;
182 AddressSpace *as;
185 #define SUBPAGE_IDX(addr) ((addr) & ~TARGET_PAGE_MASK)
186 typedef struct subpage_t {
187 MemoryRegion iomem;
188 AddressSpace *as;
189 hwaddr base;
190 uint16_t sub_section[];
191 } subpage_t;
193 #define PHYS_SECTION_UNASSIGNED 0
194 #define PHYS_SECTION_NOTDIRTY 1
195 #define PHYS_SECTION_ROM 2
196 #define PHYS_SECTION_WATCH 3
198 static void io_mem_init(void);
199 static void memory_map_init(void);
200 static void tcg_commit(MemoryListener *listener);
202 static MemoryRegion io_mem_watch;
205 * CPUAddressSpace: all the information a CPU needs about an AddressSpace
206 * @cpu: the CPU whose AddressSpace this is
207 * @as: the AddressSpace itself
208 * @memory_dispatch: its dispatch pointer (cached, RCU protected)
209 * @tcg_as_listener: listener for tracking changes to the AddressSpace
211 struct CPUAddressSpace {
212 CPUState *cpu;
213 AddressSpace *as;
214 struct AddressSpaceDispatch *memory_dispatch;
215 MemoryListener tcg_as_listener;
218 #endif
220 #if !defined(CONFIG_USER_ONLY)
222 static void phys_map_node_reserve(PhysPageMap *map, unsigned nodes)
224 static unsigned alloc_hint = 16;
225 if (map->nodes_nb + nodes > map->nodes_nb_alloc) {
226 map->nodes_nb_alloc = MAX(map->nodes_nb_alloc, alloc_hint);
227 map->nodes_nb_alloc = MAX(map->nodes_nb_alloc, map->nodes_nb + nodes);
228 map->nodes = g_renew(Node, map->nodes, map->nodes_nb_alloc);
229 alloc_hint = map->nodes_nb_alloc;
233 static uint32_t phys_map_node_alloc(PhysPageMap *map, bool leaf)
235 unsigned i;
236 uint32_t ret;
237 PhysPageEntry e;
238 PhysPageEntry *p;
240 ret = map->nodes_nb++;
241 p = map->nodes[ret];
242 assert(ret != PHYS_MAP_NODE_NIL);
243 assert(ret != map->nodes_nb_alloc);
245 e.skip = leaf ? 0 : 1;
246 e.ptr = leaf ? PHYS_SECTION_UNASSIGNED : PHYS_MAP_NODE_NIL;
247 for (i = 0; i < P_L2_SIZE; ++i) {
248 memcpy(&p[i], &e, sizeof(e));
250 return ret;
253 static void phys_page_set_level(PhysPageMap *map, PhysPageEntry *lp,
254 hwaddr *index, hwaddr *nb, uint16_t leaf,
255 int level)
257 PhysPageEntry *p;
258 hwaddr step = (hwaddr)1 << (level * P_L2_BITS);
260 if (lp->skip && lp->ptr == PHYS_MAP_NODE_NIL) {
261 lp->ptr = phys_map_node_alloc(map, level == 0);
263 p = map->nodes[lp->ptr];
264 lp = &p[(*index >> (level * P_L2_BITS)) & (P_L2_SIZE - 1)];
266 while (*nb && lp < &p[P_L2_SIZE]) {
267 if ((*index & (step - 1)) == 0 && *nb >= step) {
268 lp->skip = 0;
269 lp->ptr = leaf;
270 *index += step;
271 *nb -= step;
272 } else {
273 phys_page_set_level(map, lp, index, nb, leaf, level - 1);
275 ++lp;
279 static void phys_page_set(AddressSpaceDispatch *d,
280 hwaddr index, hwaddr nb,
281 uint16_t leaf)
283 /* Wildly overreserve - it doesn't matter much. */
284 phys_map_node_reserve(&d->map, 3 * P_L2_LEVELS);
286 phys_page_set_level(&d->map, &d->phys_map, &index, &nb, leaf, P_L2_LEVELS - 1);
289 /* Compact a non leaf page entry. Simply detect that the entry has a single child,
290 * and update our entry so we can skip it and go directly to the destination.
292 static void phys_page_compact(PhysPageEntry *lp, Node *nodes)
294 unsigned valid_ptr = P_L2_SIZE;
295 int valid = 0;
296 PhysPageEntry *p;
297 int i;
299 if (lp->ptr == PHYS_MAP_NODE_NIL) {
300 return;
303 p = nodes[lp->ptr];
304 for (i = 0; i < P_L2_SIZE; i++) {
305 if (p[i].ptr == PHYS_MAP_NODE_NIL) {
306 continue;
309 valid_ptr = i;
310 valid++;
311 if (p[i].skip) {
312 phys_page_compact(&p[i], nodes);
316 /* We can only compress if there's only one child. */
317 if (valid != 1) {
318 return;
321 assert(valid_ptr < P_L2_SIZE);
323 /* Don't compress if it won't fit in the # of bits we have. */
324 if (lp->skip + p[valid_ptr].skip >= (1 << 3)) {
325 return;
328 lp->ptr = p[valid_ptr].ptr;
329 if (!p[valid_ptr].skip) {
330 /* If our only child is a leaf, make this a leaf. */
331 /* By design, we should have made this node a leaf to begin with so we
332 * should never reach here.
333 * But since it's so simple to handle this, let's do it just in case we
334 * change this rule.
336 lp->skip = 0;
337 } else {
338 lp->skip += p[valid_ptr].skip;
342 static void phys_page_compact_all(AddressSpaceDispatch *d, int nodes_nb)
344 if (d->phys_map.skip) {
345 phys_page_compact(&d->phys_map, d->map.nodes);
349 static inline bool section_covers_addr(const MemoryRegionSection *section,
350 hwaddr addr)
352 /* Memory topology clips a memory region to [0, 2^64); size.hi > 0 means
353 * the section must cover the entire address space.
355 return int128_gethi(section->size) ||
356 range_covers_byte(section->offset_within_address_space,
357 int128_getlo(section->size), addr);
360 static MemoryRegionSection *phys_page_find(PhysPageEntry lp, hwaddr addr,
361 Node *nodes, MemoryRegionSection *sections)
363 PhysPageEntry *p;
364 hwaddr index = addr >> TARGET_PAGE_BITS;
365 int i;
367 for (i = P_L2_LEVELS; lp.skip && (i -= lp.skip) >= 0;) {
368 if (lp.ptr == PHYS_MAP_NODE_NIL) {
369 return &sections[PHYS_SECTION_UNASSIGNED];
371 p = nodes[lp.ptr];
372 lp = p[(index >> (i * P_L2_BITS)) & (P_L2_SIZE - 1)];
375 if (section_covers_addr(&sections[lp.ptr], addr)) {
376 return &sections[lp.ptr];
377 } else {
378 return &sections[PHYS_SECTION_UNASSIGNED];
382 bool memory_region_is_unassigned(MemoryRegion *mr)
384 return mr != &io_mem_rom && mr != &io_mem_notdirty && !mr->rom_device
385 && mr != &io_mem_watch;
388 /* Called from RCU critical section */
389 static MemoryRegionSection *address_space_lookup_region(AddressSpaceDispatch *d,
390 hwaddr addr,
391 bool resolve_subpage)
393 MemoryRegionSection *section = atomic_read(&d->mru_section);
394 subpage_t *subpage;
395 bool update;
397 if (section && section != &d->map.sections[PHYS_SECTION_UNASSIGNED] &&
398 section_covers_addr(section, addr)) {
399 update = false;
400 } else {
401 section = phys_page_find(d->phys_map, addr, d->map.nodes,
402 d->map.sections);
403 update = true;
405 if (resolve_subpage && section->mr->subpage) {
406 subpage = container_of(section->mr, subpage_t, iomem);
407 section = &d->map.sections[subpage->sub_section[SUBPAGE_IDX(addr)]];
409 if (update) {
410 atomic_set(&d->mru_section, section);
412 return section;
415 /* Called from RCU critical section */
416 static MemoryRegionSection *
417 address_space_translate_internal(AddressSpaceDispatch *d, hwaddr addr, hwaddr *xlat,
418 hwaddr *plen, bool resolve_subpage)
420 MemoryRegionSection *section;
421 MemoryRegion *mr;
422 Int128 diff;
424 section = address_space_lookup_region(d, addr, resolve_subpage);
425 /* Compute offset within MemoryRegionSection */
426 addr -= section->offset_within_address_space;
428 /* Compute offset within MemoryRegion */
429 *xlat = addr + section->offset_within_region;
431 mr = section->mr;
433 /* MMIO registers can be expected to perform full-width accesses based only
434 * on their address, without considering adjacent registers that could
435 * decode to completely different MemoryRegions. When such registers
436 * exist (e.g. I/O ports 0xcf8 and 0xcf9 on most PC chipsets), MMIO
437 * regions overlap wildly. For this reason we cannot clamp the accesses
438 * here.
440 * If the length is small (as is the case for address_space_ldl/stl),
441 * everything works fine. If the incoming length is large, however,
442 * the caller really has to do the clamping through memory_access_size.
444 if (memory_region_is_ram(mr)) {
445 diff = int128_sub(section->size, int128_make64(addr));
446 *plen = int128_get64(int128_min(diff, int128_make64(*plen)));
448 return section;
451 /* Called from RCU critical section */
452 MemoryRegion *address_space_translate(AddressSpace *as, hwaddr addr,
453 hwaddr *xlat, hwaddr *plen,
454 bool is_write)
456 IOMMUTLBEntry iotlb;
457 MemoryRegionSection *section;
458 MemoryRegion *mr;
460 for (;;) {
461 AddressSpaceDispatch *d = atomic_rcu_read(&as->dispatch);
462 section = address_space_translate_internal(d, addr, &addr, plen, true);
463 mr = section->mr;
465 if (!mr->iommu_ops) {
466 break;
469 iotlb = mr->iommu_ops->translate(mr, addr, is_write);
470 addr = ((iotlb.translated_addr & ~iotlb.addr_mask)
471 | (addr & iotlb.addr_mask));
472 *plen = MIN(*plen, (addr | iotlb.addr_mask) - addr + 1);
473 if (!(iotlb.perm & (1 << is_write))) {
474 mr = &io_mem_unassigned;
475 break;
478 as = iotlb.target_as;
481 if (xen_enabled() && memory_access_is_direct(mr, is_write)) {
482 hwaddr page = ((addr & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE) - addr;
483 *plen = MIN(page, *plen);
486 *xlat = addr;
487 return mr;
490 /* Called from RCU critical section */
491 MemoryRegionSection *
492 address_space_translate_for_iotlb(CPUState *cpu, int asidx, hwaddr addr,
493 hwaddr *xlat, hwaddr *plen)
495 MemoryRegionSection *section;
496 AddressSpaceDispatch *d = cpu->cpu_ases[asidx].memory_dispatch;
498 section = address_space_translate_internal(d, addr, xlat, plen, false);
500 assert(!section->mr->iommu_ops);
501 return section;
503 #endif
505 #if !defined(CONFIG_USER_ONLY)
507 static int cpu_common_post_load(void *opaque, int version_id)
509 CPUState *cpu = opaque;
511 /* 0x01 was CPU_INTERRUPT_EXIT. This line can be removed when the
512 version_id is increased. */
513 cpu->interrupt_request &= ~0x01;
514 tlb_flush(cpu, 1);
516 return 0;
519 static int cpu_common_pre_load(void *opaque)
521 CPUState *cpu = opaque;
523 cpu->exception_index = -1;
525 return 0;
528 static bool cpu_common_exception_index_needed(void *opaque)
530 CPUState *cpu = opaque;
532 return tcg_enabled() && cpu->exception_index != -1;
535 static const VMStateDescription vmstate_cpu_common_exception_index = {
536 .name = "cpu_common/exception_index",
537 .version_id = 1,
538 .minimum_version_id = 1,
539 .needed = cpu_common_exception_index_needed,
540 .fields = (VMStateField[]) {
541 VMSTATE_INT32(exception_index, CPUState),
542 VMSTATE_END_OF_LIST()
546 static bool cpu_common_crash_occurred_needed(void *opaque)
548 CPUState *cpu = opaque;
550 return cpu->crash_occurred;
553 static const VMStateDescription vmstate_cpu_common_crash_occurred = {
554 .name = "cpu_common/crash_occurred",
555 .version_id = 1,
556 .minimum_version_id = 1,
557 .needed = cpu_common_crash_occurred_needed,
558 .fields = (VMStateField[]) {
559 VMSTATE_BOOL(crash_occurred, CPUState),
560 VMSTATE_END_OF_LIST()
564 const VMStateDescription vmstate_cpu_common = {
565 .name = "cpu_common",
566 .version_id = 1,
567 .minimum_version_id = 1,
568 .pre_load = cpu_common_pre_load,
569 .post_load = cpu_common_post_load,
570 .fields = (VMStateField[]) {
571 VMSTATE_UINT32(halted, CPUState),
572 VMSTATE_UINT32(interrupt_request, CPUState),
573 VMSTATE_END_OF_LIST()
575 .subsections = (const VMStateDescription*[]) {
576 &vmstate_cpu_common_exception_index,
577 &vmstate_cpu_common_crash_occurred,
578 NULL
582 #endif
584 CPUState *qemu_get_cpu(int index)
586 CPUState *cpu;
588 CPU_FOREACH(cpu) {
589 if (cpu->cpu_index == index) {
590 return cpu;
594 return NULL;
597 #if !defined(CONFIG_USER_ONLY)
598 void cpu_address_space_init(CPUState *cpu, AddressSpace *as, int asidx)
600 CPUAddressSpace *newas;
602 /* Target code should have set num_ases before calling us */
603 assert(asidx < cpu->num_ases);
605 if (asidx == 0) {
606 /* address space 0 gets the convenience alias */
607 cpu->as = as;
610 /* KVM cannot currently support multiple address spaces. */
611 assert(asidx == 0 || !kvm_enabled());
613 if (!cpu->cpu_ases) {
614 cpu->cpu_ases = g_new0(CPUAddressSpace, cpu->num_ases);
617 newas = &cpu->cpu_ases[asidx];
618 newas->cpu = cpu;
619 newas->as = as;
620 if (tcg_enabled()) {
621 newas->tcg_as_listener.commit = tcg_commit;
622 memory_listener_register(&newas->tcg_as_listener, as);
626 AddressSpace *cpu_get_address_space(CPUState *cpu, int asidx)
628 /* Return the AddressSpace corresponding to the specified index */
629 return cpu->cpu_ases[asidx].as;
631 #endif
633 void cpu_exec_unrealizefn(CPUState *cpu)
635 CPUClass *cc = CPU_GET_CLASS(cpu);
637 cpu_list_remove(cpu);
639 if (cc->vmsd != NULL) {
640 vmstate_unregister(NULL, cc->vmsd, cpu);
642 if (qdev_get_vmsd(DEVICE(cpu)) == NULL) {
643 vmstate_unregister(NULL, &vmstate_cpu_common, cpu);
647 void cpu_exec_initfn(CPUState *cpu)
649 cpu->as = NULL;
650 cpu->num_ases = 0;
652 #ifndef CONFIG_USER_ONLY
653 cpu->thread_id = qemu_get_thread_id();
655 /* This is a softmmu CPU object, so create a property for it
656 * so users can wire up its memory. (This can't go in qom/cpu.c
657 * because that file is compiled only once for both user-mode
658 * and system builds.) The default if no link is set up is to use
659 * the system address space.
661 object_property_add_link(OBJECT(cpu), "memory", TYPE_MEMORY_REGION,
662 (Object **)&cpu->memory,
663 qdev_prop_allow_set_link_before_realize,
664 OBJ_PROP_LINK_UNREF_ON_RELEASE,
665 &error_abort);
666 cpu->memory = system_memory;
667 object_ref(OBJECT(cpu->memory));
668 #endif
671 void cpu_exec_realizefn(CPUState *cpu, Error **errp)
673 CPUClass *cc ATTRIBUTE_UNUSED = CPU_GET_CLASS(cpu);
675 cpu_list_add(cpu);
677 #ifndef CONFIG_USER_ONLY
678 if (qdev_get_vmsd(DEVICE(cpu)) == NULL) {
679 vmstate_register(NULL, cpu->cpu_index, &vmstate_cpu_common, cpu);
681 if (cc->vmsd != NULL) {
682 vmstate_register(NULL, cpu->cpu_index, cc->vmsd, cpu);
684 #endif
687 #if defined(CONFIG_USER_ONLY)
688 static void breakpoint_invalidate(CPUState *cpu, target_ulong pc)
690 tb_invalidate_phys_page_range(pc, pc + 1, 0);
692 #else
693 static void breakpoint_invalidate(CPUState *cpu, target_ulong pc)
695 MemTxAttrs attrs;
696 hwaddr phys = cpu_get_phys_page_attrs_debug(cpu, pc, &attrs);
697 int asidx = cpu_asidx_from_attrs(cpu, attrs);
698 if (phys != -1) {
699 tb_invalidate_phys_addr(cpu->cpu_ases[asidx].as,
700 phys | (pc & ~TARGET_PAGE_MASK));
703 #endif
705 #if defined(CONFIG_USER_ONLY)
706 void cpu_watchpoint_remove_all(CPUState *cpu, int mask)
711 int cpu_watchpoint_remove(CPUState *cpu, vaddr addr, vaddr len,
712 int flags)
714 return -ENOSYS;
717 void cpu_watchpoint_remove_by_ref(CPUState *cpu, CPUWatchpoint *watchpoint)
721 int cpu_watchpoint_insert(CPUState *cpu, vaddr addr, vaddr len,
722 int flags, CPUWatchpoint **watchpoint)
724 return -ENOSYS;
726 #else
727 /* Add a watchpoint. */
728 int cpu_watchpoint_insert(CPUState *cpu, vaddr addr, vaddr len,
729 int flags, CPUWatchpoint **watchpoint)
731 CPUWatchpoint *wp;
733 /* forbid ranges which are empty or run off the end of the address space */
734 if (len == 0 || (addr + len - 1) < addr) {
735 error_report("tried to set invalid watchpoint at %"
736 VADDR_PRIx ", len=%" VADDR_PRIu, addr, len);
737 return -EINVAL;
739 wp = g_malloc(sizeof(*wp));
741 wp->vaddr = addr;
742 wp->len = len;
743 wp->flags = flags;
745 /* keep all GDB-injected watchpoints in front */
746 if (flags & BP_GDB) {
747 QTAILQ_INSERT_HEAD(&cpu->watchpoints, wp, entry);
748 } else {
749 QTAILQ_INSERT_TAIL(&cpu->watchpoints, wp, entry);
752 tlb_flush_page(cpu, addr);
754 if (watchpoint)
755 *watchpoint = wp;
756 return 0;
759 /* Remove a specific watchpoint. */
760 int cpu_watchpoint_remove(CPUState *cpu, vaddr addr, vaddr len,
761 int flags)
763 CPUWatchpoint *wp;
765 QTAILQ_FOREACH(wp, &cpu->watchpoints, entry) {
766 if (addr == wp->vaddr && len == wp->len
767 && flags == (wp->flags & ~BP_WATCHPOINT_HIT)) {
768 cpu_watchpoint_remove_by_ref(cpu, wp);
769 return 0;
772 return -ENOENT;
775 /* Remove a specific watchpoint by reference. */
776 void cpu_watchpoint_remove_by_ref(CPUState *cpu, CPUWatchpoint *watchpoint)
778 QTAILQ_REMOVE(&cpu->watchpoints, watchpoint, entry);
780 tlb_flush_page(cpu, watchpoint->vaddr);
782 g_free(watchpoint);
785 /* Remove all matching watchpoints. */
786 void cpu_watchpoint_remove_all(CPUState *cpu, int mask)
788 CPUWatchpoint *wp, *next;
790 QTAILQ_FOREACH_SAFE(wp, &cpu->watchpoints, entry, next) {
791 if (wp->flags & mask) {
792 cpu_watchpoint_remove_by_ref(cpu, wp);
797 /* Return true if this watchpoint address matches the specified
798 * access (ie the address range covered by the watchpoint overlaps
799 * partially or completely with the address range covered by the
800 * access).
802 static inline bool cpu_watchpoint_address_matches(CPUWatchpoint *wp,
803 vaddr addr,
804 vaddr len)
806 /* We know the lengths are non-zero, but a little caution is
807 * required to avoid errors in the case where the range ends
808 * exactly at the top of the address space and so addr + len
809 * wraps round to zero.
811 vaddr wpend = wp->vaddr + wp->len - 1;
812 vaddr addrend = addr + len - 1;
814 return !(addr > wpend || wp->vaddr > addrend);
817 #endif
819 /* Add a breakpoint. */
820 int cpu_breakpoint_insert(CPUState *cpu, vaddr pc, int flags,
821 CPUBreakpoint **breakpoint)
823 CPUBreakpoint *bp;
825 bp = g_malloc(sizeof(*bp));
827 bp->pc = pc;
828 bp->flags = flags;
830 /* keep all GDB-injected breakpoints in front */
831 if (flags & BP_GDB) {
832 QTAILQ_INSERT_HEAD(&cpu->breakpoints, bp, entry);
833 } else {
834 QTAILQ_INSERT_TAIL(&cpu->breakpoints, bp, entry);
837 breakpoint_invalidate(cpu, pc);
839 if (breakpoint) {
840 *breakpoint = bp;
842 return 0;
845 /* Remove a specific breakpoint. */
846 int cpu_breakpoint_remove(CPUState *cpu, vaddr pc, int flags)
848 CPUBreakpoint *bp;
850 QTAILQ_FOREACH(bp, &cpu->breakpoints, entry) {
851 if (bp->pc == pc && bp->flags == flags) {
852 cpu_breakpoint_remove_by_ref(cpu, bp);
853 return 0;
856 return -ENOENT;
859 /* Remove a specific breakpoint by reference. */
860 void cpu_breakpoint_remove_by_ref(CPUState *cpu, CPUBreakpoint *breakpoint)
862 QTAILQ_REMOVE(&cpu->breakpoints, breakpoint, entry);
864 breakpoint_invalidate(cpu, breakpoint->pc);
866 g_free(breakpoint);
869 /* Remove all matching breakpoints. */
870 void cpu_breakpoint_remove_all(CPUState *cpu, int mask)
872 CPUBreakpoint *bp, *next;
874 QTAILQ_FOREACH_SAFE(bp, &cpu->breakpoints, entry, next) {
875 if (bp->flags & mask) {
876 cpu_breakpoint_remove_by_ref(cpu, bp);
881 /* enable or disable single step mode. EXCP_DEBUG is returned by the
882 CPU loop after each instruction */
883 void cpu_single_step(CPUState *cpu, int enabled)
885 if (cpu->singlestep_enabled != enabled) {
886 cpu->singlestep_enabled = enabled;
887 if (kvm_enabled()) {
888 kvm_update_guest_debug(cpu, 0);
889 } else {
890 /* must flush all the translated code to avoid inconsistencies */
891 /* XXX: only flush what is necessary */
892 tb_flush(cpu);
897 void cpu_abort(CPUState *cpu, const char *fmt, ...)
899 va_list ap;
900 va_list ap2;
902 va_start(ap, fmt);
903 va_copy(ap2, ap);
904 fprintf(stderr, "qemu: fatal: ");
905 vfprintf(stderr, fmt, ap);
906 fprintf(stderr, "\n");
907 cpu_dump_state(cpu, stderr, fprintf, CPU_DUMP_FPU | CPU_DUMP_CCOP);
908 if (qemu_log_separate()) {
909 qemu_log("qemu: fatal: ");
910 qemu_log_vprintf(fmt, ap2);
911 qemu_log("\n");
912 log_cpu_state(cpu, CPU_DUMP_FPU | CPU_DUMP_CCOP);
913 qemu_log_flush();
914 qemu_log_close();
916 va_end(ap2);
917 va_end(ap);
918 replay_finish();
919 #if defined(CONFIG_USER_ONLY)
921 struct sigaction act;
922 sigfillset(&act.sa_mask);
923 act.sa_handler = SIG_DFL;
924 sigaction(SIGABRT, &act, NULL);
926 #endif
927 abort();
930 #if !defined(CONFIG_USER_ONLY)
931 /* Called from RCU critical section */
932 static RAMBlock *qemu_get_ram_block(ram_addr_t addr)
934 RAMBlock *block;
936 block = atomic_rcu_read(&ram_list.mru_block);
937 if (block && addr - block->offset < block->max_length) {
938 return block;
940 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
941 if (addr - block->offset < block->max_length) {
942 goto found;
946 fprintf(stderr, "Bad ram offset %" PRIx64 "\n", (uint64_t)addr);
947 abort();
949 found:
950 /* It is safe to write mru_block outside the iothread lock. This
951 * is what happens:
953 * mru_block = xxx
954 * rcu_read_unlock()
955 * xxx removed from list
956 * rcu_read_lock()
957 * read mru_block
958 * mru_block = NULL;
959 * call_rcu(reclaim_ramblock, xxx);
960 * rcu_read_unlock()
962 * atomic_rcu_set is not needed here. The block was already published
963 * when it was placed into the list. Here we're just making an extra
964 * copy of the pointer.
966 ram_list.mru_block = block;
967 return block;
970 static void tlb_reset_dirty_range_all(ram_addr_t start, ram_addr_t length)
972 CPUState *cpu;
973 ram_addr_t start1;
974 RAMBlock *block;
975 ram_addr_t end;
977 end = TARGET_PAGE_ALIGN(start + length);
978 start &= TARGET_PAGE_MASK;
980 rcu_read_lock();
981 block = qemu_get_ram_block(start);
982 assert(block == qemu_get_ram_block(end - 1));
983 start1 = (uintptr_t)ramblock_ptr(block, start - block->offset);
984 CPU_FOREACH(cpu) {
985 tlb_reset_dirty(cpu, start1, length);
987 rcu_read_unlock();
990 /* Note: start and end must be within the same ram block. */
991 bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t start,
992 ram_addr_t length,
993 unsigned client)
995 DirtyMemoryBlocks *blocks;
996 unsigned long end, page;
997 bool dirty = false;
999 if (length == 0) {
1000 return false;
1003 end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS;
1004 page = start >> TARGET_PAGE_BITS;
1006 rcu_read_lock();
1008 blocks = atomic_rcu_read(&ram_list.dirty_memory[client]);
1010 while (page < end) {
1011 unsigned long idx = page / DIRTY_MEMORY_BLOCK_SIZE;
1012 unsigned long offset = page % DIRTY_MEMORY_BLOCK_SIZE;
1013 unsigned long num = MIN(end - page, DIRTY_MEMORY_BLOCK_SIZE - offset);
1015 dirty |= bitmap_test_and_clear_atomic(blocks->blocks[idx],
1016 offset, num);
1017 page += num;
1020 rcu_read_unlock();
1022 if (dirty && tcg_enabled()) {
1023 tlb_reset_dirty_range_all(start, length);
1026 return dirty;
1029 /* Called from RCU critical section */
1030 hwaddr memory_region_section_get_iotlb(CPUState *cpu,
1031 MemoryRegionSection *section,
1032 target_ulong vaddr,
1033 hwaddr paddr, hwaddr xlat,
1034 int prot,
1035 target_ulong *address)
1037 hwaddr iotlb;
1038 CPUWatchpoint *wp;
1040 if (memory_region_is_ram(section->mr)) {
1041 /* Normal RAM. */
1042 iotlb = memory_region_get_ram_addr(section->mr) + xlat;
1043 if (!section->readonly) {
1044 iotlb |= PHYS_SECTION_NOTDIRTY;
1045 } else {
1046 iotlb |= PHYS_SECTION_ROM;
1048 } else {
1049 AddressSpaceDispatch *d;
1051 d = atomic_rcu_read(&section->address_space->dispatch);
1052 iotlb = section - d->map.sections;
1053 iotlb += xlat;
1056 /* Make accesses to pages with watchpoints go via the
1057 watchpoint trap routines. */
1058 QTAILQ_FOREACH(wp, &cpu->watchpoints, entry) {
1059 if (cpu_watchpoint_address_matches(wp, vaddr, TARGET_PAGE_SIZE)) {
1060 /* Avoid trapping reads of pages with a write breakpoint. */
1061 if ((prot & PAGE_WRITE) || (wp->flags & BP_MEM_READ)) {
1062 iotlb = PHYS_SECTION_WATCH + paddr;
1063 *address |= TLB_MMIO;
1064 break;
1069 return iotlb;
1071 #endif /* defined(CONFIG_USER_ONLY) */
1073 #if !defined(CONFIG_USER_ONLY)
1075 static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
1076 uint16_t section);
1077 static subpage_t *subpage_init(AddressSpace *as, hwaddr base);
1079 static void *(*phys_mem_alloc)(size_t size, uint64_t *align) =
1080 qemu_anon_ram_alloc;
1083 * Set a custom physical guest memory alloator.
1084 * Accelerators with unusual needs may need this. Hopefully, we can
1085 * get rid of it eventually.
1087 void phys_mem_set_alloc(void *(*alloc)(size_t, uint64_t *align))
1089 phys_mem_alloc = alloc;
1092 static uint16_t phys_section_add(PhysPageMap *map,
1093 MemoryRegionSection *section)
1095 /* The physical section number is ORed with a page-aligned
1096 * pointer to produce the iotlb entries. Thus it should
1097 * never overflow into the page-aligned value.
1099 assert(map->sections_nb < TARGET_PAGE_SIZE);
1101 if (map->sections_nb == map->sections_nb_alloc) {
1102 map->sections_nb_alloc = MAX(map->sections_nb_alloc * 2, 16);
1103 map->sections = g_renew(MemoryRegionSection, map->sections,
1104 map->sections_nb_alloc);
1106 map->sections[map->sections_nb] = *section;
1107 memory_region_ref(section->mr);
1108 return map->sections_nb++;
1111 static void phys_section_destroy(MemoryRegion *mr)
1113 bool have_sub_page = mr->subpage;
1115 memory_region_unref(mr);
1117 if (have_sub_page) {
1118 subpage_t *subpage = container_of(mr, subpage_t, iomem);
1119 object_unref(OBJECT(&subpage->iomem));
1120 g_free(subpage);
1124 static void phys_sections_free(PhysPageMap *map)
1126 while (map->sections_nb > 0) {
1127 MemoryRegionSection *section = &map->sections[--map->sections_nb];
1128 phys_section_destroy(section->mr);
1130 g_free(map->sections);
1131 g_free(map->nodes);
1134 static void register_subpage(AddressSpaceDispatch *d, MemoryRegionSection *section)
1136 subpage_t *subpage;
1137 hwaddr base = section->offset_within_address_space
1138 & TARGET_PAGE_MASK;
1139 MemoryRegionSection *existing = phys_page_find(d->phys_map, base,
1140 d->map.nodes, d->map.sections);
1141 MemoryRegionSection subsection = {
1142 .offset_within_address_space = base,
1143 .size = int128_make64(TARGET_PAGE_SIZE),
1145 hwaddr start, end;
1147 assert(existing->mr->subpage || existing->mr == &io_mem_unassigned);
1149 if (!(existing->mr->subpage)) {
1150 subpage = subpage_init(d->as, base);
1151 subsection.address_space = d->as;
1152 subsection.mr = &subpage->iomem;
1153 phys_page_set(d, base >> TARGET_PAGE_BITS, 1,
1154 phys_section_add(&d->map, &subsection));
1155 } else {
1156 subpage = container_of(existing->mr, subpage_t, iomem);
1158 start = section->offset_within_address_space & ~TARGET_PAGE_MASK;
1159 end = start + int128_get64(section->size) - 1;
1160 subpage_register(subpage, start, end,
1161 phys_section_add(&d->map, section));
1165 static void register_multipage(AddressSpaceDispatch *d,
1166 MemoryRegionSection *section)
1168 hwaddr start_addr = section->offset_within_address_space;
1169 uint16_t section_index = phys_section_add(&d->map, section);
1170 uint64_t num_pages = int128_get64(int128_rshift(section->size,
1171 TARGET_PAGE_BITS));
1173 assert(num_pages);
1174 phys_page_set(d, start_addr >> TARGET_PAGE_BITS, num_pages, section_index);
1177 static void mem_add(MemoryListener *listener, MemoryRegionSection *section)
1179 AddressSpace *as = container_of(listener, AddressSpace, dispatch_listener);
1180 AddressSpaceDispatch *d = as->next_dispatch;
1181 MemoryRegionSection now = *section, remain = *section;
1182 Int128 page_size = int128_make64(TARGET_PAGE_SIZE);
1184 if (now.offset_within_address_space & ~TARGET_PAGE_MASK) {
1185 uint64_t left = TARGET_PAGE_ALIGN(now.offset_within_address_space)
1186 - now.offset_within_address_space;
1188 now.size = int128_min(int128_make64(left), now.size);
1189 register_subpage(d, &now);
1190 } else {
1191 now.size = int128_zero();
1193 while (int128_ne(remain.size, now.size)) {
1194 remain.size = int128_sub(remain.size, now.size);
1195 remain.offset_within_address_space += int128_get64(now.size);
1196 remain.offset_within_region += int128_get64(now.size);
1197 now = remain;
1198 if (int128_lt(remain.size, page_size)) {
1199 register_subpage(d, &now);
1200 } else if (remain.offset_within_address_space & ~TARGET_PAGE_MASK) {
1201 now.size = page_size;
1202 register_subpage(d, &now);
1203 } else {
1204 now.size = int128_and(now.size, int128_neg(page_size));
1205 register_multipage(d, &now);
1210 void qemu_flush_coalesced_mmio_buffer(void)
1212 if (kvm_enabled())
1213 kvm_flush_coalesced_mmio_buffer();
1216 void qemu_mutex_lock_ramlist(void)
1218 qemu_mutex_lock(&ram_list.mutex);
1221 void qemu_mutex_unlock_ramlist(void)
1223 qemu_mutex_unlock(&ram_list.mutex);
1226 #ifdef __linux__
1227 static void *file_ram_alloc(RAMBlock *block,
1228 ram_addr_t memory,
1229 const char *path,
1230 Error **errp)
1232 bool unlink_on_error = false;
1233 char *filename;
1234 char *sanitized_name;
1235 char *c;
1236 void *area = MAP_FAILED;
1237 int fd = -1;
1239 if (kvm_enabled() && !kvm_has_sync_mmu()) {
1240 error_setg(errp,
1241 "host lacks kvm mmu notifiers, -mem-path unsupported");
1242 return NULL;
1245 for (;;) {
1246 fd = open(path, O_RDWR);
1247 if (fd >= 0) {
1248 /* @path names an existing file, use it */
1249 break;
1251 if (errno == ENOENT) {
1252 /* @path names a file that doesn't exist, create it */
1253 fd = open(path, O_RDWR | O_CREAT | O_EXCL, 0644);
1254 if (fd >= 0) {
1255 unlink_on_error = true;
1256 break;
1258 } else if (errno == EISDIR) {
1259 /* @path names a directory, create a file there */
1260 /* Make name safe to use with mkstemp by replacing '/' with '_'. */
1261 sanitized_name = g_strdup(memory_region_name(block->mr));
1262 for (c = sanitized_name; *c != '\0'; c++) {
1263 if (*c == '/') {
1264 *c = '_';
1268 filename = g_strdup_printf("%s/qemu_back_mem.%s.XXXXXX", path,
1269 sanitized_name);
1270 g_free(sanitized_name);
1272 fd = mkstemp(filename);
1273 if (fd >= 0) {
1274 unlink(filename);
1275 g_free(filename);
1276 break;
1278 g_free(filename);
1280 if (errno != EEXIST && errno != EINTR) {
1281 error_setg_errno(errp, errno,
1282 "can't open backing store %s for guest RAM",
1283 path);
1284 goto error;
1287 * Try again on EINTR and EEXIST. The latter happens when
1288 * something else creates the file between our two open().
1292 block->page_size = qemu_fd_getpagesize(fd);
1293 block->mr->align = block->page_size;
1294 #if defined(__s390x__)
1295 if (kvm_enabled()) {
1296 block->mr->align = MAX(block->mr->align, QEMU_VMALLOC_ALIGN);
1298 #endif
1300 if (memory < block->page_size) {
1301 error_setg(errp, "memory size 0x" RAM_ADDR_FMT " must be equal to "
1302 "or larger than page size 0x%zx",
1303 memory, block->page_size);
1304 goto error;
1307 memory = ROUND_UP(memory, block->page_size);
1310 * ftruncate is not supported by hugetlbfs in older
1311 * hosts, so don't bother bailing out on errors.
1312 * If anything goes wrong with it under other filesystems,
1313 * mmap will fail.
1315 if (ftruncate(fd, memory)) {
1316 perror("ftruncate");
1319 area = qemu_ram_mmap(fd, memory, block->mr->align,
1320 block->flags & RAM_SHARED);
1321 if (area == MAP_FAILED) {
1322 error_setg_errno(errp, errno,
1323 "unable to map backing store for guest RAM");
1324 goto error;
1327 if (mem_prealloc) {
1328 os_mem_prealloc(fd, area, memory, errp);
1329 if (errp && *errp) {
1330 goto error;
1334 block->fd = fd;
1335 return area;
1337 error:
1338 if (area != MAP_FAILED) {
1339 qemu_ram_munmap(area, memory);
1341 if (unlink_on_error) {
1342 unlink(path);
1344 if (fd != -1) {
1345 close(fd);
1347 return NULL;
1349 #endif
1351 /* Called with the ramlist lock held. */
1352 static ram_addr_t find_ram_offset(ram_addr_t size)
1354 RAMBlock *block, *next_block;
1355 ram_addr_t offset = RAM_ADDR_MAX, mingap = RAM_ADDR_MAX;
1357 assert(size != 0); /* it would hand out same offset multiple times */
1359 if (QLIST_EMPTY_RCU(&ram_list.blocks)) {
1360 return 0;
1363 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1364 ram_addr_t end, next = RAM_ADDR_MAX;
1366 end = block->offset + block->max_length;
1368 QLIST_FOREACH_RCU(next_block, &ram_list.blocks, next) {
1369 if (next_block->offset >= end) {
1370 next = MIN(next, next_block->offset);
1373 if (next - end >= size && next - end < mingap) {
1374 offset = end;
1375 mingap = next - end;
1379 if (offset == RAM_ADDR_MAX) {
1380 fprintf(stderr, "Failed to find gap of requested size: %" PRIu64 "\n",
1381 (uint64_t)size);
1382 abort();
1385 return offset;
1388 ram_addr_t last_ram_offset(void)
1390 RAMBlock *block;
1391 ram_addr_t last = 0;
1393 rcu_read_lock();
1394 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1395 last = MAX(last, block->offset + block->max_length);
1397 rcu_read_unlock();
1398 return last;
1401 static void qemu_ram_setup_dump(void *addr, ram_addr_t size)
1403 int ret;
1405 /* Use MADV_DONTDUMP, if user doesn't want the guest memory in the core */
1406 if (!machine_dump_guest_core(current_machine)) {
1407 ret = qemu_madvise(addr, size, QEMU_MADV_DONTDUMP);
1408 if (ret) {
1409 perror("qemu_madvise");
1410 fprintf(stderr, "madvise doesn't support MADV_DONTDUMP, "
1411 "but dump_guest_core=off specified\n");
1416 const char *qemu_ram_get_idstr(RAMBlock *rb)
1418 return rb->idstr;
1421 /* Called with iothread lock held. */
1422 void qemu_ram_set_idstr(RAMBlock *new_block, const char *name, DeviceState *dev)
1424 RAMBlock *block;
1426 assert(new_block);
1427 assert(!new_block->idstr[0]);
1429 if (dev) {
1430 char *id = qdev_get_dev_path(dev);
1431 if (id) {
1432 snprintf(new_block->idstr, sizeof(new_block->idstr), "%s/", id);
1433 g_free(id);
1436 pstrcat(new_block->idstr, sizeof(new_block->idstr), name);
1438 rcu_read_lock();
1439 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1440 if (block != new_block &&
1441 !strcmp(block->idstr, new_block->idstr)) {
1442 fprintf(stderr, "RAMBlock \"%s\" already registered, abort!\n",
1443 new_block->idstr);
1444 abort();
1447 rcu_read_unlock();
1450 /* Called with iothread lock held. */
1451 void qemu_ram_unset_idstr(RAMBlock *block)
1453 /* FIXME: arch_init.c assumes that this is not called throughout
1454 * migration. Ignore the problem since hot-unplug during migration
1455 * does not work anyway.
1457 if (block) {
1458 memset(block->idstr, 0, sizeof(block->idstr));
1462 size_t qemu_ram_pagesize(RAMBlock *rb)
1464 return rb->page_size;
1467 static int memory_try_enable_merging(void *addr, size_t len)
1469 if (!machine_mem_merge(current_machine)) {
1470 /* disabled by the user */
1471 return 0;
1474 return qemu_madvise(addr, len, QEMU_MADV_MERGEABLE);
1477 /* Only legal before guest might have detected the memory size: e.g. on
1478 * incoming migration, or right after reset.
1480 * As memory core doesn't know how is memory accessed, it is up to
1481 * resize callback to update device state and/or add assertions to detect
1482 * misuse, if necessary.
1484 int qemu_ram_resize(RAMBlock *block, ram_addr_t newsize, Error **errp)
1486 assert(block);
1488 newsize = HOST_PAGE_ALIGN(newsize);
1490 if (block->used_length == newsize) {
1491 return 0;
1494 if (!(block->flags & RAM_RESIZEABLE)) {
1495 error_setg_errno(errp, EINVAL,
1496 "Length mismatch: %s: 0x" RAM_ADDR_FMT
1497 " in != 0x" RAM_ADDR_FMT, block->idstr,
1498 newsize, block->used_length);
1499 return -EINVAL;
1502 if (block->max_length < newsize) {
1503 error_setg_errno(errp, EINVAL,
1504 "Length too large: %s: 0x" RAM_ADDR_FMT
1505 " > 0x" RAM_ADDR_FMT, block->idstr,
1506 newsize, block->max_length);
1507 return -EINVAL;
1510 cpu_physical_memory_clear_dirty_range(block->offset, block->used_length);
1511 block->used_length = newsize;
1512 cpu_physical_memory_set_dirty_range(block->offset, block->used_length,
1513 DIRTY_CLIENTS_ALL);
1514 memory_region_set_size(block->mr, newsize);
1515 if (block->resized) {
1516 block->resized(block->idstr, newsize, block->host);
1518 return 0;
1521 /* Called with ram_list.mutex held */
1522 static void dirty_memory_extend(ram_addr_t old_ram_size,
1523 ram_addr_t new_ram_size)
1525 ram_addr_t old_num_blocks = DIV_ROUND_UP(old_ram_size,
1526 DIRTY_MEMORY_BLOCK_SIZE);
1527 ram_addr_t new_num_blocks = DIV_ROUND_UP(new_ram_size,
1528 DIRTY_MEMORY_BLOCK_SIZE);
1529 int i;
1531 /* Only need to extend if block count increased */
1532 if (new_num_blocks <= old_num_blocks) {
1533 return;
1536 for (i = 0; i < DIRTY_MEMORY_NUM; i++) {
1537 DirtyMemoryBlocks *old_blocks;
1538 DirtyMemoryBlocks *new_blocks;
1539 int j;
1541 old_blocks = atomic_rcu_read(&ram_list.dirty_memory[i]);
1542 new_blocks = g_malloc(sizeof(*new_blocks) +
1543 sizeof(new_blocks->blocks[0]) * new_num_blocks);
1545 if (old_num_blocks) {
1546 memcpy(new_blocks->blocks, old_blocks->blocks,
1547 old_num_blocks * sizeof(old_blocks->blocks[0]));
1550 for (j = old_num_blocks; j < new_num_blocks; j++) {
1551 new_blocks->blocks[j] = bitmap_new(DIRTY_MEMORY_BLOCK_SIZE);
1554 atomic_rcu_set(&ram_list.dirty_memory[i], new_blocks);
1556 if (old_blocks) {
1557 g_free_rcu(old_blocks, rcu);
1562 static void ram_block_add(RAMBlock *new_block, Error **errp)
1564 RAMBlock *block;
1565 RAMBlock *last_block = NULL;
1566 ram_addr_t old_ram_size, new_ram_size;
1567 Error *err = NULL;
1569 old_ram_size = last_ram_offset() >> TARGET_PAGE_BITS;
1571 qemu_mutex_lock_ramlist();
1572 new_block->offset = find_ram_offset(new_block->max_length);
1574 if (!new_block->host) {
1575 if (xen_enabled()) {
1576 xen_ram_alloc(new_block->offset, new_block->max_length,
1577 new_block->mr, &err);
1578 if (err) {
1579 error_propagate(errp, err);
1580 qemu_mutex_unlock_ramlist();
1581 return;
1583 } else {
1584 new_block->host = phys_mem_alloc(new_block->max_length,
1585 &new_block->mr->align);
1586 if (!new_block->host) {
1587 error_setg_errno(errp, errno,
1588 "cannot set up guest memory '%s'",
1589 memory_region_name(new_block->mr));
1590 qemu_mutex_unlock_ramlist();
1591 return;
1593 memory_try_enable_merging(new_block->host, new_block->max_length);
1597 new_ram_size = MAX(old_ram_size,
1598 (new_block->offset + new_block->max_length) >> TARGET_PAGE_BITS);
1599 if (new_ram_size > old_ram_size) {
1600 migration_bitmap_extend(old_ram_size, new_ram_size);
1601 dirty_memory_extend(old_ram_size, new_ram_size);
1603 /* Keep the list sorted from biggest to smallest block. Unlike QTAILQ,
1604 * QLIST (which has an RCU-friendly variant) does not have insertion at
1605 * tail, so save the last element in last_block.
1607 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1608 last_block = block;
1609 if (block->max_length < new_block->max_length) {
1610 break;
1613 if (block) {
1614 QLIST_INSERT_BEFORE_RCU(block, new_block, next);
1615 } else if (last_block) {
1616 QLIST_INSERT_AFTER_RCU(last_block, new_block, next);
1617 } else { /* list is empty */
1618 QLIST_INSERT_HEAD_RCU(&ram_list.blocks, new_block, next);
1620 ram_list.mru_block = NULL;
1622 /* Write list before version */
1623 smp_wmb();
1624 ram_list.version++;
1625 qemu_mutex_unlock_ramlist();
1627 cpu_physical_memory_set_dirty_range(new_block->offset,
1628 new_block->used_length,
1629 DIRTY_CLIENTS_ALL);
1631 if (new_block->host) {
1632 qemu_ram_setup_dump(new_block->host, new_block->max_length);
1633 qemu_madvise(new_block->host, new_block->max_length, QEMU_MADV_HUGEPAGE);
1634 /* MADV_DONTFORK is also needed by KVM in absence of synchronous MMU */
1635 qemu_madvise(new_block->host, new_block->max_length, QEMU_MADV_DONTFORK);
1639 #ifdef __linux__
1640 RAMBlock *qemu_ram_alloc_from_file(ram_addr_t size, MemoryRegion *mr,
1641 bool share, const char *mem_path,
1642 Error **errp)
1644 RAMBlock *new_block;
1645 Error *local_err = NULL;
1647 if (xen_enabled()) {
1648 error_setg(errp, "-mem-path not supported with Xen");
1649 return NULL;
1652 if (phys_mem_alloc != qemu_anon_ram_alloc) {
1654 * file_ram_alloc() needs to allocate just like
1655 * phys_mem_alloc, but we haven't bothered to provide
1656 * a hook there.
1658 error_setg(errp,
1659 "-mem-path not supported with this accelerator");
1660 return NULL;
1663 size = HOST_PAGE_ALIGN(size);
1664 new_block = g_malloc0(sizeof(*new_block));
1665 new_block->mr = mr;
1666 new_block->used_length = size;
1667 new_block->max_length = size;
1668 new_block->flags = share ? RAM_SHARED : 0;
1669 new_block->host = file_ram_alloc(new_block, size,
1670 mem_path, errp);
1671 if (!new_block->host) {
1672 g_free(new_block);
1673 return NULL;
1676 ram_block_add(new_block, &local_err);
1677 if (local_err) {
1678 g_free(new_block);
1679 error_propagate(errp, local_err);
1680 return NULL;
1682 return new_block;
1684 #endif
1686 static
1687 RAMBlock *qemu_ram_alloc_internal(ram_addr_t size, ram_addr_t max_size,
1688 void (*resized)(const char*,
1689 uint64_t length,
1690 void *host),
1691 void *host, bool resizeable,
1692 MemoryRegion *mr, Error **errp)
1694 RAMBlock *new_block;
1695 Error *local_err = NULL;
1697 size = HOST_PAGE_ALIGN(size);
1698 max_size = HOST_PAGE_ALIGN(max_size);
1699 new_block = g_malloc0(sizeof(*new_block));
1700 new_block->mr = mr;
1701 new_block->resized = resized;
1702 new_block->used_length = size;
1703 new_block->max_length = max_size;
1704 assert(max_size >= size);
1705 new_block->fd = -1;
1706 new_block->page_size = getpagesize();
1707 new_block->host = host;
1708 if (host) {
1709 new_block->flags |= RAM_PREALLOC;
1711 if (resizeable) {
1712 new_block->flags |= RAM_RESIZEABLE;
1714 ram_block_add(new_block, &local_err);
1715 if (local_err) {
1716 g_free(new_block);
1717 error_propagate(errp, local_err);
1718 return NULL;
1720 return new_block;
1723 RAMBlock *qemu_ram_alloc_from_ptr(ram_addr_t size, void *host,
1724 MemoryRegion *mr, Error **errp)
1726 return qemu_ram_alloc_internal(size, size, NULL, host, false, mr, errp);
1729 RAMBlock *qemu_ram_alloc(ram_addr_t size, MemoryRegion *mr, Error **errp)
1731 return qemu_ram_alloc_internal(size, size, NULL, NULL, false, mr, errp);
1734 RAMBlock *qemu_ram_alloc_resizeable(ram_addr_t size, ram_addr_t maxsz,
1735 void (*resized)(const char*,
1736 uint64_t length,
1737 void *host),
1738 MemoryRegion *mr, Error **errp)
1740 return qemu_ram_alloc_internal(size, maxsz, resized, NULL, true, mr, errp);
1743 static void reclaim_ramblock(RAMBlock *block)
1745 if (block->flags & RAM_PREALLOC) {
1747 } else if (xen_enabled()) {
1748 xen_invalidate_map_cache_entry(block->host);
1749 #ifndef _WIN32
1750 } else if (block->fd >= 0) {
1751 qemu_ram_munmap(block->host, block->max_length);
1752 close(block->fd);
1753 #endif
1754 } else {
1755 qemu_anon_ram_free(block->host, block->max_length);
1757 g_free(block);
1760 void qemu_ram_free(RAMBlock *block)
1762 if (!block) {
1763 return;
1766 qemu_mutex_lock_ramlist();
1767 QLIST_REMOVE_RCU(block, next);
1768 ram_list.mru_block = NULL;
1769 /* Write list before version */
1770 smp_wmb();
1771 ram_list.version++;
1772 call_rcu(block, reclaim_ramblock, rcu);
1773 qemu_mutex_unlock_ramlist();
1776 #ifndef _WIN32
1777 void qemu_ram_remap(ram_addr_t addr, ram_addr_t length)
1779 RAMBlock *block;
1780 ram_addr_t offset;
1781 int flags;
1782 void *area, *vaddr;
1784 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1785 offset = addr - block->offset;
1786 if (offset < block->max_length) {
1787 vaddr = ramblock_ptr(block, offset);
1788 if (block->flags & RAM_PREALLOC) {
1790 } else if (xen_enabled()) {
1791 abort();
1792 } else {
1793 flags = MAP_FIXED;
1794 if (block->fd >= 0) {
1795 flags |= (block->flags & RAM_SHARED ?
1796 MAP_SHARED : MAP_PRIVATE);
1797 area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
1798 flags, block->fd, offset);
1799 } else {
1801 * Remap needs to match alloc. Accelerators that
1802 * set phys_mem_alloc never remap. If they did,
1803 * we'd need a remap hook here.
1805 assert(phys_mem_alloc == qemu_anon_ram_alloc);
1807 flags |= MAP_PRIVATE | MAP_ANONYMOUS;
1808 area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
1809 flags, -1, 0);
1811 if (area != vaddr) {
1812 fprintf(stderr, "Could not remap addr: "
1813 RAM_ADDR_FMT "@" RAM_ADDR_FMT "\n",
1814 length, addr);
1815 exit(1);
1817 memory_try_enable_merging(vaddr, length);
1818 qemu_ram_setup_dump(vaddr, length);
1823 #endif /* !_WIN32 */
1825 /* Return a host pointer to ram allocated with qemu_ram_alloc.
1826 * This should not be used for general purpose DMA. Use address_space_map
1827 * or address_space_rw instead. For local memory (e.g. video ram) that the
1828 * device owns, use memory_region_get_ram_ptr.
1830 * Called within RCU critical section.
1832 void *qemu_map_ram_ptr(RAMBlock *ram_block, ram_addr_t addr)
1834 RAMBlock *block = ram_block;
1836 if (block == NULL) {
1837 block = qemu_get_ram_block(addr);
1838 addr -= block->offset;
1841 if (xen_enabled() && block->host == NULL) {
1842 /* We need to check if the requested address is in the RAM
1843 * because we don't want to map the entire memory in QEMU.
1844 * In that case just map until the end of the page.
1846 if (block->offset == 0) {
1847 return xen_map_cache(addr, 0, 0);
1850 block->host = xen_map_cache(block->offset, block->max_length, 1);
1852 return ramblock_ptr(block, addr);
1855 /* Return a host pointer to guest's ram. Similar to qemu_map_ram_ptr
1856 * but takes a size argument.
1858 * Called within RCU critical section.
1860 static void *qemu_ram_ptr_length(RAMBlock *ram_block, ram_addr_t addr,
1861 hwaddr *size)
1863 RAMBlock *block = ram_block;
1864 if (*size == 0) {
1865 return NULL;
1868 if (block == NULL) {
1869 block = qemu_get_ram_block(addr);
1870 addr -= block->offset;
1872 *size = MIN(*size, block->max_length - addr);
1874 if (xen_enabled() && block->host == NULL) {
1875 /* We need to check if the requested address is in the RAM
1876 * because we don't want to map the entire memory in QEMU.
1877 * In that case just map the requested area.
1879 if (block->offset == 0) {
1880 return xen_map_cache(addr, *size, 1);
1883 block->host = xen_map_cache(block->offset, block->max_length, 1);
1886 return ramblock_ptr(block, addr);
1890 * Translates a host ptr back to a RAMBlock, a ram_addr and an offset
1891 * in that RAMBlock.
1893 * ptr: Host pointer to look up
1894 * round_offset: If true round the result offset down to a page boundary
1895 * *ram_addr: set to result ram_addr
1896 * *offset: set to result offset within the RAMBlock
1898 * Returns: RAMBlock (or NULL if not found)
1900 * By the time this function returns, the returned pointer is not protected
1901 * by RCU anymore. If the caller is not within an RCU critical section and
1902 * does not hold the iothread lock, it must have other means of protecting the
1903 * pointer, such as a reference to the region that includes the incoming
1904 * ram_addr_t.
1906 RAMBlock *qemu_ram_block_from_host(void *ptr, bool round_offset,
1907 ram_addr_t *offset)
1909 RAMBlock *block;
1910 uint8_t *host = ptr;
1912 if (xen_enabled()) {
1913 ram_addr_t ram_addr;
1914 rcu_read_lock();
1915 ram_addr = xen_ram_addr_from_mapcache(ptr);
1916 block = qemu_get_ram_block(ram_addr);
1917 if (block) {
1918 *offset = ram_addr - block->offset;
1920 rcu_read_unlock();
1921 return block;
1924 rcu_read_lock();
1925 block = atomic_rcu_read(&ram_list.mru_block);
1926 if (block && block->host && host - block->host < block->max_length) {
1927 goto found;
1930 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1931 /* This case append when the block is not mapped. */
1932 if (block->host == NULL) {
1933 continue;
1935 if (host - block->host < block->max_length) {
1936 goto found;
1940 rcu_read_unlock();
1941 return NULL;
1943 found:
1944 *offset = (host - block->host);
1945 if (round_offset) {
1946 *offset &= TARGET_PAGE_MASK;
1948 rcu_read_unlock();
1949 return block;
1953 * Finds the named RAMBlock
1955 * name: The name of RAMBlock to find
1957 * Returns: RAMBlock (or NULL if not found)
1959 RAMBlock *qemu_ram_block_by_name(const char *name)
1961 RAMBlock *block;
1963 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1964 if (!strcmp(name, block->idstr)) {
1965 return block;
1969 return NULL;
1972 /* Some of the softmmu routines need to translate from a host pointer
1973 (typically a TLB entry) back to a ram offset. */
1974 ram_addr_t qemu_ram_addr_from_host(void *ptr)
1976 RAMBlock *block;
1977 ram_addr_t offset;
1979 block = qemu_ram_block_from_host(ptr, false, &offset);
1980 if (!block) {
1981 return RAM_ADDR_INVALID;
1984 return block->offset + offset;
1987 /* Called within RCU critical section. */
1988 static void notdirty_mem_write(void *opaque, hwaddr ram_addr,
1989 uint64_t val, unsigned size)
1991 if (!cpu_physical_memory_get_dirty_flag(ram_addr, DIRTY_MEMORY_CODE)) {
1992 tb_invalidate_phys_page_fast(ram_addr, size);
1994 switch (size) {
1995 case 1:
1996 stb_p(qemu_map_ram_ptr(NULL, ram_addr), val);
1997 break;
1998 case 2:
1999 stw_p(qemu_map_ram_ptr(NULL, ram_addr), val);
2000 break;
2001 case 4:
2002 stl_p(qemu_map_ram_ptr(NULL, ram_addr), val);
2003 break;
2004 default:
2005 abort();
2007 /* Set both VGA and migration bits for simplicity and to remove
2008 * the notdirty callback faster.
2010 cpu_physical_memory_set_dirty_range(ram_addr, size,
2011 DIRTY_CLIENTS_NOCODE);
2012 /* we remove the notdirty callback only if the code has been
2013 flushed */
2014 if (!cpu_physical_memory_is_clean(ram_addr)) {
2015 tlb_set_dirty(current_cpu, current_cpu->mem_io_vaddr);
2019 static bool notdirty_mem_accepts(void *opaque, hwaddr addr,
2020 unsigned size, bool is_write)
2022 return is_write;
2025 static const MemoryRegionOps notdirty_mem_ops = {
2026 .write = notdirty_mem_write,
2027 .valid.accepts = notdirty_mem_accepts,
2028 .endianness = DEVICE_NATIVE_ENDIAN,
2031 /* Generate a debug exception if a watchpoint has been hit. */
2032 static void check_watchpoint(int offset, int len, MemTxAttrs attrs, int flags)
2034 CPUState *cpu = current_cpu;
2035 CPUClass *cc = CPU_GET_CLASS(cpu);
2036 CPUArchState *env = cpu->env_ptr;
2037 target_ulong pc, cs_base;
2038 target_ulong vaddr;
2039 CPUWatchpoint *wp;
2040 uint32_t cpu_flags;
2042 if (cpu->watchpoint_hit) {
2043 /* We re-entered the check after replacing the TB. Now raise
2044 * the debug interrupt so that is will trigger after the
2045 * current instruction. */
2046 cpu_interrupt(cpu, CPU_INTERRUPT_DEBUG);
2047 return;
2049 vaddr = (cpu->mem_io_vaddr & TARGET_PAGE_MASK) + offset;
2050 QTAILQ_FOREACH(wp, &cpu->watchpoints, entry) {
2051 if (cpu_watchpoint_address_matches(wp, vaddr, len)
2052 && (wp->flags & flags)) {
2053 if (flags == BP_MEM_READ) {
2054 wp->flags |= BP_WATCHPOINT_HIT_READ;
2055 } else {
2056 wp->flags |= BP_WATCHPOINT_HIT_WRITE;
2058 wp->hitaddr = vaddr;
2059 wp->hitattrs = attrs;
2060 if (!cpu->watchpoint_hit) {
2061 if (wp->flags & BP_CPU &&
2062 !cc->debug_check_watchpoint(cpu, wp)) {
2063 wp->flags &= ~BP_WATCHPOINT_HIT;
2064 continue;
2066 cpu->watchpoint_hit = wp;
2068 /* The tb_lock will be reset when cpu_loop_exit or
2069 * cpu_loop_exit_noexc longjmp back into the cpu_exec
2070 * main loop.
2072 tb_lock();
2073 tb_check_watchpoint(cpu);
2074 if (wp->flags & BP_STOP_BEFORE_ACCESS) {
2075 cpu->exception_index = EXCP_DEBUG;
2076 cpu_loop_exit(cpu);
2077 } else {
2078 cpu_get_tb_cpu_state(env, &pc, &cs_base, &cpu_flags);
2079 tb_gen_code(cpu, pc, cs_base, cpu_flags, 1);
2080 cpu_loop_exit_noexc(cpu);
2083 } else {
2084 wp->flags &= ~BP_WATCHPOINT_HIT;
2089 /* Watchpoint access routines. Watchpoints are inserted using TLB tricks,
2090 so these check for a hit then pass through to the normal out-of-line
2091 phys routines. */
2092 static MemTxResult watch_mem_read(void *opaque, hwaddr addr, uint64_t *pdata,
2093 unsigned size, MemTxAttrs attrs)
2095 MemTxResult res;
2096 uint64_t data;
2097 int asidx = cpu_asidx_from_attrs(current_cpu, attrs);
2098 AddressSpace *as = current_cpu->cpu_ases[asidx].as;
2100 check_watchpoint(addr & ~TARGET_PAGE_MASK, size, attrs, BP_MEM_READ);
2101 switch (size) {
2102 case 1:
2103 data = address_space_ldub(as, addr, attrs, &res);
2104 break;
2105 case 2:
2106 data = address_space_lduw(as, addr, attrs, &res);
2107 break;
2108 case 4:
2109 data = address_space_ldl(as, addr, attrs, &res);
2110 break;
2111 default: abort();
2113 *pdata = data;
2114 return res;
2117 static MemTxResult watch_mem_write(void *opaque, hwaddr addr,
2118 uint64_t val, unsigned size,
2119 MemTxAttrs attrs)
2121 MemTxResult res;
2122 int asidx = cpu_asidx_from_attrs(current_cpu, attrs);
2123 AddressSpace *as = current_cpu->cpu_ases[asidx].as;
2125 check_watchpoint(addr & ~TARGET_PAGE_MASK, size, attrs, BP_MEM_WRITE);
2126 switch (size) {
2127 case 1:
2128 address_space_stb(as, addr, val, attrs, &res);
2129 break;
2130 case 2:
2131 address_space_stw(as, addr, val, attrs, &res);
2132 break;
2133 case 4:
2134 address_space_stl(as, addr, val, attrs, &res);
2135 break;
2136 default: abort();
2138 return res;
2141 static const MemoryRegionOps watch_mem_ops = {
2142 .read_with_attrs = watch_mem_read,
2143 .write_with_attrs = watch_mem_write,
2144 .endianness = DEVICE_NATIVE_ENDIAN,
2147 static MemTxResult subpage_read(void *opaque, hwaddr addr, uint64_t *data,
2148 unsigned len, MemTxAttrs attrs)
2150 subpage_t *subpage = opaque;
2151 uint8_t buf[8];
2152 MemTxResult res;
2154 #if defined(DEBUG_SUBPAGE)
2155 printf("%s: subpage %p len %u addr " TARGET_FMT_plx "\n", __func__,
2156 subpage, len, addr);
2157 #endif
2158 res = address_space_read(subpage->as, addr + subpage->base,
2159 attrs, buf, len);
2160 if (res) {
2161 return res;
2163 switch (len) {
2164 case 1:
2165 *data = ldub_p(buf);
2166 return MEMTX_OK;
2167 case 2:
2168 *data = lduw_p(buf);
2169 return MEMTX_OK;
2170 case 4:
2171 *data = ldl_p(buf);
2172 return MEMTX_OK;
2173 case 8:
2174 *data = ldq_p(buf);
2175 return MEMTX_OK;
2176 default:
2177 abort();
2181 static MemTxResult subpage_write(void *opaque, hwaddr addr,
2182 uint64_t value, unsigned len, MemTxAttrs attrs)
2184 subpage_t *subpage = opaque;
2185 uint8_t buf[8];
2187 #if defined(DEBUG_SUBPAGE)
2188 printf("%s: subpage %p len %u addr " TARGET_FMT_plx
2189 " value %"PRIx64"\n",
2190 __func__, subpage, len, addr, value);
2191 #endif
2192 switch (len) {
2193 case 1:
2194 stb_p(buf, value);
2195 break;
2196 case 2:
2197 stw_p(buf, value);
2198 break;
2199 case 4:
2200 stl_p(buf, value);
2201 break;
2202 case 8:
2203 stq_p(buf, value);
2204 break;
2205 default:
2206 abort();
2208 return address_space_write(subpage->as, addr + subpage->base,
2209 attrs, buf, len);
2212 static bool subpage_accepts(void *opaque, hwaddr addr,
2213 unsigned len, bool is_write)
2215 subpage_t *subpage = opaque;
2216 #if defined(DEBUG_SUBPAGE)
2217 printf("%s: subpage %p %c len %u addr " TARGET_FMT_plx "\n",
2218 __func__, subpage, is_write ? 'w' : 'r', len, addr);
2219 #endif
2221 return address_space_access_valid(subpage->as, addr + subpage->base,
2222 len, is_write);
2225 static const MemoryRegionOps subpage_ops = {
2226 .read_with_attrs = subpage_read,
2227 .write_with_attrs = subpage_write,
2228 .impl.min_access_size = 1,
2229 .impl.max_access_size = 8,
2230 .valid.min_access_size = 1,
2231 .valid.max_access_size = 8,
2232 .valid.accepts = subpage_accepts,
2233 .endianness = DEVICE_NATIVE_ENDIAN,
2236 static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
2237 uint16_t section)
2239 int idx, eidx;
2241 if (start >= TARGET_PAGE_SIZE || end >= TARGET_PAGE_SIZE)
2242 return -1;
2243 idx = SUBPAGE_IDX(start);
2244 eidx = SUBPAGE_IDX(end);
2245 #if defined(DEBUG_SUBPAGE)
2246 printf("%s: %p start %08x end %08x idx %08x eidx %08x section %d\n",
2247 __func__, mmio, start, end, idx, eidx, section);
2248 #endif
2249 for (; idx <= eidx; idx++) {
2250 mmio->sub_section[idx] = section;
2253 return 0;
2256 static subpage_t *subpage_init(AddressSpace *as, hwaddr base)
2258 subpage_t *mmio;
2260 mmio = g_malloc0(sizeof(subpage_t) + TARGET_PAGE_SIZE * sizeof(uint16_t));
2261 mmio->as = as;
2262 mmio->base = base;
2263 memory_region_init_io(&mmio->iomem, NULL, &subpage_ops, mmio,
2264 NULL, TARGET_PAGE_SIZE);
2265 mmio->iomem.subpage = true;
2266 #if defined(DEBUG_SUBPAGE)
2267 printf("%s: %p base " TARGET_FMT_plx " len %08x\n", __func__,
2268 mmio, base, TARGET_PAGE_SIZE);
2269 #endif
2270 subpage_register(mmio, 0, TARGET_PAGE_SIZE-1, PHYS_SECTION_UNASSIGNED);
2272 return mmio;
2275 static uint16_t dummy_section(PhysPageMap *map, AddressSpace *as,
2276 MemoryRegion *mr)
2278 assert(as);
2279 MemoryRegionSection section = {
2280 .address_space = as,
2281 .mr = mr,
2282 .offset_within_address_space = 0,
2283 .offset_within_region = 0,
2284 .size = int128_2_64(),
2287 return phys_section_add(map, &section);
2290 MemoryRegion *iotlb_to_region(CPUState *cpu, hwaddr index, MemTxAttrs attrs)
2292 int asidx = cpu_asidx_from_attrs(cpu, attrs);
2293 CPUAddressSpace *cpuas = &cpu->cpu_ases[asidx];
2294 AddressSpaceDispatch *d = atomic_rcu_read(&cpuas->memory_dispatch);
2295 MemoryRegionSection *sections = d->map.sections;
2297 return sections[index & ~TARGET_PAGE_MASK].mr;
2300 static void io_mem_init(void)
2302 memory_region_init_io(&io_mem_rom, NULL, &unassigned_mem_ops, NULL, NULL, UINT64_MAX);
2303 memory_region_init_io(&io_mem_unassigned, NULL, &unassigned_mem_ops, NULL,
2304 NULL, UINT64_MAX);
2305 memory_region_init_io(&io_mem_notdirty, NULL, &notdirty_mem_ops, NULL,
2306 NULL, UINT64_MAX);
2307 memory_region_init_io(&io_mem_watch, NULL, &watch_mem_ops, NULL,
2308 NULL, UINT64_MAX);
2311 static void mem_begin(MemoryListener *listener)
2313 AddressSpace *as = container_of(listener, AddressSpace, dispatch_listener);
2314 AddressSpaceDispatch *d = g_new0(AddressSpaceDispatch, 1);
2315 uint16_t n;
2317 n = dummy_section(&d->map, as, &io_mem_unassigned);
2318 assert(n == PHYS_SECTION_UNASSIGNED);
2319 n = dummy_section(&d->map, as, &io_mem_notdirty);
2320 assert(n == PHYS_SECTION_NOTDIRTY);
2321 n = dummy_section(&d->map, as, &io_mem_rom);
2322 assert(n == PHYS_SECTION_ROM);
2323 n = dummy_section(&d->map, as, &io_mem_watch);
2324 assert(n == PHYS_SECTION_WATCH);
2326 d->phys_map = (PhysPageEntry) { .ptr = PHYS_MAP_NODE_NIL, .skip = 1 };
2327 d->as = as;
2328 as->next_dispatch = d;
2331 static void address_space_dispatch_free(AddressSpaceDispatch *d)
2333 phys_sections_free(&d->map);
2334 g_free(d);
2337 static void mem_commit(MemoryListener *listener)
2339 AddressSpace *as = container_of(listener, AddressSpace, dispatch_listener);
2340 AddressSpaceDispatch *cur = as->dispatch;
2341 AddressSpaceDispatch *next = as->next_dispatch;
2343 phys_page_compact_all(next, next->map.nodes_nb);
2345 atomic_rcu_set(&as->dispatch, next);
2346 if (cur) {
2347 call_rcu(cur, address_space_dispatch_free, rcu);
2351 static void tcg_commit(MemoryListener *listener)
2353 CPUAddressSpace *cpuas;
2354 AddressSpaceDispatch *d;
2356 /* since each CPU stores ram addresses in its TLB cache, we must
2357 reset the modified entries */
2358 cpuas = container_of(listener, CPUAddressSpace, tcg_as_listener);
2359 cpu_reloading_memory_map();
2360 /* The CPU and TLB are protected by the iothread lock.
2361 * We reload the dispatch pointer now because cpu_reloading_memory_map()
2362 * may have split the RCU critical section.
2364 d = atomic_rcu_read(&cpuas->as->dispatch);
2365 cpuas->memory_dispatch = d;
2366 tlb_flush(cpuas->cpu, 1);
2369 void address_space_init_dispatch(AddressSpace *as)
2371 as->dispatch = NULL;
2372 as->dispatch_listener = (MemoryListener) {
2373 .begin = mem_begin,
2374 .commit = mem_commit,
2375 .region_add = mem_add,
2376 .region_nop = mem_add,
2377 .priority = 0,
2379 memory_listener_register(&as->dispatch_listener, as);
2382 void address_space_unregister(AddressSpace *as)
2384 memory_listener_unregister(&as->dispatch_listener);
2387 void address_space_destroy_dispatch(AddressSpace *as)
2389 AddressSpaceDispatch *d = as->dispatch;
2391 atomic_rcu_set(&as->dispatch, NULL);
2392 if (d) {
2393 call_rcu(d, address_space_dispatch_free, rcu);
2397 static void memory_map_init(void)
2399 system_memory = g_malloc(sizeof(*system_memory));
2401 memory_region_init(system_memory, NULL, "system", UINT64_MAX);
2402 address_space_init(&address_space_memory, system_memory, "memory");
2404 system_io = g_malloc(sizeof(*system_io));
2405 memory_region_init_io(system_io, NULL, &unassigned_io_ops, NULL, "io",
2406 65536);
2407 address_space_init(&address_space_io, system_io, "I/O");
2410 MemoryRegion *get_system_memory(void)
2412 return system_memory;
2415 MemoryRegion *get_system_io(void)
2417 return system_io;
2420 #endif /* !defined(CONFIG_USER_ONLY) */
2422 /* physical memory access (slow version, mainly for debug) */
2423 #if defined(CONFIG_USER_ONLY)
2424 int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
2425 uint8_t *buf, int len, int is_write)
2427 int l, flags;
2428 target_ulong page;
2429 void * p;
2431 while (len > 0) {
2432 page = addr & TARGET_PAGE_MASK;
2433 l = (page + TARGET_PAGE_SIZE) - addr;
2434 if (l > len)
2435 l = len;
2436 flags = page_get_flags(page);
2437 if (!(flags & PAGE_VALID))
2438 return -1;
2439 if (is_write) {
2440 if (!(flags & PAGE_WRITE))
2441 return -1;
2442 /* XXX: this code should not depend on lock_user */
2443 if (!(p = lock_user(VERIFY_WRITE, addr, l, 0)))
2444 return -1;
2445 memcpy(p, buf, l);
2446 unlock_user(p, addr, l);
2447 } else {
2448 if (!(flags & PAGE_READ))
2449 return -1;
2450 /* XXX: this code should not depend on lock_user */
2451 if (!(p = lock_user(VERIFY_READ, addr, l, 1)))
2452 return -1;
2453 memcpy(buf, p, l);
2454 unlock_user(p, addr, 0);
2456 len -= l;
2457 buf += l;
2458 addr += l;
2460 return 0;
2463 #else
2465 static void invalidate_and_set_dirty(MemoryRegion *mr, hwaddr addr,
2466 hwaddr length)
2468 uint8_t dirty_log_mask = memory_region_get_dirty_log_mask(mr);
2469 addr += memory_region_get_ram_addr(mr);
2471 /* No early return if dirty_log_mask is or becomes 0, because
2472 * cpu_physical_memory_set_dirty_range will still call
2473 * xen_modified_memory.
2475 if (dirty_log_mask) {
2476 dirty_log_mask =
2477 cpu_physical_memory_range_includes_clean(addr, length, dirty_log_mask);
2479 if (dirty_log_mask & (1 << DIRTY_MEMORY_CODE)) {
2480 tb_invalidate_phys_range(addr, addr + length);
2481 dirty_log_mask &= ~(1 << DIRTY_MEMORY_CODE);
2483 cpu_physical_memory_set_dirty_range(addr, length, dirty_log_mask);
2486 static int memory_access_size(MemoryRegion *mr, unsigned l, hwaddr addr)
2488 unsigned access_size_max = mr->ops->valid.max_access_size;
2490 /* Regions are assumed to support 1-4 byte accesses unless
2491 otherwise specified. */
2492 if (access_size_max == 0) {
2493 access_size_max = 4;
2496 /* Bound the maximum access by the alignment of the address. */
2497 if (!mr->ops->impl.unaligned) {
2498 unsigned align_size_max = addr & -addr;
2499 if (align_size_max != 0 && align_size_max < access_size_max) {
2500 access_size_max = align_size_max;
2504 /* Don't attempt accesses larger than the maximum. */
2505 if (l > access_size_max) {
2506 l = access_size_max;
2508 l = pow2floor(l);
2510 return l;
2513 static bool prepare_mmio_access(MemoryRegion *mr)
2515 bool unlocked = !qemu_mutex_iothread_locked();
2516 bool release_lock = false;
2518 if (unlocked && mr->global_locking) {
2519 qemu_mutex_lock_iothread();
2520 unlocked = false;
2521 release_lock = true;
2523 if (mr->flush_coalesced_mmio) {
2524 if (unlocked) {
2525 qemu_mutex_lock_iothread();
2527 qemu_flush_coalesced_mmio_buffer();
2528 if (unlocked) {
2529 qemu_mutex_unlock_iothread();
2533 return release_lock;
2536 /* Called within RCU critical section. */
2537 static MemTxResult address_space_write_continue(AddressSpace *as, hwaddr addr,
2538 MemTxAttrs attrs,
2539 const uint8_t *buf,
2540 int len, hwaddr addr1,
2541 hwaddr l, MemoryRegion *mr)
2543 uint8_t *ptr;
2544 uint64_t val;
2545 MemTxResult result = MEMTX_OK;
2546 bool release_lock = false;
2548 for (;;) {
2549 if (!memory_access_is_direct(mr, true)) {
2550 release_lock |= prepare_mmio_access(mr);
2551 l = memory_access_size(mr, l, addr1);
2552 /* XXX: could force current_cpu to NULL to avoid
2553 potential bugs */
2554 switch (l) {
2555 case 8:
2556 /* 64 bit write access */
2557 val = ldq_p(buf);
2558 result |= memory_region_dispatch_write(mr, addr1, val, 8,
2559 attrs);
2560 break;
2561 case 4:
2562 /* 32 bit write access */
2563 val = ldl_p(buf);
2564 result |= memory_region_dispatch_write(mr, addr1, val, 4,
2565 attrs);
2566 break;
2567 case 2:
2568 /* 16 bit write access */
2569 val = lduw_p(buf);
2570 result |= memory_region_dispatch_write(mr, addr1, val, 2,
2571 attrs);
2572 break;
2573 case 1:
2574 /* 8 bit write access */
2575 val = ldub_p(buf);
2576 result |= memory_region_dispatch_write(mr, addr1, val, 1,
2577 attrs);
2578 break;
2579 default:
2580 abort();
2582 } else {
2583 /* RAM case */
2584 ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
2585 memcpy(ptr, buf, l);
2586 invalidate_and_set_dirty(mr, addr1, l);
2589 if (release_lock) {
2590 qemu_mutex_unlock_iothread();
2591 release_lock = false;
2594 len -= l;
2595 buf += l;
2596 addr += l;
2598 if (!len) {
2599 break;
2602 l = len;
2603 mr = address_space_translate(as, addr, &addr1, &l, true);
2606 return result;
2609 MemTxResult address_space_write(AddressSpace *as, hwaddr addr, MemTxAttrs attrs,
2610 const uint8_t *buf, int len)
2612 hwaddr l;
2613 hwaddr addr1;
2614 MemoryRegion *mr;
2615 MemTxResult result = MEMTX_OK;
2617 if (len > 0) {
2618 rcu_read_lock();
2619 l = len;
2620 mr = address_space_translate(as, addr, &addr1, &l, true);
2621 result = address_space_write_continue(as, addr, attrs, buf, len,
2622 addr1, l, mr);
2623 rcu_read_unlock();
2626 return result;
2629 /* Called within RCU critical section. */
2630 MemTxResult address_space_read_continue(AddressSpace *as, hwaddr addr,
2631 MemTxAttrs attrs, uint8_t *buf,
2632 int len, hwaddr addr1, hwaddr l,
2633 MemoryRegion *mr)
2635 uint8_t *ptr;
2636 uint64_t val;
2637 MemTxResult result = MEMTX_OK;
2638 bool release_lock = false;
2640 for (;;) {
2641 if (!memory_access_is_direct(mr, false)) {
2642 /* I/O case */
2643 release_lock |= prepare_mmio_access(mr);
2644 l = memory_access_size(mr, l, addr1);
2645 switch (l) {
2646 case 8:
2647 /* 64 bit read access */
2648 result |= memory_region_dispatch_read(mr, addr1, &val, 8,
2649 attrs);
2650 stq_p(buf, val);
2651 break;
2652 case 4:
2653 /* 32 bit read access */
2654 result |= memory_region_dispatch_read(mr, addr1, &val, 4,
2655 attrs);
2656 stl_p(buf, val);
2657 break;
2658 case 2:
2659 /* 16 bit read access */
2660 result |= memory_region_dispatch_read(mr, addr1, &val, 2,
2661 attrs);
2662 stw_p(buf, val);
2663 break;
2664 case 1:
2665 /* 8 bit read access */
2666 result |= memory_region_dispatch_read(mr, addr1, &val, 1,
2667 attrs);
2668 stb_p(buf, val);
2669 break;
2670 default:
2671 abort();
2673 } else {
2674 /* RAM case */
2675 ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
2676 memcpy(buf, ptr, l);
2679 if (release_lock) {
2680 qemu_mutex_unlock_iothread();
2681 release_lock = false;
2684 len -= l;
2685 buf += l;
2686 addr += l;
2688 if (!len) {
2689 break;
2692 l = len;
2693 mr = address_space_translate(as, addr, &addr1, &l, false);
2696 return result;
2699 MemTxResult address_space_read_full(AddressSpace *as, hwaddr addr,
2700 MemTxAttrs attrs, uint8_t *buf, int len)
2702 hwaddr l;
2703 hwaddr addr1;
2704 MemoryRegion *mr;
2705 MemTxResult result = MEMTX_OK;
2707 if (len > 0) {
2708 rcu_read_lock();
2709 l = len;
2710 mr = address_space_translate(as, addr, &addr1, &l, false);
2711 result = address_space_read_continue(as, addr, attrs, buf, len,
2712 addr1, l, mr);
2713 rcu_read_unlock();
2716 return result;
2719 MemTxResult address_space_rw(AddressSpace *as, hwaddr addr, MemTxAttrs attrs,
2720 uint8_t *buf, int len, bool is_write)
2722 if (is_write) {
2723 return address_space_write(as, addr, attrs, (uint8_t *)buf, len);
2724 } else {
2725 return address_space_read(as, addr, attrs, (uint8_t *)buf, len);
2729 void cpu_physical_memory_rw(hwaddr addr, uint8_t *buf,
2730 int len, int is_write)
2732 address_space_rw(&address_space_memory, addr, MEMTXATTRS_UNSPECIFIED,
2733 buf, len, is_write);
2736 enum write_rom_type {
2737 WRITE_DATA,
2738 FLUSH_CACHE,
2741 static inline void cpu_physical_memory_write_rom_internal(AddressSpace *as,
2742 hwaddr addr, const uint8_t *buf, int len, enum write_rom_type type)
2744 hwaddr l;
2745 uint8_t *ptr;
2746 hwaddr addr1;
2747 MemoryRegion *mr;
2749 rcu_read_lock();
2750 while (len > 0) {
2751 l = len;
2752 mr = address_space_translate(as, addr, &addr1, &l, true);
2754 if (!(memory_region_is_ram(mr) ||
2755 memory_region_is_romd(mr))) {
2756 l = memory_access_size(mr, l, addr1);
2757 } else {
2758 /* ROM/RAM case */
2759 ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
2760 switch (type) {
2761 case WRITE_DATA:
2762 memcpy(ptr, buf, l);
2763 invalidate_and_set_dirty(mr, addr1, l);
2764 break;
2765 case FLUSH_CACHE:
2766 flush_icache_range((uintptr_t)ptr, (uintptr_t)ptr + l);
2767 break;
2770 len -= l;
2771 buf += l;
2772 addr += l;
2774 rcu_read_unlock();
2777 /* used for ROM loading : can write in RAM and ROM */
2778 void cpu_physical_memory_write_rom(AddressSpace *as, hwaddr addr,
2779 const uint8_t *buf, int len)
2781 cpu_physical_memory_write_rom_internal(as, addr, buf, len, WRITE_DATA);
2784 void cpu_flush_icache_range(hwaddr start, int len)
2787 * This function should do the same thing as an icache flush that was
2788 * triggered from within the guest. For TCG we are always cache coherent,
2789 * so there is no need to flush anything. For KVM / Xen we need to flush
2790 * the host's instruction cache at least.
2792 if (tcg_enabled()) {
2793 return;
2796 cpu_physical_memory_write_rom_internal(&address_space_memory,
2797 start, NULL, len, FLUSH_CACHE);
2800 typedef struct {
2801 MemoryRegion *mr;
2802 void *buffer;
2803 hwaddr addr;
2804 hwaddr len;
2805 bool in_use;
2806 } BounceBuffer;
2808 static BounceBuffer bounce;
2810 typedef struct MapClient {
2811 QEMUBH *bh;
2812 QLIST_ENTRY(MapClient) link;
2813 } MapClient;
2815 QemuMutex map_client_list_lock;
2816 static QLIST_HEAD(map_client_list, MapClient) map_client_list
2817 = QLIST_HEAD_INITIALIZER(map_client_list);
2819 static void cpu_unregister_map_client_do(MapClient *client)
2821 QLIST_REMOVE(client, link);
2822 g_free(client);
2825 static void cpu_notify_map_clients_locked(void)
2827 MapClient *client;
2829 while (!QLIST_EMPTY(&map_client_list)) {
2830 client = QLIST_FIRST(&map_client_list);
2831 qemu_bh_schedule(client->bh);
2832 cpu_unregister_map_client_do(client);
2836 void cpu_register_map_client(QEMUBH *bh)
2838 MapClient *client = g_malloc(sizeof(*client));
2840 qemu_mutex_lock(&map_client_list_lock);
2841 client->bh = bh;
2842 QLIST_INSERT_HEAD(&map_client_list, client, link);
2843 if (!atomic_read(&bounce.in_use)) {
2844 cpu_notify_map_clients_locked();
2846 qemu_mutex_unlock(&map_client_list_lock);
2849 void cpu_exec_init_all(void)
2851 qemu_mutex_init(&ram_list.mutex);
2852 /* The data structures we set up here depend on knowing the page size,
2853 * so no more changes can be made after this point.
2854 * In an ideal world, nothing we did before we had finished the
2855 * machine setup would care about the target page size, and we could
2856 * do this much later, rather than requiring board models to state
2857 * up front what their requirements are.
2859 finalize_target_page_bits();
2860 io_mem_init();
2861 memory_map_init();
2862 qemu_mutex_init(&map_client_list_lock);
2865 void cpu_unregister_map_client(QEMUBH *bh)
2867 MapClient *client;
2869 qemu_mutex_lock(&map_client_list_lock);
2870 QLIST_FOREACH(client, &map_client_list, link) {
2871 if (client->bh == bh) {
2872 cpu_unregister_map_client_do(client);
2873 break;
2876 qemu_mutex_unlock(&map_client_list_lock);
2879 static void cpu_notify_map_clients(void)
2881 qemu_mutex_lock(&map_client_list_lock);
2882 cpu_notify_map_clients_locked();
2883 qemu_mutex_unlock(&map_client_list_lock);
2886 bool address_space_access_valid(AddressSpace *as, hwaddr addr, int len, bool is_write)
2888 MemoryRegion *mr;
2889 hwaddr l, xlat;
2891 rcu_read_lock();
2892 while (len > 0) {
2893 l = len;
2894 mr = address_space_translate(as, addr, &xlat, &l, is_write);
2895 if (!memory_access_is_direct(mr, is_write)) {
2896 l = memory_access_size(mr, l, addr);
2897 if (!memory_region_access_valid(mr, xlat, l, is_write)) {
2898 return false;
2902 len -= l;
2903 addr += l;
2905 rcu_read_unlock();
2906 return true;
2909 /* Map a physical memory region into a host virtual address.
2910 * May map a subset of the requested range, given by and returned in *plen.
2911 * May return NULL if resources needed to perform the mapping are exhausted.
2912 * Use only for reads OR writes - not for read-modify-write operations.
2913 * Use cpu_register_map_client() to know when retrying the map operation is
2914 * likely to succeed.
2916 void *address_space_map(AddressSpace *as,
2917 hwaddr addr,
2918 hwaddr *plen,
2919 bool is_write)
2921 hwaddr len = *plen;
2922 hwaddr done = 0;
2923 hwaddr l, xlat, base;
2924 MemoryRegion *mr, *this_mr;
2925 void *ptr;
2927 if (len == 0) {
2928 return NULL;
2931 l = len;
2932 rcu_read_lock();
2933 mr = address_space_translate(as, addr, &xlat, &l, is_write);
2935 if (!memory_access_is_direct(mr, is_write)) {
2936 if (atomic_xchg(&bounce.in_use, true)) {
2937 rcu_read_unlock();
2938 return NULL;
2940 /* Avoid unbounded allocations */
2941 l = MIN(l, TARGET_PAGE_SIZE);
2942 bounce.buffer = qemu_memalign(TARGET_PAGE_SIZE, l);
2943 bounce.addr = addr;
2944 bounce.len = l;
2946 memory_region_ref(mr);
2947 bounce.mr = mr;
2948 if (!is_write) {
2949 address_space_read(as, addr, MEMTXATTRS_UNSPECIFIED,
2950 bounce.buffer, l);
2953 rcu_read_unlock();
2954 *plen = l;
2955 return bounce.buffer;
2958 base = xlat;
2960 for (;;) {
2961 len -= l;
2962 addr += l;
2963 done += l;
2964 if (len == 0) {
2965 break;
2968 l = len;
2969 this_mr = address_space_translate(as, addr, &xlat, &l, is_write);
2970 if (this_mr != mr || xlat != base + done) {
2971 break;
2975 memory_region_ref(mr);
2976 *plen = done;
2977 ptr = qemu_ram_ptr_length(mr->ram_block, base, plen);
2978 rcu_read_unlock();
2980 return ptr;
2983 /* Unmaps a memory region previously mapped by address_space_map().
2984 * Will also mark the memory as dirty if is_write == 1. access_len gives
2985 * the amount of memory that was actually read or written by the caller.
2987 void address_space_unmap(AddressSpace *as, void *buffer, hwaddr len,
2988 int is_write, hwaddr access_len)
2990 if (buffer != bounce.buffer) {
2991 MemoryRegion *mr;
2992 ram_addr_t addr1;
2994 mr = memory_region_from_host(buffer, &addr1);
2995 assert(mr != NULL);
2996 if (is_write) {
2997 invalidate_and_set_dirty(mr, addr1, access_len);
2999 if (xen_enabled()) {
3000 xen_invalidate_map_cache_entry(buffer);
3002 memory_region_unref(mr);
3003 return;
3005 if (is_write) {
3006 address_space_write(as, bounce.addr, MEMTXATTRS_UNSPECIFIED,
3007 bounce.buffer, access_len);
3009 qemu_vfree(bounce.buffer);
3010 bounce.buffer = NULL;
3011 memory_region_unref(bounce.mr);
3012 atomic_mb_set(&bounce.in_use, false);
3013 cpu_notify_map_clients();
3016 void *cpu_physical_memory_map(hwaddr addr,
3017 hwaddr *plen,
3018 int is_write)
3020 return address_space_map(&address_space_memory, addr, plen, is_write);
3023 void cpu_physical_memory_unmap(void *buffer, hwaddr len,
3024 int is_write, hwaddr access_len)
3026 return address_space_unmap(&address_space_memory, buffer, len, is_write, access_len);
3029 /* warning: addr must be aligned */
3030 static inline uint32_t address_space_ldl_internal(AddressSpace *as, hwaddr addr,
3031 MemTxAttrs attrs,
3032 MemTxResult *result,
3033 enum device_endian endian)
3035 uint8_t *ptr;
3036 uint64_t val;
3037 MemoryRegion *mr;
3038 hwaddr l = 4;
3039 hwaddr addr1;
3040 MemTxResult r;
3041 bool release_lock = false;
3043 rcu_read_lock();
3044 mr = address_space_translate(as, addr, &addr1, &l, false);
3045 if (l < 4 || !memory_access_is_direct(mr, false)) {
3046 release_lock |= prepare_mmio_access(mr);
3048 /* I/O case */
3049 r = memory_region_dispatch_read(mr, addr1, &val, 4, attrs);
3050 #if defined(TARGET_WORDS_BIGENDIAN)
3051 if (endian == DEVICE_LITTLE_ENDIAN) {
3052 val = bswap32(val);
3054 #else
3055 if (endian == DEVICE_BIG_ENDIAN) {
3056 val = bswap32(val);
3058 #endif
3059 } else {
3060 /* RAM case */
3061 ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
3062 switch (endian) {
3063 case DEVICE_LITTLE_ENDIAN:
3064 val = ldl_le_p(ptr);
3065 break;
3066 case DEVICE_BIG_ENDIAN:
3067 val = ldl_be_p(ptr);
3068 break;
3069 default:
3070 val = ldl_p(ptr);
3071 break;
3073 r = MEMTX_OK;
3075 if (result) {
3076 *result = r;
3078 if (release_lock) {
3079 qemu_mutex_unlock_iothread();
3081 rcu_read_unlock();
3082 return val;
3085 uint32_t address_space_ldl(AddressSpace *as, hwaddr addr,
3086 MemTxAttrs attrs, MemTxResult *result)
3088 return address_space_ldl_internal(as, addr, attrs, result,
3089 DEVICE_NATIVE_ENDIAN);
3092 uint32_t address_space_ldl_le(AddressSpace *as, hwaddr addr,
3093 MemTxAttrs attrs, MemTxResult *result)
3095 return address_space_ldl_internal(as, addr, attrs, result,
3096 DEVICE_LITTLE_ENDIAN);
3099 uint32_t address_space_ldl_be(AddressSpace *as, hwaddr addr,
3100 MemTxAttrs attrs, MemTxResult *result)
3102 return address_space_ldl_internal(as, addr, attrs, result,
3103 DEVICE_BIG_ENDIAN);
3106 uint32_t ldl_phys(AddressSpace *as, hwaddr addr)
3108 return address_space_ldl(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3111 uint32_t ldl_le_phys(AddressSpace *as, hwaddr addr)
3113 return address_space_ldl_le(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3116 uint32_t ldl_be_phys(AddressSpace *as, hwaddr addr)
3118 return address_space_ldl_be(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3121 /* warning: addr must be aligned */
3122 static inline uint64_t address_space_ldq_internal(AddressSpace *as, hwaddr addr,
3123 MemTxAttrs attrs,
3124 MemTxResult *result,
3125 enum device_endian endian)
3127 uint8_t *ptr;
3128 uint64_t val;
3129 MemoryRegion *mr;
3130 hwaddr l = 8;
3131 hwaddr addr1;
3132 MemTxResult r;
3133 bool release_lock = false;
3135 rcu_read_lock();
3136 mr = address_space_translate(as, addr, &addr1, &l,
3137 false);
3138 if (l < 8 || !memory_access_is_direct(mr, false)) {
3139 release_lock |= prepare_mmio_access(mr);
3141 /* I/O case */
3142 r = memory_region_dispatch_read(mr, addr1, &val, 8, attrs);
3143 #if defined(TARGET_WORDS_BIGENDIAN)
3144 if (endian == DEVICE_LITTLE_ENDIAN) {
3145 val = bswap64(val);
3147 #else
3148 if (endian == DEVICE_BIG_ENDIAN) {
3149 val = bswap64(val);
3151 #endif
3152 } else {
3153 /* RAM case */
3154 ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
3155 switch (endian) {
3156 case DEVICE_LITTLE_ENDIAN:
3157 val = ldq_le_p(ptr);
3158 break;
3159 case DEVICE_BIG_ENDIAN:
3160 val = ldq_be_p(ptr);
3161 break;
3162 default:
3163 val = ldq_p(ptr);
3164 break;
3166 r = MEMTX_OK;
3168 if (result) {
3169 *result = r;
3171 if (release_lock) {
3172 qemu_mutex_unlock_iothread();
3174 rcu_read_unlock();
3175 return val;
3178 uint64_t address_space_ldq(AddressSpace *as, hwaddr addr,
3179 MemTxAttrs attrs, MemTxResult *result)
3181 return address_space_ldq_internal(as, addr, attrs, result,
3182 DEVICE_NATIVE_ENDIAN);
3185 uint64_t address_space_ldq_le(AddressSpace *as, hwaddr addr,
3186 MemTxAttrs attrs, MemTxResult *result)
3188 return address_space_ldq_internal(as, addr, attrs, result,
3189 DEVICE_LITTLE_ENDIAN);
3192 uint64_t address_space_ldq_be(AddressSpace *as, hwaddr addr,
3193 MemTxAttrs attrs, MemTxResult *result)
3195 return address_space_ldq_internal(as, addr, attrs, result,
3196 DEVICE_BIG_ENDIAN);
3199 uint64_t ldq_phys(AddressSpace *as, hwaddr addr)
3201 return address_space_ldq(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3204 uint64_t ldq_le_phys(AddressSpace *as, hwaddr addr)
3206 return address_space_ldq_le(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3209 uint64_t ldq_be_phys(AddressSpace *as, hwaddr addr)
3211 return address_space_ldq_be(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3214 /* XXX: optimize */
3215 uint32_t address_space_ldub(AddressSpace *as, hwaddr addr,
3216 MemTxAttrs attrs, MemTxResult *result)
3218 uint8_t val;
3219 MemTxResult r;
3221 r = address_space_rw(as, addr, attrs, &val, 1, 0);
3222 if (result) {
3223 *result = r;
3225 return val;
3228 uint32_t ldub_phys(AddressSpace *as, hwaddr addr)
3230 return address_space_ldub(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3233 /* warning: addr must be aligned */
3234 static inline uint32_t address_space_lduw_internal(AddressSpace *as,
3235 hwaddr addr,
3236 MemTxAttrs attrs,
3237 MemTxResult *result,
3238 enum device_endian endian)
3240 uint8_t *ptr;
3241 uint64_t val;
3242 MemoryRegion *mr;
3243 hwaddr l = 2;
3244 hwaddr addr1;
3245 MemTxResult r;
3246 bool release_lock = false;
3248 rcu_read_lock();
3249 mr = address_space_translate(as, addr, &addr1, &l,
3250 false);
3251 if (l < 2 || !memory_access_is_direct(mr, false)) {
3252 release_lock |= prepare_mmio_access(mr);
3254 /* I/O case */
3255 r = memory_region_dispatch_read(mr, addr1, &val, 2, attrs);
3256 #if defined(TARGET_WORDS_BIGENDIAN)
3257 if (endian == DEVICE_LITTLE_ENDIAN) {
3258 val = bswap16(val);
3260 #else
3261 if (endian == DEVICE_BIG_ENDIAN) {
3262 val = bswap16(val);
3264 #endif
3265 } else {
3266 /* RAM case */
3267 ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
3268 switch (endian) {
3269 case DEVICE_LITTLE_ENDIAN:
3270 val = lduw_le_p(ptr);
3271 break;
3272 case DEVICE_BIG_ENDIAN:
3273 val = lduw_be_p(ptr);
3274 break;
3275 default:
3276 val = lduw_p(ptr);
3277 break;
3279 r = MEMTX_OK;
3281 if (result) {
3282 *result = r;
3284 if (release_lock) {
3285 qemu_mutex_unlock_iothread();
3287 rcu_read_unlock();
3288 return val;
3291 uint32_t address_space_lduw(AddressSpace *as, hwaddr addr,
3292 MemTxAttrs attrs, MemTxResult *result)
3294 return address_space_lduw_internal(as, addr, attrs, result,
3295 DEVICE_NATIVE_ENDIAN);
3298 uint32_t address_space_lduw_le(AddressSpace *as, hwaddr addr,
3299 MemTxAttrs attrs, MemTxResult *result)
3301 return address_space_lduw_internal(as, addr, attrs, result,
3302 DEVICE_LITTLE_ENDIAN);
3305 uint32_t address_space_lduw_be(AddressSpace *as, hwaddr addr,
3306 MemTxAttrs attrs, MemTxResult *result)
3308 return address_space_lduw_internal(as, addr, attrs, result,
3309 DEVICE_BIG_ENDIAN);
3312 uint32_t lduw_phys(AddressSpace *as, hwaddr addr)
3314 return address_space_lduw(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3317 uint32_t lduw_le_phys(AddressSpace *as, hwaddr addr)
3319 return address_space_lduw_le(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3322 uint32_t lduw_be_phys(AddressSpace *as, hwaddr addr)
3324 return address_space_lduw_be(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3327 /* warning: addr must be aligned. The ram page is not masked as dirty
3328 and the code inside is not invalidated. It is useful if the dirty
3329 bits are used to track modified PTEs */
3330 void address_space_stl_notdirty(AddressSpace *as, hwaddr addr, uint32_t val,
3331 MemTxAttrs attrs, MemTxResult *result)
3333 uint8_t *ptr;
3334 MemoryRegion *mr;
3335 hwaddr l = 4;
3336 hwaddr addr1;
3337 MemTxResult r;
3338 uint8_t dirty_log_mask;
3339 bool release_lock = false;
3341 rcu_read_lock();
3342 mr = address_space_translate(as, addr, &addr1, &l,
3343 true);
3344 if (l < 4 || !memory_access_is_direct(mr, true)) {
3345 release_lock |= prepare_mmio_access(mr);
3347 r = memory_region_dispatch_write(mr, addr1, val, 4, attrs);
3348 } else {
3349 ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
3350 stl_p(ptr, val);
3352 dirty_log_mask = memory_region_get_dirty_log_mask(mr);
3353 dirty_log_mask &= ~(1 << DIRTY_MEMORY_CODE);
3354 cpu_physical_memory_set_dirty_range(memory_region_get_ram_addr(mr) + addr,
3355 4, dirty_log_mask);
3356 r = MEMTX_OK;
3358 if (result) {
3359 *result = r;
3361 if (release_lock) {
3362 qemu_mutex_unlock_iothread();
3364 rcu_read_unlock();
3367 void stl_phys_notdirty(AddressSpace *as, hwaddr addr, uint32_t val)
3369 address_space_stl_notdirty(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3372 /* warning: addr must be aligned */
3373 static inline void address_space_stl_internal(AddressSpace *as,
3374 hwaddr addr, uint32_t val,
3375 MemTxAttrs attrs,
3376 MemTxResult *result,
3377 enum device_endian endian)
3379 uint8_t *ptr;
3380 MemoryRegion *mr;
3381 hwaddr l = 4;
3382 hwaddr addr1;
3383 MemTxResult r;
3384 bool release_lock = false;
3386 rcu_read_lock();
3387 mr = address_space_translate(as, addr, &addr1, &l,
3388 true);
3389 if (l < 4 || !memory_access_is_direct(mr, true)) {
3390 release_lock |= prepare_mmio_access(mr);
3392 #if defined(TARGET_WORDS_BIGENDIAN)
3393 if (endian == DEVICE_LITTLE_ENDIAN) {
3394 val = bswap32(val);
3396 #else
3397 if (endian == DEVICE_BIG_ENDIAN) {
3398 val = bswap32(val);
3400 #endif
3401 r = memory_region_dispatch_write(mr, addr1, val, 4, attrs);
3402 } else {
3403 /* RAM case */
3404 ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
3405 switch (endian) {
3406 case DEVICE_LITTLE_ENDIAN:
3407 stl_le_p(ptr, val);
3408 break;
3409 case DEVICE_BIG_ENDIAN:
3410 stl_be_p(ptr, val);
3411 break;
3412 default:
3413 stl_p(ptr, val);
3414 break;
3416 invalidate_and_set_dirty(mr, addr1, 4);
3417 r = MEMTX_OK;
3419 if (result) {
3420 *result = r;
3422 if (release_lock) {
3423 qemu_mutex_unlock_iothread();
3425 rcu_read_unlock();
3428 void address_space_stl(AddressSpace *as, hwaddr addr, uint32_t val,
3429 MemTxAttrs attrs, MemTxResult *result)
3431 address_space_stl_internal(as, addr, val, attrs, result,
3432 DEVICE_NATIVE_ENDIAN);
3435 void address_space_stl_le(AddressSpace *as, hwaddr addr, uint32_t val,
3436 MemTxAttrs attrs, MemTxResult *result)
3438 address_space_stl_internal(as, addr, val, attrs, result,
3439 DEVICE_LITTLE_ENDIAN);
3442 void address_space_stl_be(AddressSpace *as, hwaddr addr, uint32_t val,
3443 MemTxAttrs attrs, MemTxResult *result)
3445 address_space_stl_internal(as, addr, val, attrs, result,
3446 DEVICE_BIG_ENDIAN);
3449 void stl_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3451 address_space_stl(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3454 void stl_le_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3456 address_space_stl_le(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3459 void stl_be_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3461 address_space_stl_be(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3464 /* XXX: optimize */
3465 void address_space_stb(AddressSpace *as, hwaddr addr, uint32_t val,
3466 MemTxAttrs attrs, MemTxResult *result)
3468 uint8_t v = val;
3469 MemTxResult r;
3471 r = address_space_rw(as, addr, attrs, &v, 1, 1);
3472 if (result) {
3473 *result = r;
3477 void stb_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3479 address_space_stb(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3482 /* warning: addr must be aligned */
3483 static inline void address_space_stw_internal(AddressSpace *as,
3484 hwaddr addr, uint32_t val,
3485 MemTxAttrs attrs,
3486 MemTxResult *result,
3487 enum device_endian endian)
3489 uint8_t *ptr;
3490 MemoryRegion *mr;
3491 hwaddr l = 2;
3492 hwaddr addr1;
3493 MemTxResult r;
3494 bool release_lock = false;
3496 rcu_read_lock();
3497 mr = address_space_translate(as, addr, &addr1, &l, true);
3498 if (l < 2 || !memory_access_is_direct(mr, true)) {
3499 release_lock |= prepare_mmio_access(mr);
3501 #if defined(TARGET_WORDS_BIGENDIAN)
3502 if (endian == DEVICE_LITTLE_ENDIAN) {
3503 val = bswap16(val);
3505 #else
3506 if (endian == DEVICE_BIG_ENDIAN) {
3507 val = bswap16(val);
3509 #endif
3510 r = memory_region_dispatch_write(mr, addr1, val, 2, attrs);
3511 } else {
3512 /* RAM case */
3513 ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
3514 switch (endian) {
3515 case DEVICE_LITTLE_ENDIAN:
3516 stw_le_p(ptr, val);
3517 break;
3518 case DEVICE_BIG_ENDIAN:
3519 stw_be_p(ptr, val);
3520 break;
3521 default:
3522 stw_p(ptr, val);
3523 break;
3525 invalidate_and_set_dirty(mr, addr1, 2);
3526 r = MEMTX_OK;
3528 if (result) {
3529 *result = r;
3531 if (release_lock) {
3532 qemu_mutex_unlock_iothread();
3534 rcu_read_unlock();
3537 void address_space_stw(AddressSpace *as, hwaddr addr, uint32_t val,
3538 MemTxAttrs attrs, MemTxResult *result)
3540 address_space_stw_internal(as, addr, val, attrs, result,
3541 DEVICE_NATIVE_ENDIAN);
3544 void address_space_stw_le(AddressSpace *as, hwaddr addr, uint32_t val,
3545 MemTxAttrs attrs, MemTxResult *result)
3547 address_space_stw_internal(as, addr, val, attrs, result,
3548 DEVICE_LITTLE_ENDIAN);
3551 void address_space_stw_be(AddressSpace *as, hwaddr addr, uint32_t val,
3552 MemTxAttrs attrs, MemTxResult *result)
3554 address_space_stw_internal(as, addr, val, attrs, result,
3555 DEVICE_BIG_ENDIAN);
3558 void stw_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3560 address_space_stw(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3563 void stw_le_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3565 address_space_stw_le(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3568 void stw_be_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3570 address_space_stw_be(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3573 /* XXX: optimize */
3574 void address_space_stq(AddressSpace *as, hwaddr addr, uint64_t val,
3575 MemTxAttrs attrs, MemTxResult *result)
3577 MemTxResult r;
3578 val = tswap64(val);
3579 r = address_space_rw(as, addr, attrs, (void *) &val, 8, 1);
3580 if (result) {
3581 *result = r;
3585 void address_space_stq_le(AddressSpace *as, hwaddr addr, uint64_t val,
3586 MemTxAttrs attrs, MemTxResult *result)
3588 MemTxResult r;
3589 val = cpu_to_le64(val);
3590 r = address_space_rw(as, addr, attrs, (void *) &val, 8, 1);
3591 if (result) {
3592 *result = r;
3595 void address_space_stq_be(AddressSpace *as, hwaddr addr, uint64_t val,
3596 MemTxAttrs attrs, MemTxResult *result)
3598 MemTxResult r;
3599 val = cpu_to_be64(val);
3600 r = address_space_rw(as, addr, attrs, (void *) &val, 8, 1);
3601 if (result) {
3602 *result = r;
3606 void stq_phys(AddressSpace *as, hwaddr addr, uint64_t val)
3608 address_space_stq(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3611 void stq_le_phys(AddressSpace *as, hwaddr addr, uint64_t val)
3613 address_space_stq_le(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3616 void stq_be_phys(AddressSpace *as, hwaddr addr, uint64_t val)
3618 address_space_stq_be(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3621 /* virtual memory access for debug (includes writing to ROM) */
3622 int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
3623 uint8_t *buf, int len, int is_write)
3625 int l;
3626 hwaddr phys_addr;
3627 target_ulong page;
3629 while (len > 0) {
3630 int asidx;
3631 MemTxAttrs attrs;
3633 page = addr & TARGET_PAGE_MASK;
3634 phys_addr = cpu_get_phys_page_attrs_debug(cpu, page, &attrs);
3635 asidx = cpu_asidx_from_attrs(cpu, attrs);
3636 /* if no physical page mapped, return an error */
3637 if (phys_addr == -1)
3638 return -1;
3639 l = (page + TARGET_PAGE_SIZE) - addr;
3640 if (l > len)
3641 l = len;
3642 phys_addr += (addr & ~TARGET_PAGE_MASK);
3643 if (is_write) {
3644 cpu_physical_memory_write_rom(cpu->cpu_ases[asidx].as,
3645 phys_addr, buf, l);
3646 } else {
3647 address_space_rw(cpu->cpu_ases[asidx].as, phys_addr,
3648 MEMTXATTRS_UNSPECIFIED,
3649 buf, l, 0);
3651 len -= l;
3652 buf += l;
3653 addr += l;
3655 return 0;
3659 * Allows code that needs to deal with migration bitmaps etc to still be built
3660 * target independent.
3662 size_t qemu_target_page_bits(void)
3664 return TARGET_PAGE_BITS;
3667 #endif
3670 * A helper function for the _utterly broken_ virtio device model to find out if
3671 * it's running on a big endian machine. Don't do this at home kids!
3673 bool target_words_bigendian(void);
3674 bool target_words_bigendian(void)
3676 #if defined(TARGET_WORDS_BIGENDIAN)
3677 return true;
3678 #else
3679 return false;
3680 #endif
3683 #ifndef CONFIG_USER_ONLY
3684 bool cpu_physical_memory_is_io(hwaddr phys_addr)
3686 MemoryRegion*mr;
3687 hwaddr l = 1;
3688 bool res;
3690 rcu_read_lock();
3691 mr = address_space_translate(&address_space_memory,
3692 phys_addr, &phys_addr, &l, false);
3694 res = !(memory_region_is_ram(mr) || memory_region_is_romd(mr));
3695 rcu_read_unlock();
3696 return res;
3699 int qemu_ram_foreach_block(RAMBlockIterFunc func, void *opaque)
3701 RAMBlock *block;
3702 int ret = 0;
3704 rcu_read_lock();
3705 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
3706 ret = func(block->idstr, block->host, block->offset,
3707 block->used_length, opaque);
3708 if (ret) {
3709 break;
3712 rcu_read_unlock();
3713 return ret;
3715 #endif