cpu: Add Error argument to cpu_exec_init()
[qemu/cris-port.git] / exec.c
blobce5fadd88a95e340a2c7c21a9366e01047522fa1
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 "config.h"
20 #ifndef _WIN32
21 #include <sys/types.h>
22 #include <sys/mman.h>
23 #endif
25 #include "qemu-common.h"
26 #include "cpu.h"
27 #include "tcg.h"
28 #include "hw/hw.h"
29 #if !defined(CONFIG_USER_ONLY)
30 #include "hw/boards.h"
31 #endif
32 #include "hw/qdev.h"
33 #include "qemu/osdep.h"
34 #include "sysemu/kvm.h"
35 #include "sysemu/sysemu.h"
36 #include "hw/xen/xen.h"
37 #include "qemu/timer.h"
38 #include "qemu/config-file.h"
39 #include "qemu/error-report.h"
40 #include "exec/memory.h"
41 #include "sysemu/dma.h"
42 #include "exec/address-spaces.h"
43 #if defined(CONFIG_USER_ONLY)
44 #include <qemu.h>
45 #else /* !CONFIG_USER_ONLY */
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 "exec/cputlb.h"
53 #include "translate-all.h"
55 #include "exec/memory-internal.h"
56 #include "exec/ram_addr.h"
58 #include "qemu/range.h"
60 //#define DEBUG_SUBPAGE
62 #if !defined(CONFIG_USER_ONLY)
63 /* ram_list is read under rcu_read_lock()/rcu_read_unlock(). Writes
64 * are protected by the ramlist lock.
66 RAMList ram_list = { .blocks = QLIST_HEAD_INITIALIZER(ram_list.blocks) };
68 static MemoryRegion *system_memory;
69 static MemoryRegion *system_io;
71 AddressSpace address_space_io;
72 AddressSpace address_space_memory;
74 MemoryRegion io_mem_rom, io_mem_notdirty;
75 static MemoryRegion io_mem_unassigned;
77 /* RAM is pre-allocated and passed into qemu_ram_alloc_from_ptr */
78 #define RAM_PREALLOC (1 << 0)
80 /* RAM is mmap-ed with MAP_SHARED */
81 #define RAM_SHARED (1 << 1)
83 /* Only a portion of RAM (used_length) is actually used, and migrated.
84 * This used_length size can change across reboots.
86 #define RAM_RESIZEABLE (1 << 2)
88 #endif
90 struct CPUTailQ cpus = QTAILQ_HEAD_INITIALIZER(cpus);
91 /* current CPU in the current thread. It is only valid inside
92 cpu_exec() */
93 DEFINE_TLS(CPUState *, current_cpu);
94 /* 0 = Do not count executed instructions.
95 1 = Precise instruction counting.
96 2 = Adaptive rate instruction counting. */
97 int use_icount;
99 #if !defined(CONFIG_USER_ONLY)
101 typedef struct PhysPageEntry PhysPageEntry;
103 struct PhysPageEntry {
104 /* How many bits skip to next level (in units of L2_SIZE). 0 for a leaf. */
105 uint32_t skip : 6;
106 /* index into phys_sections (!skip) or phys_map_nodes (skip) */
107 uint32_t ptr : 26;
110 #define PHYS_MAP_NODE_NIL (((uint32_t)~0) >> 6)
112 /* Size of the L2 (and L3, etc) page tables. */
113 #define ADDR_SPACE_BITS 64
115 #define P_L2_BITS 9
116 #define P_L2_SIZE (1 << P_L2_BITS)
118 #define P_L2_LEVELS (((ADDR_SPACE_BITS - TARGET_PAGE_BITS - 1) / P_L2_BITS) + 1)
120 typedef PhysPageEntry Node[P_L2_SIZE];
122 typedef struct PhysPageMap {
123 struct rcu_head rcu;
125 unsigned sections_nb;
126 unsigned sections_nb_alloc;
127 unsigned nodes_nb;
128 unsigned nodes_nb_alloc;
129 Node *nodes;
130 MemoryRegionSection *sections;
131 } PhysPageMap;
133 struct AddressSpaceDispatch {
134 struct rcu_head rcu;
136 /* This is a multi-level map on the physical address space.
137 * The bottom level has pointers to MemoryRegionSections.
139 PhysPageEntry phys_map;
140 PhysPageMap map;
141 AddressSpace *as;
144 #define SUBPAGE_IDX(addr) ((addr) & ~TARGET_PAGE_MASK)
145 typedef struct subpage_t {
146 MemoryRegion iomem;
147 AddressSpace *as;
148 hwaddr base;
149 uint16_t sub_section[TARGET_PAGE_SIZE];
150 } subpage_t;
152 #define PHYS_SECTION_UNASSIGNED 0
153 #define PHYS_SECTION_NOTDIRTY 1
154 #define PHYS_SECTION_ROM 2
155 #define PHYS_SECTION_WATCH 3
157 static void io_mem_init(void);
158 static void memory_map_init(void);
159 static void tcg_commit(MemoryListener *listener);
161 static MemoryRegion io_mem_watch;
162 #endif
164 #if !defined(CONFIG_USER_ONLY)
166 static void phys_map_node_reserve(PhysPageMap *map, unsigned nodes)
168 if (map->nodes_nb + nodes > map->nodes_nb_alloc) {
169 map->nodes_nb_alloc = MAX(map->nodes_nb_alloc * 2, 16);
170 map->nodes_nb_alloc = MAX(map->nodes_nb_alloc, map->nodes_nb + nodes);
171 map->nodes = g_renew(Node, map->nodes, map->nodes_nb_alloc);
175 static uint32_t phys_map_node_alloc(PhysPageMap *map, bool leaf)
177 unsigned i;
178 uint32_t ret;
179 PhysPageEntry e;
180 PhysPageEntry *p;
182 ret = map->nodes_nb++;
183 p = map->nodes[ret];
184 assert(ret != PHYS_MAP_NODE_NIL);
185 assert(ret != map->nodes_nb_alloc);
187 e.skip = leaf ? 0 : 1;
188 e.ptr = leaf ? PHYS_SECTION_UNASSIGNED : PHYS_MAP_NODE_NIL;
189 for (i = 0; i < P_L2_SIZE; ++i) {
190 memcpy(&p[i], &e, sizeof(e));
192 return ret;
195 static void phys_page_set_level(PhysPageMap *map, PhysPageEntry *lp,
196 hwaddr *index, hwaddr *nb, uint16_t leaf,
197 int level)
199 PhysPageEntry *p;
200 hwaddr step = (hwaddr)1 << (level * P_L2_BITS);
202 if (lp->skip && lp->ptr == PHYS_MAP_NODE_NIL) {
203 lp->ptr = phys_map_node_alloc(map, level == 0);
205 p = map->nodes[lp->ptr];
206 lp = &p[(*index >> (level * P_L2_BITS)) & (P_L2_SIZE - 1)];
208 while (*nb && lp < &p[P_L2_SIZE]) {
209 if ((*index & (step - 1)) == 0 && *nb >= step) {
210 lp->skip = 0;
211 lp->ptr = leaf;
212 *index += step;
213 *nb -= step;
214 } else {
215 phys_page_set_level(map, lp, index, nb, leaf, level - 1);
217 ++lp;
221 static void phys_page_set(AddressSpaceDispatch *d,
222 hwaddr index, hwaddr nb,
223 uint16_t leaf)
225 /* Wildly overreserve - it doesn't matter much. */
226 phys_map_node_reserve(&d->map, 3 * P_L2_LEVELS);
228 phys_page_set_level(&d->map, &d->phys_map, &index, &nb, leaf, P_L2_LEVELS - 1);
231 /* Compact a non leaf page entry. Simply detect that the entry has a single child,
232 * and update our entry so we can skip it and go directly to the destination.
234 static void phys_page_compact(PhysPageEntry *lp, Node *nodes, unsigned long *compacted)
236 unsigned valid_ptr = P_L2_SIZE;
237 int valid = 0;
238 PhysPageEntry *p;
239 int i;
241 if (lp->ptr == PHYS_MAP_NODE_NIL) {
242 return;
245 p = nodes[lp->ptr];
246 for (i = 0; i < P_L2_SIZE; i++) {
247 if (p[i].ptr == PHYS_MAP_NODE_NIL) {
248 continue;
251 valid_ptr = i;
252 valid++;
253 if (p[i].skip) {
254 phys_page_compact(&p[i], nodes, compacted);
258 /* We can only compress if there's only one child. */
259 if (valid != 1) {
260 return;
263 assert(valid_ptr < P_L2_SIZE);
265 /* Don't compress if it won't fit in the # of bits we have. */
266 if (lp->skip + p[valid_ptr].skip >= (1 << 3)) {
267 return;
270 lp->ptr = p[valid_ptr].ptr;
271 if (!p[valid_ptr].skip) {
272 /* If our only child is a leaf, make this a leaf. */
273 /* By design, we should have made this node a leaf to begin with so we
274 * should never reach here.
275 * But since it's so simple to handle this, let's do it just in case we
276 * change this rule.
278 lp->skip = 0;
279 } else {
280 lp->skip += p[valid_ptr].skip;
284 static void phys_page_compact_all(AddressSpaceDispatch *d, int nodes_nb)
286 DECLARE_BITMAP(compacted, nodes_nb);
288 if (d->phys_map.skip) {
289 phys_page_compact(&d->phys_map, d->map.nodes, compacted);
293 static MemoryRegionSection *phys_page_find(PhysPageEntry lp, hwaddr addr,
294 Node *nodes, MemoryRegionSection *sections)
296 PhysPageEntry *p;
297 hwaddr index = addr >> TARGET_PAGE_BITS;
298 int i;
300 for (i = P_L2_LEVELS; lp.skip && (i -= lp.skip) >= 0;) {
301 if (lp.ptr == PHYS_MAP_NODE_NIL) {
302 return &sections[PHYS_SECTION_UNASSIGNED];
304 p = nodes[lp.ptr];
305 lp = p[(index >> (i * P_L2_BITS)) & (P_L2_SIZE - 1)];
308 if (sections[lp.ptr].size.hi ||
309 range_covers_byte(sections[lp.ptr].offset_within_address_space,
310 sections[lp.ptr].size.lo, addr)) {
311 return &sections[lp.ptr];
312 } else {
313 return &sections[PHYS_SECTION_UNASSIGNED];
317 bool memory_region_is_unassigned(MemoryRegion *mr)
319 return mr != &io_mem_rom && mr != &io_mem_notdirty && !mr->rom_device
320 && mr != &io_mem_watch;
323 /* Called from RCU critical section */
324 static MemoryRegionSection *address_space_lookup_region(AddressSpaceDispatch *d,
325 hwaddr addr,
326 bool resolve_subpage)
328 MemoryRegionSection *section;
329 subpage_t *subpage;
331 section = phys_page_find(d->phys_map, addr, d->map.nodes, d->map.sections);
332 if (resolve_subpage && section->mr->subpage) {
333 subpage = container_of(section->mr, subpage_t, iomem);
334 section = &d->map.sections[subpage->sub_section[SUBPAGE_IDX(addr)]];
336 return section;
339 /* Called from RCU critical section */
340 static MemoryRegionSection *
341 address_space_translate_internal(AddressSpaceDispatch *d, hwaddr addr, hwaddr *xlat,
342 hwaddr *plen, bool resolve_subpage)
344 MemoryRegionSection *section;
345 MemoryRegion *mr;
346 Int128 diff;
348 section = address_space_lookup_region(d, addr, resolve_subpage);
349 /* Compute offset within MemoryRegionSection */
350 addr -= section->offset_within_address_space;
352 /* Compute offset within MemoryRegion */
353 *xlat = addr + section->offset_within_region;
355 mr = section->mr;
357 /* MMIO registers can be expected to perform full-width accesses based only
358 * on their address, without considering adjacent registers that could
359 * decode to completely different MemoryRegions. When such registers
360 * exist (e.g. I/O ports 0xcf8 and 0xcf9 on most PC chipsets), MMIO
361 * regions overlap wildly. For this reason we cannot clamp the accesses
362 * here.
364 * If the length is small (as is the case for address_space_ldl/stl),
365 * everything works fine. If the incoming length is large, however,
366 * the caller really has to do the clamping through memory_access_size.
368 if (memory_region_is_ram(mr)) {
369 diff = int128_sub(section->size, int128_make64(addr));
370 *plen = int128_get64(int128_min(diff, int128_make64(*plen)));
372 return section;
375 static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write)
377 if (memory_region_is_ram(mr)) {
378 return !(is_write && mr->readonly);
380 if (memory_region_is_romd(mr)) {
381 return !is_write;
384 return false;
387 /* Called from RCU critical section */
388 MemoryRegion *address_space_translate(AddressSpace *as, hwaddr addr,
389 hwaddr *xlat, hwaddr *plen,
390 bool is_write)
392 IOMMUTLBEntry iotlb;
393 MemoryRegionSection *section;
394 MemoryRegion *mr;
396 for (;;) {
397 AddressSpaceDispatch *d = atomic_rcu_read(&as->dispatch);
398 section = address_space_translate_internal(d, addr, &addr, plen, true);
399 mr = section->mr;
401 if (!mr->iommu_ops) {
402 break;
405 iotlb = mr->iommu_ops->translate(mr, addr, is_write);
406 addr = ((iotlb.translated_addr & ~iotlb.addr_mask)
407 | (addr & iotlb.addr_mask));
408 *plen = MIN(*plen, (addr | iotlb.addr_mask) - addr + 1);
409 if (!(iotlb.perm & (1 << is_write))) {
410 mr = &io_mem_unassigned;
411 break;
414 as = iotlb.target_as;
417 if (xen_enabled() && memory_access_is_direct(mr, is_write)) {
418 hwaddr page = ((addr & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE) - addr;
419 *plen = MIN(page, *plen);
422 *xlat = addr;
423 return mr;
426 /* Called from RCU critical section */
427 MemoryRegionSection *
428 address_space_translate_for_iotlb(CPUState *cpu, hwaddr addr,
429 hwaddr *xlat, hwaddr *plen)
431 MemoryRegionSection *section;
432 section = address_space_translate_internal(cpu->memory_dispatch,
433 addr, xlat, plen, false);
435 assert(!section->mr->iommu_ops);
436 return section;
438 #endif
440 #if !defined(CONFIG_USER_ONLY)
442 static int cpu_common_post_load(void *opaque, int version_id)
444 CPUState *cpu = opaque;
446 /* 0x01 was CPU_INTERRUPT_EXIT. This line can be removed when the
447 version_id is increased. */
448 cpu->interrupt_request &= ~0x01;
449 tlb_flush(cpu, 1);
451 return 0;
454 static int cpu_common_pre_load(void *opaque)
456 CPUState *cpu = opaque;
458 cpu->exception_index = -1;
460 return 0;
463 static bool cpu_common_exception_index_needed(void *opaque)
465 CPUState *cpu = opaque;
467 return tcg_enabled() && cpu->exception_index != -1;
470 static const VMStateDescription vmstate_cpu_common_exception_index = {
471 .name = "cpu_common/exception_index",
472 .version_id = 1,
473 .minimum_version_id = 1,
474 .needed = cpu_common_exception_index_needed,
475 .fields = (VMStateField[]) {
476 VMSTATE_INT32(exception_index, CPUState),
477 VMSTATE_END_OF_LIST()
481 const VMStateDescription vmstate_cpu_common = {
482 .name = "cpu_common",
483 .version_id = 1,
484 .minimum_version_id = 1,
485 .pre_load = cpu_common_pre_load,
486 .post_load = cpu_common_post_load,
487 .fields = (VMStateField[]) {
488 VMSTATE_UINT32(halted, CPUState),
489 VMSTATE_UINT32(interrupt_request, CPUState),
490 VMSTATE_END_OF_LIST()
492 .subsections = (const VMStateDescription*[]) {
493 &vmstate_cpu_common_exception_index,
494 NULL
498 #endif
500 CPUState *qemu_get_cpu(int index)
502 CPUState *cpu;
504 CPU_FOREACH(cpu) {
505 if (cpu->cpu_index == index) {
506 return cpu;
510 return NULL;
513 #if !defined(CONFIG_USER_ONLY)
514 void tcg_cpu_address_space_init(CPUState *cpu, AddressSpace *as)
516 /* We only support one address space per cpu at the moment. */
517 assert(cpu->as == as);
519 if (cpu->tcg_as_listener) {
520 memory_listener_unregister(cpu->tcg_as_listener);
521 } else {
522 cpu->tcg_as_listener = g_new0(MemoryListener, 1);
524 cpu->tcg_as_listener->commit = tcg_commit;
525 memory_listener_register(cpu->tcg_as_listener, as);
527 #endif
529 void cpu_exec_init(CPUArchState *env, Error **errp)
531 CPUState *cpu = ENV_GET_CPU(env);
532 CPUClass *cc = CPU_GET_CLASS(cpu);
533 CPUState *some_cpu;
534 int cpu_index;
536 #ifndef CONFIG_USER_ONLY
537 cpu->as = &address_space_memory;
538 cpu->thread_id = qemu_get_thread_id();
539 cpu_reload_memory_map(cpu);
540 #endif
542 #if defined(CONFIG_USER_ONLY)
543 cpu_list_lock();
544 #endif
545 cpu_index = 0;
546 CPU_FOREACH(some_cpu) {
547 cpu_index++;
549 cpu->cpu_index = cpu_index;
550 QTAILQ_INSERT_TAIL(&cpus, cpu, node);
551 #if defined(CONFIG_USER_ONLY)
552 cpu_list_unlock();
553 #endif
554 if (qdev_get_vmsd(DEVICE(cpu)) == NULL) {
555 vmstate_register(NULL, cpu_index, &vmstate_cpu_common, cpu);
557 #if defined(CPU_SAVE_VERSION) && !defined(CONFIG_USER_ONLY)
558 register_savevm(NULL, "cpu", cpu_index, CPU_SAVE_VERSION,
559 cpu_save, cpu_load, env);
560 assert(cc->vmsd == NULL);
561 assert(qdev_get_vmsd(DEVICE(cpu)) == NULL);
562 #endif
563 if (cc->vmsd != NULL) {
564 vmstate_register(NULL, cpu_index, cc->vmsd, cpu);
568 #if defined(CONFIG_USER_ONLY)
569 static void breakpoint_invalidate(CPUState *cpu, target_ulong pc)
571 tb_invalidate_phys_page_range(pc, pc + 1, 0);
573 #else
574 static void breakpoint_invalidate(CPUState *cpu, target_ulong pc)
576 hwaddr phys = cpu_get_phys_page_debug(cpu, pc);
577 if (phys != -1) {
578 tb_invalidate_phys_addr(cpu->as,
579 phys | (pc & ~TARGET_PAGE_MASK));
582 #endif
584 #if defined(CONFIG_USER_ONLY)
585 void cpu_watchpoint_remove_all(CPUState *cpu, int mask)
590 int cpu_watchpoint_remove(CPUState *cpu, vaddr addr, vaddr len,
591 int flags)
593 return -ENOSYS;
596 void cpu_watchpoint_remove_by_ref(CPUState *cpu, CPUWatchpoint *watchpoint)
600 int cpu_watchpoint_insert(CPUState *cpu, vaddr addr, vaddr len,
601 int flags, CPUWatchpoint **watchpoint)
603 return -ENOSYS;
605 #else
606 /* Add a watchpoint. */
607 int cpu_watchpoint_insert(CPUState *cpu, vaddr addr, vaddr len,
608 int flags, CPUWatchpoint **watchpoint)
610 CPUWatchpoint *wp;
612 /* forbid ranges which are empty or run off the end of the address space */
613 if (len == 0 || (addr + len - 1) < addr) {
614 error_report("tried to set invalid watchpoint at %"
615 VADDR_PRIx ", len=%" VADDR_PRIu, addr, len);
616 return -EINVAL;
618 wp = g_malloc(sizeof(*wp));
620 wp->vaddr = addr;
621 wp->len = len;
622 wp->flags = flags;
624 /* keep all GDB-injected watchpoints in front */
625 if (flags & BP_GDB) {
626 QTAILQ_INSERT_HEAD(&cpu->watchpoints, wp, entry);
627 } else {
628 QTAILQ_INSERT_TAIL(&cpu->watchpoints, wp, entry);
631 tlb_flush_page(cpu, addr);
633 if (watchpoint)
634 *watchpoint = wp;
635 return 0;
638 /* Remove a specific watchpoint. */
639 int cpu_watchpoint_remove(CPUState *cpu, vaddr addr, vaddr len,
640 int flags)
642 CPUWatchpoint *wp;
644 QTAILQ_FOREACH(wp, &cpu->watchpoints, entry) {
645 if (addr == wp->vaddr && len == wp->len
646 && flags == (wp->flags & ~BP_WATCHPOINT_HIT)) {
647 cpu_watchpoint_remove_by_ref(cpu, wp);
648 return 0;
651 return -ENOENT;
654 /* Remove a specific watchpoint by reference. */
655 void cpu_watchpoint_remove_by_ref(CPUState *cpu, CPUWatchpoint *watchpoint)
657 QTAILQ_REMOVE(&cpu->watchpoints, watchpoint, entry);
659 tlb_flush_page(cpu, watchpoint->vaddr);
661 g_free(watchpoint);
664 /* Remove all matching watchpoints. */
665 void cpu_watchpoint_remove_all(CPUState *cpu, int mask)
667 CPUWatchpoint *wp, *next;
669 QTAILQ_FOREACH_SAFE(wp, &cpu->watchpoints, entry, next) {
670 if (wp->flags & mask) {
671 cpu_watchpoint_remove_by_ref(cpu, wp);
676 /* Return true if this watchpoint address matches the specified
677 * access (ie the address range covered by the watchpoint overlaps
678 * partially or completely with the address range covered by the
679 * access).
681 static inline bool cpu_watchpoint_address_matches(CPUWatchpoint *wp,
682 vaddr addr,
683 vaddr len)
685 /* We know the lengths are non-zero, but a little caution is
686 * required to avoid errors in the case where the range ends
687 * exactly at the top of the address space and so addr + len
688 * wraps round to zero.
690 vaddr wpend = wp->vaddr + wp->len - 1;
691 vaddr addrend = addr + len - 1;
693 return !(addr > wpend || wp->vaddr > addrend);
696 #endif
698 /* Add a breakpoint. */
699 int cpu_breakpoint_insert(CPUState *cpu, vaddr pc, int flags,
700 CPUBreakpoint **breakpoint)
702 CPUBreakpoint *bp;
704 bp = g_malloc(sizeof(*bp));
706 bp->pc = pc;
707 bp->flags = flags;
709 /* keep all GDB-injected breakpoints in front */
710 if (flags & BP_GDB) {
711 QTAILQ_INSERT_HEAD(&cpu->breakpoints, bp, entry);
712 } else {
713 QTAILQ_INSERT_TAIL(&cpu->breakpoints, bp, entry);
716 breakpoint_invalidate(cpu, pc);
718 if (breakpoint) {
719 *breakpoint = bp;
721 return 0;
724 /* Remove a specific breakpoint. */
725 int cpu_breakpoint_remove(CPUState *cpu, vaddr pc, int flags)
727 CPUBreakpoint *bp;
729 QTAILQ_FOREACH(bp, &cpu->breakpoints, entry) {
730 if (bp->pc == pc && bp->flags == flags) {
731 cpu_breakpoint_remove_by_ref(cpu, bp);
732 return 0;
735 return -ENOENT;
738 /* Remove a specific breakpoint by reference. */
739 void cpu_breakpoint_remove_by_ref(CPUState *cpu, CPUBreakpoint *breakpoint)
741 QTAILQ_REMOVE(&cpu->breakpoints, breakpoint, entry);
743 breakpoint_invalidate(cpu, breakpoint->pc);
745 g_free(breakpoint);
748 /* Remove all matching breakpoints. */
749 void cpu_breakpoint_remove_all(CPUState *cpu, int mask)
751 CPUBreakpoint *bp, *next;
753 QTAILQ_FOREACH_SAFE(bp, &cpu->breakpoints, entry, next) {
754 if (bp->flags & mask) {
755 cpu_breakpoint_remove_by_ref(cpu, bp);
760 /* enable or disable single step mode. EXCP_DEBUG is returned by the
761 CPU loop after each instruction */
762 void cpu_single_step(CPUState *cpu, int enabled)
764 if (cpu->singlestep_enabled != enabled) {
765 cpu->singlestep_enabled = enabled;
766 if (kvm_enabled()) {
767 kvm_update_guest_debug(cpu, 0);
768 } else {
769 /* must flush all the translated code to avoid inconsistencies */
770 /* XXX: only flush what is necessary */
771 CPUArchState *env = cpu->env_ptr;
772 tb_flush(env);
777 void cpu_abort(CPUState *cpu, const char *fmt, ...)
779 va_list ap;
780 va_list ap2;
782 va_start(ap, fmt);
783 va_copy(ap2, ap);
784 fprintf(stderr, "qemu: fatal: ");
785 vfprintf(stderr, fmt, ap);
786 fprintf(stderr, "\n");
787 cpu_dump_state(cpu, stderr, fprintf, CPU_DUMP_FPU | CPU_DUMP_CCOP);
788 if (qemu_log_enabled()) {
789 qemu_log("qemu: fatal: ");
790 qemu_log_vprintf(fmt, ap2);
791 qemu_log("\n");
792 log_cpu_state(cpu, CPU_DUMP_FPU | CPU_DUMP_CCOP);
793 qemu_log_flush();
794 qemu_log_close();
796 va_end(ap2);
797 va_end(ap);
798 #if defined(CONFIG_USER_ONLY)
800 struct sigaction act;
801 sigfillset(&act.sa_mask);
802 act.sa_handler = SIG_DFL;
803 sigaction(SIGABRT, &act, NULL);
805 #endif
806 abort();
809 #if !defined(CONFIG_USER_ONLY)
810 /* Called from RCU critical section */
811 static RAMBlock *qemu_get_ram_block(ram_addr_t addr)
813 RAMBlock *block;
815 block = atomic_rcu_read(&ram_list.mru_block);
816 if (block && addr - block->offset < block->max_length) {
817 goto found;
819 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
820 if (addr - block->offset < block->max_length) {
821 goto found;
825 fprintf(stderr, "Bad ram offset %" PRIx64 "\n", (uint64_t)addr);
826 abort();
828 found:
829 /* It is safe to write mru_block outside the iothread lock. This
830 * is what happens:
832 * mru_block = xxx
833 * rcu_read_unlock()
834 * xxx removed from list
835 * rcu_read_lock()
836 * read mru_block
837 * mru_block = NULL;
838 * call_rcu(reclaim_ramblock, xxx);
839 * rcu_read_unlock()
841 * atomic_rcu_set is not needed here. The block was already published
842 * when it was placed into the list. Here we're just making an extra
843 * copy of the pointer.
845 ram_list.mru_block = block;
846 return block;
849 static void tlb_reset_dirty_range_all(ram_addr_t start, ram_addr_t length)
851 ram_addr_t start1;
852 RAMBlock *block;
853 ram_addr_t end;
855 end = TARGET_PAGE_ALIGN(start + length);
856 start &= TARGET_PAGE_MASK;
858 rcu_read_lock();
859 block = qemu_get_ram_block(start);
860 assert(block == qemu_get_ram_block(end - 1));
861 start1 = (uintptr_t)ramblock_ptr(block, start - block->offset);
862 cpu_tlb_reset_dirty_all(start1, length);
863 rcu_read_unlock();
866 /* Note: start and end must be within the same ram block. */
867 bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t start,
868 ram_addr_t length,
869 unsigned client)
871 unsigned long end, page;
872 bool dirty;
874 if (length == 0) {
875 return false;
878 end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS;
879 page = start >> TARGET_PAGE_BITS;
880 dirty = bitmap_test_and_clear_atomic(ram_list.dirty_memory[client],
881 page, end - page);
883 if (dirty && tcg_enabled()) {
884 tlb_reset_dirty_range_all(start, length);
887 return dirty;
890 /* Called from RCU critical section */
891 hwaddr memory_region_section_get_iotlb(CPUState *cpu,
892 MemoryRegionSection *section,
893 target_ulong vaddr,
894 hwaddr paddr, hwaddr xlat,
895 int prot,
896 target_ulong *address)
898 hwaddr iotlb;
899 CPUWatchpoint *wp;
901 if (memory_region_is_ram(section->mr)) {
902 /* Normal RAM. */
903 iotlb = (memory_region_get_ram_addr(section->mr) & TARGET_PAGE_MASK)
904 + xlat;
905 if (!section->readonly) {
906 iotlb |= PHYS_SECTION_NOTDIRTY;
907 } else {
908 iotlb |= PHYS_SECTION_ROM;
910 } else {
911 iotlb = section - section->address_space->dispatch->map.sections;
912 iotlb += xlat;
915 /* Make accesses to pages with watchpoints go via the
916 watchpoint trap routines. */
917 QTAILQ_FOREACH(wp, &cpu->watchpoints, entry) {
918 if (cpu_watchpoint_address_matches(wp, vaddr, TARGET_PAGE_SIZE)) {
919 /* Avoid trapping reads of pages with a write breakpoint. */
920 if ((prot & PAGE_WRITE) || (wp->flags & BP_MEM_READ)) {
921 iotlb = PHYS_SECTION_WATCH + paddr;
922 *address |= TLB_MMIO;
923 break;
928 return iotlb;
930 #endif /* defined(CONFIG_USER_ONLY) */
932 #if !defined(CONFIG_USER_ONLY)
934 static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
935 uint16_t section);
936 static subpage_t *subpage_init(AddressSpace *as, hwaddr base);
938 static void *(*phys_mem_alloc)(size_t size, uint64_t *align) =
939 qemu_anon_ram_alloc;
942 * Set a custom physical guest memory alloator.
943 * Accelerators with unusual needs may need this. Hopefully, we can
944 * get rid of it eventually.
946 void phys_mem_set_alloc(void *(*alloc)(size_t, uint64_t *align))
948 phys_mem_alloc = alloc;
951 static uint16_t phys_section_add(PhysPageMap *map,
952 MemoryRegionSection *section)
954 /* The physical section number is ORed with a page-aligned
955 * pointer to produce the iotlb entries. Thus it should
956 * never overflow into the page-aligned value.
958 assert(map->sections_nb < TARGET_PAGE_SIZE);
960 if (map->sections_nb == map->sections_nb_alloc) {
961 map->sections_nb_alloc = MAX(map->sections_nb_alloc * 2, 16);
962 map->sections = g_renew(MemoryRegionSection, map->sections,
963 map->sections_nb_alloc);
965 map->sections[map->sections_nb] = *section;
966 memory_region_ref(section->mr);
967 return map->sections_nb++;
970 static void phys_section_destroy(MemoryRegion *mr)
972 memory_region_unref(mr);
974 if (mr->subpage) {
975 subpage_t *subpage = container_of(mr, subpage_t, iomem);
976 object_unref(OBJECT(&subpage->iomem));
977 g_free(subpage);
981 static void phys_sections_free(PhysPageMap *map)
983 while (map->sections_nb > 0) {
984 MemoryRegionSection *section = &map->sections[--map->sections_nb];
985 phys_section_destroy(section->mr);
987 g_free(map->sections);
988 g_free(map->nodes);
991 static void register_subpage(AddressSpaceDispatch *d, MemoryRegionSection *section)
993 subpage_t *subpage;
994 hwaddr base = section->offset_within_address_space
995 & TARGET_PAGE_MASK;
996 MemoryRegionSection *existing = phys_page_find(d->phys_map, base,
997 d->map.nodes, d->map.sections);
998 MemoryRegionSection subsection = {
999 .offset_within_address_space = base,
1000 .size = int128_make64(TARGET_PAGE_SIZE),
1002 hwaddr start, end;
1004 assert(existing->mr->subpage || existing->mr == &io_mem_unassigned);
1006 if (!(existing->mr->subpage)) {
1007 subpage = subpage_init(d->as, base);
1008 subsection.address_space = d->as;
1009 subsection.mr = &subpage->iomem;
1010 phys_page_set(d, base >> TARGET_PAGE_BITS, 1,
1011 phys_section_add(&d->map, &subsection));
1012 } else {
1013 subpage = container_of(existing->mr, subpage_t, iomem);
1015 start = section->offset_within_address_space & ~TARGET_PAGE_MASK;
1016 end = start + int128_get64(section->size) - 1;
1017 subpage_register(subpage, start, end,
1018 phys_section_add(&d->map, section));
1022 static void register_multipage(AddressSpaceDispatch *d,
1023 MemoryRegionSection *section)
1025 hwaddr start_addr = section->offset_within_address_space;
1026 uint16_t section_index = phys_section_add(&d->map, section);
1027 uint64_t num_pages = int128_get64(int128_rshift(section->size,
1028 TARGET_PAGE_BITS));
1030 assert(num_pages);
1031 phys_page_set(d, start_addr >> TARGET_PAGE_BITS, num_pages, section_index);
1034 static void mem_add(MemoryListener *listener, MemoryRegionSection *section)
1036 AddressSpace *as = container_of(listener, AddressSpace, dispatch_listener);
1037 AddressSpaceDispatch *d = as->next_dispatch;
1038 MemoryRegionSection now = *section, remain = *section;
1039 Int128 page_size = int128_make64(TARGET_PAGE_SIZE);
1041 if (now.offset_within_address_space & ~TARGET_PAGE_MASK) {
1042 uint64_t left = TARGET_PAGE_ALIGN(now.offset_within_address_space)
1043 - now.offset_within_address_space;
1045 now.size = int128_min(int128_make64(left), now.size);
1046 register_subpage(d, &now);
1047 } else {
1048 now.size = int128_zero();
1050 while (int128_ne(remain.size, now.size)) {
1051 remain.size = int128_sub(remain.size, now.size);
1052 remain.offset_within_address_space += int128_get64(now.size);
1053 remain.offset_within_region += int128_get64(now.size);
1054 now = remain;
1055 if (int128_lt(remain.size, page_size)) {
1056 register_subpage(d, &now);
1057 } else if (remain.offset_within_address_space & ~TARGET_PAGE_MASK) {
1058 now.size = page_size;
1059 register_subpage(d, &now);
1060 } else {
1061 now.size = int128_and(now.size, int128_neg(page_size));
1062 register_multipage(d, &now);
1067 void qemu_flush_coalesced_mmio_buffer(void)
1069 if (kvm_enabled())
1070 kvm_flush_coalesced_mmio_buffer();
1073 void qemu_mutex_lock_ramlist(void)
1075 qemu_mutex_lock(&ram_list.mutex);
1078 void qemu_mutex_unlock_ramlist(void)
1080 qemu_mutex_unlock(&ram_list.mutex);
1083 #ifdef __linux__
1085 #include <sys/vfs.h>
1087 #define HUGETLBFS_MAGIC 0x958458f6
1089 static long gethugepagesize(const char *path, Error **errp)
1091 struct statfs fs;
1092 int ret;
1094 do {
1095 ret = statfs(path, &fs);
1096 } while (ret != 0 && errno == EINTR);
1098 if (ret != 0) {
1099 error_setg_errno(errp, errno, "failed to get page size of file %s",
1100 path);
1101 return 0;
1104 if (fs.f_type != HUGETLBFS_MAGIC)
1105 fprintf(stderr, "Warning: path not on HugeTLBFS: %s\n", path);
1107 return fs.f_bsize;
1110 static void *file_ram_alloc(RAMBlock *block,
1111 ram_addr_t memory,
1112 const char *path,
1113 Error **errp)
1115 char *filename;
1116 char *sanitized_name;
1117 char *c;
1118 void *area = NULL;
1119 int fd;
1120 uint64_t hpagesize;
1121 Error *local_err = NULL;
1123 hpagesize = gethugepagesize(path, &local_err);
1124 if (local_err) {
1125 error_propagate(errp, local_err);
1126 goto error;
1128 block->mr->align = hpagesize;
1130 if (memory < hpagesize) {
1131 error_setg(errp, "memory size 0x" RAM_ADDR_FMT " must be equal to "
1132 "or larger than huge page size 0x%" PRIx64,
1133 memory, hpagesize);
1134 goto error;
1137 if (kvm_enabled() && !kvm_has_sync_mmu()) {
1138 error_setg(errp,
1139 "host lacks kvm mmu notifiers, -mem-path unsupported");
1140 goto error;
1143 /* Make name safe to use with mkstemp by replacing '/' with '_'. */
1144 sanitized_name = g_strdup(memory_region_name(block->mr));
1145 for (c = sanitized_name; *c != '\0'; c++) {
1146 if (*c == '/')
1147 *c = '_';
1150 filename = g_strdup_printf("%s/qemu_back_mem.%s.XXXXXX", path,
1151 sanitized_name);
1152 g_free(sanitized_name);
1154 fd = mkstemp(filename);
1155 if (fd < 0) {
1156 error_setg_errno(errp, errno,
1157 "unable to create backing store for hugepages");
1158 g_free(filename);
1159 goto error;
1161 unlink(filename);
1162 g_free(filename);
1164 memory = (memory+hpagesize-1) & ~(hpagesize-1);
1167 * ftruncate is not supported by hugetlbfs in older
1168 * hosts, so don't bother bailing out on errors.
1169 * If anything goes wrong with it under other filesystems,
1170 * mmap will fail.
1172 if (ftruncate(fd, memory)) {
1173 perror("ftruncate");
1176 area = mmap(0, memory, PROT_READ | PROT_WRITE,
1177 (block->flags & RAM_SHARED ? MAP_SHARED : MAP_PRIVATE),
1178 fd, 0);
1179 if (area == MAP_FAILED) {
1180 error_setg_errno(errp, errno,
1181 "unable to map backing store for hugepages");
1182 close(fd);
1183 goto error;
1186 if (mem_prealloc) {
1187 os_mem_prealloc(fd, area, memory);
1190 block->fd = fd;
1191 return area;
1193 error:
1194 if (mem_prealloc) {
1195 error_report("%s", error_get_pretty(*errp));
1196 exit(1);
1198 return NULL;
1200 #endif
1202 /* Called with the ramlist lock held. */
1203 static ram_addr_t find_ram_offset(ram_addr_t size)
1205 RAMBlock *block, *next_block;
1206 ram_addr_t offset = RAM_ADDR_MAX, mingap = RAM_ADDR_MAX;
1208 assert(size != 0); /* it would hand out same offset multiple times */
1210 if (QLIST_EMPTY_RCU(&ram_list.blocks)) {
1211 return 0;
1214 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1215 ram_addr_t end, next = RAM_ADDR_MAX;
1217 end = block->offset + block->max_length;
1219 QLIST_FOREACH_RCU(next_block, &ram_list.blocks, next) {
1220 if (next_block->offset >= end) {
1221 next = MIN(next, next_block->offset);
1224 if (next - end >= size && next - end < mingap) {
1225 offset = end;
1226 mingap = next - end;
1230 if (offset == RAM_ADDR_MAX) {
1231 fprintf(stderr, "Failed to find gap of requested size: %" PRIu64 "\n",
1232 (uint64_t)size);
1233 abort();
1236 return offset;
1239 ram_addr_t last_ram_offset(void)
1241 RAMBlock *block;
1242 ram_addr_t last = 0;
1244 rcu_read_lock();
1245 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1246 last = MAX(last, block->offset + block->max_length);
1248 rcu_read_unlock();
1249 return last;
1252 static void qemu_ram_setup_dump(void *addr, ram_addr_t size)
1254 int ret;
1256 /* Use MADV_DONTDUMP, if user doesn't want the guest memory in the core */
1257 if (!machine_dump_guest_core(current_machine)) {
1258 ret = qemu_madvise(addr, size, QEMU_MADV_DONTDUMP);
1259 if (ret) {
1260 perror("qemu_madvise");
1261 fprintf(stderr, "madvise doesn't support MADV_DONTDUMP, "
1262 "but dump_guest_core=off specified\n");
1267 /* Called within an RCU critical section, or while the ramlist lock
1268 * is held.
1270 static RAMBlock *find_ram_block(ram_addr_t addr)
1272 RAMBlock *block;
1274 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1275 if (block->offset == addr) {
1276 return block;
1280 return NULL;
1283 /* Called with iothread lock held. */
1284 void qemu_ram_set_idstr(ram_addr_t addr, const char *name, DeviceState *dev)
1286 RAMBlock *new_block, *block;
1288 rcu_read_lock();
1289 new_block = find_ram_block(addr);
1290 assert(new_block);
1291 assert(!new_block->idstr[0]);
1293 if (dev) {
1294 char *id = qdev_get_dev_path(dev);
1295 if (id) {
1296 snprintf(new_block->idstr, sizeof(new_block->idstr), "%s/", id);
1297 g_free(id);
1300 pstrcat(new_block->idstr, sizeof(new_block->idstr), name);
1302 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1303 if (block != new_block && !strcmp(block->idstr, new_block->idstr)) {
1304 fprintf(stderr, "RAMBlock \"%s\" already registered, abort!\n",
1305 new_block->idstr);
1306 abort();
1309 rcu_read_unlock();
1312 /* Called with iothread lock held. */
1313 void qemu_ram_unset_idstr(ram_addr_t addr)
1315 RAMBlock *block;
1317 /* FIXME: arch_init.c assumes that this is not called throughout
1318 * migration. Ignore the problem since hot-unplug during migration
1319 * does not work anyway.
1322 rcu_read_lock();
1323 block = find_ram_block(addr);
1324 if (block) {
1325 memset(block->idstr, 0, sizeof(block->idstr));
1327 rcu_read_unlock();
1330 static int memory_try_enable_merging(void *addr, size_t len)
1332 if (!machine_mem_merge(current_machine)) {
1333 /* disabled by the user */
1334 return 0;
1337 return qemu_madvise(addr, len, QEMU_MADV_MERGEABLE);
1340 /* Only legal before guest might have detected the memory size: e.g. on
1341 * incoming migration, or right after reset.
1343 * As memory core doesn't know how is memory accessed, it is up to
1344 * resize callback to update device state and/or add assertions to detect
1345 * misuse, if necessary.
1347 int qemu_ram_resize(ram_addr_t base, ram_addr_t newsize, Error **errp)
1349 RAMBlock *block = find_ram_block(base);
1351 assert(block);
1353 newsize = TARGET_PAGE_ALIGN(newsize);
1355 if (block->used_length == newsize) {
1356 return 0;
1359 if (!(block->flags & RAM_RESIZEABLE)) {
1360 error_setg_errno(errp, EINVAL,
1361 "Length mismatch: %s: 0x" RAM_ADDR_FMT
1362 " in != 0x" RAM_ADDR_FMT, block->idstr,
1363 newsize, block->used_length);
1364 return -EINVAL;
1367 if (block->max_length < newsize) {
1368 error_setg_errno(errp, EINVAL,
1369 "Length too large: %s: 0x" RAM_ADDR_FMT
1370 " > 0x" RAM_ADDR_FMT, block->idstr,
1371 newsize, block->max_length);
1372 return -EINVAL;
1375 cpu_physical_memory_clear_dirty_range(block->offset, block->used_length);
1376 block->used_length = newsize;
1377 cpu_physical_memory_set_dirty_range(block->offset, block->used_length,
1378 DIRTY_CLIENTS_ALL);
1379 memory_region_set_size(block->mr, newsize);
1380 if (block->resized) {
1381 block->resized(block->idstr, newsize, block->host);
1383 return 0;
1386 static ram_addr_t ram_block_add(RAMBlock *new_block, Error **errp)
1388 RAMBlock *block;
1389 RAMBlock *last_block = NULL;
1390 ram_addr_t old_ram_size, new_ram_size;
1392 old_ram_size = last_ram_offset() >> TARGET_PAGE_BITS;
1394 qemu_mutex_lock_ramlist();
1395 new_block->offset = find_ram_offset(new_block->max_length);
1397 if (!new_block->host) {
1398 if (xen_enabled()) {
1399 xen_ram_alloc(new_block->offset, new_block->max_length,
1400 new_block->mr);
1401 } else {
1402 new_block->host = phys_mem_alloc(new_block->max_length,
1403 &new_block->mr->align);
1404 if (!new_block->host) {
1405 error_setg_errno(errp, errno,
1406 "cannot set up guest memory '%s'",
1407 memory_region_name(new_block->mr));
1408 qemu_mutex_unlock_ramlist();
1409 return -1;
1411 memory_try_enable_merging(new_block->host, new_block->max_length);
1415 new_ram_size = MAX(old_ram_size,
1416 (new_block->offset + new_block->max_length) >> TARGET_PAGE_BITS);
1417 if (new_ram_size > old_ram_size) {
1418 migration_bitmap_extend(old_ram_size, new_ram_size);
1420 /* Keep the list sorted from biggest to smallest block. Unlike QTAILQ,
1421 * QLIST (which has an RCU-friendly variant) does not have insertion at
1422 * tail, so save the last element in last_block.
1424 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1425 last_block = block;
1426 if (block->max_length < new_block->max_length) {
1427 break;
1430 if (block) {
1431 QLIST_INSERT_BEFORE_RCU(block, new_block, next);
1432 } else if (last_block) {
1433 QLIST_INSERT_AFTER_RCU(last_block, new_block, next);
1434 } else { /* list is empty */
1435 QLIST_INSERT_HEAD_RCU(&ram_list.blocks, new_block, next);
1437 ram_list.mru_block = NULL;
1439 /* Write list before version */
1440 smp_wmb();
1441 ram_list.version++;
1442 qemu_mutex_unlock_ramlist();
1444 new_ram_size = last_ram_offset() >> TARGET_PAGE_BITS;
1446 if (new_ram_size > old_ram_size) {
1447 int i;
1449 /* ram_list.dirty_memory[] is protected by the iothread lock. */
1450 for (i = 0; i < DIRTY_MEMORY_NUM; i++) {
1451 ram_list.dirty_memory[i] =
1452 bitmap_zero_extend(ram_list.dirty_memory[i],
1453 old_ram_size, new_ram_size);
1456 cpu_physical_memory_set_dirty_range(new_block->offset,
1457 new_block->used_length,
1458 DIRTY_CLIENTS_ALL);
1460 if (new_block->host) {
1461 qemu_ram_setup_dump(new_block->host, new_block->max_length);
1462 qemu_madvise(new_block->host, new_block->max_length, QEMU_MADV_HUGEPAGE);
1463 qemu_madvise(new_block->host, new_block->max_length, QEMU_MADV_DONTFORK);
1464 if (kvm_enabled()) {
1465 kvm_setup_guest_memory(new_block->host, new_block->max_length);
1469 return new_block->offset;
1472 #ifdef __linux__
1473 ram_addr_t qemu_ram_alloc_from_file(ram_addr_t size, MemoryRegion *mr,
1474 bool share, const char *mem_path,
1475 Error **errp)
1477 RAMBlock *new_block;
1478 ram_addr_t addr;
1479 Error *local_err = NULL;
1481 if (xen_enabled()) {
1482 error_setg(errp, "-mem-path not supported with Xen");
1483 return -1;
1486 if (phys_mem_alloc != qemu_anon_ram_alloc) {
1488 * file_ram_alloc() needs to allocate just like
1489 * phys_mem_alloc, but we haven't bothered to provide
1490 * a hook there.
1492 error_setg(errp,
1493 "-mem-path not supported with this accelerator");
1494 return -1;
1497 size = TARGET_PAGE_ALIGN(size);
1498 new_block = g_malloc0(sizeof(*new_block));
1499 new_block->mr = mr;
1500 new_block->used_length = size;
1501 new_block->max_length = size;
1502 new_block->flags = share ? RAM_SHARED : 0;
1503 new_block->host = file_ram_alloc(new_block, size,
1504 mem_path, errp);
1505 if (!new_block->host) {
1506 g_free(new_block);
1507 return -1;
1510 addr = ram_block_add(new_block, &local_err);
1511 if (local_err) {
1512 g_free(new_block);
1513 error_propagate(errp, local_err);
1514 return -1;
1516 return addr;
1518 #endif
1520 static
1521 ram_addr_t qemu_ram_alloc_internal(ram_addr_t size, ram_addr_t max_size,
1522 void (*resized)(const char*,
1523 uint64_t length,
1524 void *host),
1525 void *host, bool resizeable,
1526 MemoryRegion *mr, Error **errp)
1528 RAMBlock *new_block;
1529 ram_addr_t addr;
1530 Error *local_err = NULL;
1532 size = TARGET_PAGE_ALIGN(size);
1533 max_size = TARGET_PAGE_ALIGN(max_size);
1534 new_block = g_malloc0(sizeof(*new_block));
1535 new_block->mr = mr;
1536 new_block->resized = resized;
1537 new_block->used_length = size;
1538 new_block->max_length = max_size;
1539 assert(max_size >= size);
1540 new_block->fd = -1;
1541 new_block->host = host;
1542 if (host) {
1543 new_block->flags |= RAM_PREALLOC;
1545 if (resizeable) {
1546 new_block->flags |= RAM_RESIZEABLE;
1548 addr = ram_block_add(new_block, &local_err);
1549 if (local_err) {
1550 g_free(new_block);
1551 error_propagate(errp, local_err);
1552 return -1;
1554 return addr;
1557 ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host,
1558 MemoryRegion *mr, Error **errp)
1560 return qemu_ram_alloc_internal(size, size, NULL, host, false, mr, errp);
1563 ram_addr_t qemu_ram_alloc(ram_addr_t size, MemoryRegion *mr, Error **errp)
1565 return qemu_ram_alloc_internal(size, size, NULL, NULL, false, mr, errp);
1568 ram_addr_t qemu_ram_alloc_resizeable(ram_addr_t size, ram_addr_t maxsz,
1569 void (*resized)(const char*,
1570 uint64_t length,
1571 void *host),
1572 MemoryRegion *mr, Error **errp)
1574 return qemu_ram_alloc_internal(size, maxsz, resized, NULL, true, mr, errp);
1577 void qemu_ram_free_from_ptr(ram_addr_t addr)
1579 RAMBlock *block;
1581 qemu_mutex_lock_ramlist();
1582 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1583 if (addr == block->offset) {
1584 QLIST_REMOVE_RCU(block, next);
1585 ram_list.mru_block = NULL;
1586 /* Write list before version */
1587 smp_wmb();
1588 ram_list.version++;
1589 g_free_rcu(block, rcu);
1590 break;
1593 qemu_mutex_unlock_ramlist();
1596 static void reclaim_ramblock(RAMBlock *block)
1598 if (block->flags & RAM_PREALLOC) {
1600 } else if (xen_enabled()) {
1601 xen_invalidate_map_cache_entry(block->host);
1602 #ifndef _WIN32
1603 } else if (block->fd >= 0) {
1604 munmap(block->host, block->max_length);
1605 close(block->fd);
1606 #endif
1607 } else {
1608 qemu_anon_ram_free(block->host, block->max_length);
1610 g_free(block);
1613 void qemu_ram_free(ram_addr_t addr)
1615 RAMBlock *block;
1617 qemu_mutex_lock_ramlist();
1618 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1619 if (addr == block->offset) {
1620 QLIST_REMOVE_RCU(block, next);
1621 ram_list.mru_block = NULL;
1622 /* Write list before version */
1623 smp_wmb();
1624 ram_list.version++;
1625 call_rcu(block, reclaim_ramblock, rcu);
1626 break;
1629 qemu_mutex_unlock_ramlist();
1632 #ifndef _WIN32
1633 void qemu_ram_remap(ram_addr_t addr, ram_addr_t length)
1635 RAMBlock *block;
1636 ram_addr_t offset;
1637 int flags;
1638 void *area, *vaddr;
1640 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1641 offset = addr - block->offset;
1642 if (offset < block->max_length) {
1643 vaddr = ramblock_ptr(block, offset);
1644 if (block->flags & RAM_PREALLOC) {
1646 } else if (xen_enabled()) {
1647 abort();
1648 } else {
1649 flags = MAP_FIXED;
1650 if (block->fd >= 0) {
1651 flags |= (block->flags & RAM_SHARED ?
1652 MAP_SHARED : MAP_PRIVATE);
1653 area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
1654 flags, block->fd, offset);
1655 } else {
1657 * Remap needs to match alloc. Accelerators that
1658 * set phys_mem_alloc never remap. If they did,
1659 * we'd need a remap hook here.
1661 assert(phys_mem_alloc == qemu_anon_ram_alloc);
1663 flags |= MAP_PRIVATE | MAP_ANONYMOUS;
1664 area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
1665 flags, -1, 0);
1667 if (area != vaddr) {
1668 fprintf(stderr, "Could not remap addr: "
1669 RAM_ADDR_FMT "@" RAM_ADDR_FMT "\n",
1670 length, addr);
1671 exit(1);
1673 memory_try_enable_merging(vaddr, length);
1674 qemu_ram_setup_dump(vaddr, length);
1679 #endif /* !_WIN32 */
1681 int qemu_get_ram_fd(ram_addr_t addr)
1683 RAMBlock *block;
1684 int fd;
1686 rcu_read_lock();
1687 block = qemu_get_ram_block(addr);
1688 fd = block->fd;
1689 rcu_read_unlock();
1690 return fd;
1693 void *qemu_get_ram_block_host_ptr(ram_addr_t addr)
1695 RAMBlock *block;
1696 void *ptr;
1698 rcu_read_lock();
1699 block = qemu_get_ram_block(addr);
1700 ptr = ramblock_ptr(block, 0);
1701 rcu_read_unlock();
1702 return ptr;
1705 /* Return a host pointer to ram allocated with qemu_ram_alloc.
1706 * This should not be used for general purpose DMA. Use address_space_map
1707 * or address_space_rw instead. For local memory (e.g. video ram) that the
1708 * device owns, use memory_region_get_ram_ptr.
1710 * By the time this function returns, the returned pointer is not protected
1711 * by RCU anymore. If the caller is not within an RCU critical section and
1712 * does not hold the iothread lock, it must have other means of protecting the
1713 * pointer, such as a reference to the region that includes the incoming
1714 * ram_addr_t.
1716 void *qemu_get_ram_ptr(ram_addr_t addr)
1718 RAMBlock *block;
1719 void *ptr;
1721 rcu_read_lock();
1722 block = qemu_get_ram_block(addr);
1724 if (xen_enabled() && block->host == NULL) {
1725 /* We need to check if the requested address is in the RAM
1726 * because we don't want to map the entire memory in QEMU.
1727 * In that case just map until the end of the page.
1729 if (block->offset == 0) {
1730 ptr = xen_map_cache(addr, 0, 0);
1731 goto unlock;
1734 block->host = xen_map_cache(block->offset, block->max_length, 1);
1736 ptr = ramblock_ptr(block, addr - block->offset);
1738 unlock:
1739 rcu_read_unlock();
1740 return ptr;
1743 /* Return a host pointer to guest's ram. Similar to qemu_get_ram_ptr
1744 * but takes a size argument.
1746 * By the time this function returns, the returned pointer is not protected
1747 * by RCU anymore. If the caller is not within an RCU critical section and
1748 * does not hold the iothread lock, it must have other means of protecting the
1749 * pointer, such as a reference to the region that includes the incoming
1750 * ram_addr_t.
1752 static void *qemu_ram_ptr_length(ram_addr_t addr, hwaddr *size)
1754 void *ptr;
1755 if (*size == 0) {
1756 return NULL;
1758 if (xen_enabled()) {
1759 return xen_map_cache(addr, *size, 1);
1760 } else {
1761 RAMBlock *block;
1762 rcu_read_lock();
1763 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1764 if (addr - block->offset < block->max_length) {
1765 if (addr - block->offset + *size > block->max_length)
1766 *size = block->max_length - addr + block->offset;
1767 ptr = ramblock_ptr(block, addr - block->offset);
1768 rcu_read_unlock();
1769 return ptr;
1773 fprintf(stderr, "Bad ram offset %" PRIx64 "\n", (uint64_t)addr);
1774 abort();
1778 /* Some of the softmmu routines need to translate from a host pointer
1779 * (typically a TLB entry) back to a ram offset.
1781 * By the time this function returns, the returned pointer is not protected
1782 * by RCU anymore. If the caller is not within an RCU critical section and
1783 * does not hold the iothread lock, it must have other means of protecting the
1784 * pointer, such as a reference to the region that includes the incoming
1785 * ram_addr_t.
1787 MemoryRegion *qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr)
1789 RAMBlock *block;
1790 uint8_t *host = ptr;
1791 MemoryRegion *mr;
1793 if (xen_enabled()) {
1794 rcu_read_lock();
1795 *ram_addr = xen_ram_addr_from_mapcache(ptr);
1796 mr = qemu_get_ram_block(*ram_addr)->mr;
1797 rcu_read_unlock();
1798 return mr;
1801 rcu_read_lock();
1802 block = atomic_rcu_read(&ram_list.mru_block);
1803 if (block && block->host && host - block->host < block->max_length) {
1804 goto found;
1807 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1808 /* This case append when the block is not mapped. */
1809 if (block->host == NULL) {
1810 continue;
1812 if (host - block->host < block->max_length) {
1813 goto found;
1817 rcu_read_unlock();
1818 return NULL;
1820 found:
1821 *ram_addr = block->offset + (host - block->host);
1822 mr = block->mr;
1823 rcu_read_unlock();
1824 return mr;
1827 static void notdirty_mem_write(void *opaque, hwaddr ram_addr,
1828 uint64_t val, unsigned size)
1830 if (!cpu_physical_memory_get_dirty_flag(ram_addr, DIRTY_MEMORY_CODE)) {
1831 tb_invalidate_phys_page_fast(ram_addr, size);
1833 switch (size) {
1834 case 1:
1835 stb_p(qemu_get_ram_ptr(ram_addr), val);
1836 break;
1837 case 2:
1838 stw_p(qemu_get_ram_ptr(ram_addr), val);
1839 break;
1840 case 4:
1841 stl_p(qemu_get_ram_ptr(ram_addr), val);
1842 break;
1843 default:
1844 abort();
1846 /* Set both VGA and migration bits for simplicity and to remove
1847 * the notdirty callback faster.
1849 cpu_physical_memory_set_dirty_range(ram_addr, size,
1850 DIRTY_CLIENTS_NOCODE);
1851 /* we remove the notdirty callback only if the code has been
1852 flushed */
1853 if (!cpu_physical_memory_is_clean(ram_addr)) {
1854 CPUArchState *env = current_cpu->env_ptr;
1855 tlb_set_dirty(env, current_cpu->mem_io_vaddr);
1859 static bool notdirty_mem_accepts(void *opaque, hwaddr addr,
1860 unsigned size, bool is_write)
1862 return is_write;
1865 static const MemoryRegionOps notdirty_mem_ops = {
1866 .write = notdirty_mem_write,
1867 .valid.accepts = notdirty_mem_accepts,
1868 .endianness = DEVICE_NATIVE_ENDIAN,
1871 /* Generate a debug exception if a watchpoint has been hit. */
1872 static void check_watchpoint(int offset, int len, MemTxAttrs attrs, int flags)
1874 CPUState *cpu = current_cpu;
1875 CPUArchState *env = cpu->env_ptr;
1876 target_ulong pc, cs_base;
1877 target_ulong vaddr;
1878 CPUWatchpoint *wp;
1879 int cpu_flags;
1881 if (cpu->watchpoint_hit) {
1882 /* We re-entered the check after replacing the TB. Now raise
1883 * the debug interrupt so that is will trigger after the
1884 * current instruction. */
1885 cpu_interrupt(cpu, CPU_INTERRUPT_DEBUG);
1886 return;
1888 vaddr = (cpu->mem_io_vaddr & TARGET_PAGE_MASK) + offset;
1889 QTAILQ_FOREACH(wp, &cpu->watchpoints, entry) {
1890 if (cpu_watchpoint_address_matches(wp, vaddr, len)
1891 && (wp->flags & flags)) {
1892 if (flags == BP_MEM_READ) {
1893 wp->flags |= BP_WATCHPOINT_HIT_READ;
1894 } else {
1895 wp->flags |= BP_WATCHPOINT_HIT_WRITE;
1897 wp->hitaddr = vaddr;
1898 wp->hitattrs = attrs;
1899 if (!cpu->watchpoint_hit) {
1900 cpu->watchpoint_hit = wp;
1901 tb_check_watchpoint(cpu);
1902 if (wp->flags & BP_STOP_BEFORE_ACCESS) {
1903 cpu->exception_index = EXCP_DEBUG;
1904 cpu_loop_exit(cpu);
1905 } else {
1906 cpu_get_tb_cpu_state(env, &pc, &cs_base, &cpu_flags);
1907 tb_gen_code(cpu, pc, cs_base, cpu_flags, 1);
1908 cpu_resume_from_signal(cpu, NULL);
1911 } else {
1912 wp->flags &= ~BP_WATCHPOINT_HIT;
1917 /* Watchpoint access routines. Watchpoints are inserted using TLB tricks,
1918 so these check for a hit then pass through to the normal out-of-line
1919 phys routines. */
1920 static MemTxResult watch_mem_read(void *opaque, hwaddr addr, uint64_t *pdata,
1921 unsigned size, MemTxAttrs attrs)
1923 MemTxResult res;
1924 uint64_t data;
1926 check_watchpoint(addr & ~TARGET_PAGE_MASK, size, attrs, BP_MEM_READ);
1927 switch (size) {
1928 case 1:
1929 data = address_space_ldub(&address_space_memory, addr, attrs, &res);
1930 break;
1931 case 2:
1932 data = address_space_lduw(&address_space_memory, addr, attrs, &res);
1933 break;
1934 case 4:
1935 data = address_space_ldl(&address_space_memory, addr, attrs, &res);
1936 break;
1937 default: abort();
1939 *pdata = data;
1940 return res;
1943 static MemTxResult watch_mem_write(void *opaque, hwaddr addr,
1944 uint64_t val, unsigned size,
1945 MemTxAttrs attrs)
1947 MemTxResult res;
1949 check_watchpoint(addr & ~TARGET_PAGE_MASK, size, attrs, BP_MEM_WRITE);
1950 switch (size) {
1951 case 1:
1952 address_space_stb(&address_space_memory, addr, val, attrs, &res);
1953 break;
1954 case 2:
1955 address_space_stw(&address_space_memory, addr, val, attrs, &res);
1956 break;
1957 case 4:
1958 address_space_stl(&address_space_memory, addr, val, attrs, &res);
1959 break;
1960 default: abort();
1962 return res;
1965 static const MemoryRegionOps watch_mem_ops = {
1966 .read_with_attrs = watch_mem_read,
1967 .write_with_attrs = watch_mem_write,
1968 .endianness = DEVICE_NATIVE_ENDIAN,
1971 static MemTxResult subpage_read(void *opaque, hwaddr addr, uint64_t *data,
1972 unsigned len, MemTxAttrs attrs)
1974 subpage_t *subpage = opaque;
1975 uint8_t buf[8];
1976 MemTxResult res;
1978 #if defined(DEBUG_SUBPAGE)
1979 printf("%s: subpage %p len %u addr " TARGET_FMT_plx "\n", __func__,
1980 subpage, len, addr);
1981 #endif
1982 res = address_space_read(subpage->as, addr + subpage->base,
1983 attrs, buf, len);
1984 if (res) {
1985 return res;
1987 switch (len) {
1988 case 1:
1989 *data = ldub_p(buf);
1990 return MEMTX_OK;
1991 case 2:
1992 *data = lduw_p(buf);
1993 return MEMTX_OK;
1994 case 4:
1995 *data = ldl_p(buf);
1996 return MEMTX_OK;
1997 case 8:
1998 *data = ldq_p(buf);
1999 return MEMTX_OK;
2000 default:
2001 abort();
2005 static MemTxResult subpage_write(void *opaque, hwaddr addr,
2006 uint64_t value, unsigned len, MemTxAttrs attrs)
2008 subpage_t *subpage = opaque;
2009 uint8_t buf[8];
2011 #if defined(DEBUG_SUBPAGE)
2012 printf("%s: subpage %p len %u addr " TARGET_FMT_plx
2013 " value %"PRIx64"\n",
2014 __func__, subpage, len, addr, value);
2015 #endif
2016 switch (len) {
2017 case 1:
2018 stb_p(buf, value);
2019 break;
2020 case 2:
2021 stw_p(buf, value);
2022 break;
2023 case 4:
2024 stl_p(buf, value);
2025 break;
2026 case 8:
2027 stq_p(buf, value);
2028 break;
2029 default:
2030 abort();
2032 return address_space_write(subpage->as, addr + subpage->base,
2033 attrs, buf, len);
2036 static bool subpage_accepts(void *opaque, hwaddr addr,
2037 unsigned len, bool is_write)
2039 subpage_t *subpage = opaque;
2040 #if defined(DEBUG_SUBPAGE)
2041 printf("%s: subpage %p %c len %u addr " TARGET_FMT_plx "\n",
2042 __func__, subpage, is_write ? 'w' : 'r', len, addr);
2043 #endif
2045 return address_space_access_valid(subpage->as, addr + subpage->base,
2046 len, is_write);
2049 static const MemoryRegionOps subpage_ops = {
2050 .read_with_attrs = subpage_read,
2051 .write_with_attrs = subpage_write,
2052 .impl.min_access_size = 1,
2053 .impl.max_access_size = 8,
2054 .valid.min_access_size = 1,
2055 .valid.max_access_size = 8,
2056 .valid.accepts = subpage_accepts,
2057 .endianness = DEVICE_NATIVE_ENDIAN,
2060 static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
2061 uint16_t section)
2063 int idx, eidx;
2065 if (start >= TARGET_PAGE_SIZE || end >= TARGET_PAGE_SIZE)
2066 return -1;
2067 idx = SUBPAGE_IDX(start);
2068 eidx = SUBPAGE_IDX(end);
2069 #if defined(DEBUG_SUBPAGE)
2070 printf("%s: %p start %08x end %08x idx %08x eidx %08x section %d\n",
2071 __func__, mmio, start, end, idx, eidx, section);
2072 #endif
2073 for (; idx <= eidx; idx++) {
2074 mmio->sub_section[idx] = section;
2077 return 0;
2080 static subpage_t *subpage_init(AddressSpace *as, hwaddr base)
2082 subpage_t *mmio;
2084 mmio = g_malloc0(sizeof(subpage_t));
2086 mmio->as = as;
2087 mmio->base = base;
2088 memory_region_init_io(&mmio->iomem, NULL, &subpage_ops, mmio,
2089 NULL, TARGET_PAGE_SIZE);
2090 mmio->iomem.subpage = true;
2091 #if defined(DEBUG_SUBPAGE)
2092 printf("%s: %p base " TARGET_FMT_plx " len %08x\n", __func__,
2093 mmio, base, TARGET_PAGE_SIZE);
2094 #endif
2095 subpage_register(mmio, 0, TARGET_PAGE_SIZE-1, PHYS_SECTION_UNASSIGNED);
2097 return mmio;
2100 static uint16_t dummy_section(PhysPageMap *map, AddressSpace *as,
2101 MemoryRegion *mr)
2103 assert(as);
2104 MemoryRegionSection section = {
2105 .address_space = as,
2106 .mr = mr,
2107 .offset_within_address_space = 0,
2108 .offset_within_region = 0,
2109 .size = int128_2_64(),
2112 return phys_section_add(map, &section);
2115 MemoryRegion *iotlb_to_region(CPUState *cpu, hwaddr index)
2117 AddressSpaceDispatch *d = atomic_rcu_read(&cpu->memory_dispatch);
2118 MemoryRegionSection *sections = d->map.sections;
2120 return sections[index & ~TARGET_PAGE_MASK].mr;
2123 static void io_mem_init(void)
2125 memory_region_init_io(&io_mem_rom, NULL, &unassigned_mem_ops, NULL, NULL, UINT64_MAX);
2126 memory_region_init_io(&io_mem_unassigned, NULL, &unassigned_mem_ops, NULL,
2127 NULL, UINT64_MAX);
2128 memory_region_init_io(&io_mem_notdirty, NULL, &notdirty_mem_ops, NULL,
2129 NULL, UINT64_MAX);
2130 memory_region_init_io(&io_mem_watch, NULL, &watch_mem_ops, NULL,
2131 NULL, UINT64_MAX);
2134 static void mem_begin(MemoryListener *listener)
2136 AddressSpace *as = container_of(listener, AddressSpace, dispatch_listener);
2137 AddressSpaceDispatch *d = g_new0(AddressSpaceDispatch, 1);
2138 uint16_t n;
2140 n = dummy_section(&d->map, as, &io_mem_unassigned);
2141 assert(n == PHYS_SECTION_UNASSIGNED);
2142 n = dummy_section(&d->map, as, &io_mem_notdirty);
2143 assert(n == PHYS_SECTION_NOTDIRTY);
2144 n = dummy_section(&d->map, as, &io_mem_rom);
2145 assert(n == PHYS_SECTION_ROM);
2146 n = dummy_section(&d->map, as, &io_mem_watch);
2147 assert(n == PHYS_SECTION_WATCH);
2149 d->phys_map = (PhysPageEntry) { .ptr = PHYS_MAP_NODE_NIL, .skip = 1 };
2150 d->as = as;
2151 as->next_dispatch = d;
2154 static void address_space_dispatch_free(AddressSpaceDispatch *d)
2156 phys_sections_free(&d->map);
2157 g_free(d);
2160 static void mem_commit(MemoryListener *listener)
2162 AddressSpace *as = container_of(listener, AddressSpace, dispatch_listener);
2163 AddressSpaceDispatch *cur = as->dispatch;
2164 AddressSpaceDispatch *next = as->next_dispatch;
2166 phys_page_compact_all(next, next->map.nodes_nb);
2168 atomic_rcu_set(&as->dispatch, next);
2169 if (cur) {
2170 call_rcu(cur, address_space_dispatch_free, rcu);
2174 static void tcg_commit(MemoryListener *listener)
2176 CPUState *cpu;
2178 /* since each CPU stores ram addresses in its TLB cache, we must
2179 reset the modified entries */
2180 /* XXX: slow ! */
2181 CPU_FOREACH(cpu) {
2182 /* FIXME: Disentangle the cpu.h circular files deps so we can
2183 directly get the right CPU from listener. */
2184 if (cpu->tcg_as_listener != listener) {
2185 continue;
2187 cpu_reload_memory_map(cpu);
2191 void address_space_init_dispatch(AddressSpace *as)
2193 as->dispatch = NULL;
2194 as->dispatch_listener = (MemoryListener) {
2195 .begin = mem_begin,
2196 .commit = mem_commit,
2197 .region_add = mem_add,
2198 .region_nop = mem_add,
2199 .priority = 0,
2201 memory_listener_register(&as->dispatch_listener, as);
2204 void address_space_unregister(AddressSpace *as)
2206 memory_listener_unregister(&as->dispatch_listener);
2209 void address_space_destroy_dispatch(AddressSpace *as)
2211 AddressSpaceDispatch *d = as->dispatch;
2213 atomic_rcu_set(&as->dispatch, NULL);
2214 if (d) {
2215 call_rcu(d, address_space_dispatch_free, rcu);
2219 static void memory_map_init(void)
2221 system_memory = g_malloc(sizeof(*system_memory));
2223 memory_region_init(system_memory, NULL, "system", UINT64_MAX);
2224 address_space_init(&address_space_memory, system_memory, "memory");
2226 system_io = g_malloc(sizeof(*system_io));
2227 memory_region_init_io(system_io, NULL, &unassigned_io_ops, NULL, "io",
2228 65536);
2229 address_space_init(&address_space_io, system_io, "I/O");
2232 MemoryRegion *get_system_memory(void)
2234 return system_memory;
2237 MemoryRegion *get_system_io(void)
2239 return system_io;
2242 #endif /* !defined(CONFIG_USER_ONLY) */
2244 /* physical memory access (slow version, mainly for debug) */
2245 #if defined(CONFIG_USER_ONLY)
2246 int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
2247 uint8_t *buf, int len, int is_write)
2249 int l, flags;
2250 target_ulong page;
2251 void * p;
2253 while (len > 0) {
2254 page = addr & TARGET_PAGE_MASK;
2255 l = (page + TARGET_PAGE_SIZE) - addr;
2256 if (l > len)
2257 l = len;
2258 flags = page_get_flags(page);
2259 if (!(flags & PAGE_VALID))
2260 return -1;
2261 if (is_write) {
2262 if (!(flags & PAGE_WRITE))
2263 return -1;
2264 /* XXX: this code should not depend on lock_user */
2265 if (!(p = lock_user(VERIFY_WRITE, addr, l, 0)))
2266 return -1;
2267 memcpy(p, buf, l);
2268 unlock_user(p, addr, l);
2269 } else {
2270 if (!(flags & PAGE_READ))
2271 return -1;
2272 /* XXX: this code should not depend on lock_user */
2273 if (!(p = lock_user(VERIFY_READ, addr, l, 1)))
2274 return -1;
2275 memcpy(buf, p, l);
2276 unlock_user(p, addr, 0);
2278 len -= l;
2279 buf += l;
2280 addr += l;
2282 return 0;
2285 #else
2287 static void invalidate_and_set_dirty(MemoryRegion *mr, hwaddr addr,
2288 hwaddr length)
2290 uint8_t dirty_log_mask = memory_region_get_dirty_log_mask(mr);
2291 /* No early return if dirty_log_mask is or becomes 0, because
2292 * cpu_physical_memory_set_dirty_range will still call
2293 * xen_modified_memory.
2295 if (dirty_log_mask) {
2296 dirty_log_mask =
2297 cpu_physical_memory_range_includes_clean(addr, length, dirty_log_mask);
2299 if (dirty_log_mask & (1 << DIRTY_MEMORY_CODE)) {
2300 tb_invalidate_phys_range(addr, addr + length);
2301 dirty_log_mask &= ~(1 << DIRTY_MEMORY_CODE);
2303 cpu_physical_memory_set_dirty_range(addr, length, dirty_log_mask);
2306 static int memory_access_size(MemoryRegion *mr, unsigned l, hwaddr addr)
2308 unsigned access_size_max = mr->ops->valid.max_access_size;
2310 /* Regions are assumed to support 1-4 byte accesses unless
2311 otherwise specified. */
2312 if (access_size_max == 0) {
2313 access_size_max = 4;
2316 /* Bound the maximum access by the alignment of the address. */
2317 if (!mr->ops->impl.unaligned) {
2318 unsigned align_size_max = addr & -addr;
2319 if (align_size_max != 0 && align_size_max < access_size_max) {
2320 access_size_max = align_size_max;
2324 /* Don't attempt accesses larger than the maximum. */
2325 if (l > access_size_max) {
2326 l = access_size_max;
2328 if (l & (l - 1)) {
2329 l = 1 << (qemu_fls(l) - 1);
2332 return l;
2335 static bool prepare_mmio_access(MemoryRegion *mr)
2337 bool unlocked = !qemu_mutex_iothread_locked();
2338 bool release_lock = false;
2340 if (unlocked && mr->global_locking) {
2341 qemu_mutex_lock_iothread();
2342 unlocked = false;
2343 release_lock = true;
2345 if (mr->flush_coalesced_mmio) {
2346 if (unlocked) {
2347 qemu_mutex_lock_iothread();
2349 qemu_flush_coalesced_mmio_buffer();
2350 if (unlocked) {
2351 qemu_mutex_unlock_iothread();
2355 return release_lock;
2358 MemTxResult address_space_rw(AddressSpace *as, hwaddr addr, MemTxAttrs attrs,
2359 uint8_t *buf, int len, bool is_write)
2361 hwaddr l;
2362 uint8_t *ptr;
2363 uint64_t val;
2364 hwaddr addr1;
2365 MemoryRegion *mr;
2366 MemTxResult result = MEMTX_OK;
2367 bool release_lock = false;
2369 rcu_read_lock();
2370 while (len > 0) {
2371 l = len;
2372 mr = address_space_translate(as, addr, &addr1, &l, is_write);
2374 if (is_write) {
2375 if (!memory_access_is_direct(mr, is_write)) {
2376 release_lock |= prepare_mmio_access(mr);
2377 l = memory_access_size(mr, l, addr1);
2378 /* XXX: could force current_cpu to NULL to avoid
2379 potential bugs */
2380 switch (l) {
2381 case 8:
2382 /* 64 bit write access */
2383 val = ldq_p(buf);
2384 result |= memory_region_dispatch_write(mr, addr1, val, 8,
2385 attrs);
2386 break;
2387 case 4:
2388 /* 32 bit write access */
2389 val = ldl_p(buf);
2390 result |= memory_region_dispatch_write(mr, addr1, val, 4,
2391 attrs);
2392 break;
2393 case 2:
2394 /* 16 bit write access */
2395 val = lduw_p(buf);
2396 result |= memory_region_dispatch_write(mr, addr1, val, 2,
2397 attrs);
2398 break;
2399 case 1:
2400 /* 8 bit write access */
2401 val = ldub_p(buf);
2402 result |= memory_region_dispatch_write(mr, addr1, val, 1,
2403 attrs);
2404 break;
2405 default:
2406 abort();
2408 } else {
2409 addr1 += memory_region_get_ram_addr(mr);
2410 /* RAM case */
2411 ptr = qemu_get_ram_ptr(addr1);
2412 memcpy(ptr, buf, l);
2413 invalidate_and_set_dirty(mr, addr1, l);
2415 } else {
2416 if (!memory_access_is_direct(mr, is_write)) {
2417 /* I/O case */
2418 release_lock |= prepare_mmio_access(mr);
2419 l = memory_access_size(mr, l, addr1);
2420 switch (l) {
2421 case 8:
2422 /* 64 bit read access */
2423 result |= memory_region_dispatch_read(mr, addr1, &val, 8,
2424 attrs);
2425 stq_p(buf, val);
2426 break;
2427 case 4:
2428 /* 32 bit read access */
2429 result |= memory_region_dispatch_read(mr, addr1, &val, 4,
2430 attrs);
2431 stl_p(buf, val);
2432 break;
2433 case 2:
2434 /* 16 bit read access */
2435 result |= memory_region_dispatch_read(mr, addr1, &val, 2,
2436 attrs);
2437 stw_p(buf, val);
2438 break;
2439 case 1:
2440 /* 8 bit read access */
2441 result |= memory_region_dispatch_read(mr, addr1, &val, 1,
2442 attrs);
2443 stb_p(buf, val);
2444 break;
2445 default:
2446 abort();
2448 } else {
2449 /* RAM case */
2450 ptr = qemu_get_ram_ptr(mr->ram_addr + addr1);
2451 memcpy(buf, ptr, l);
2455 if (release_lock) {
2456 qemu_mutex_unlock_iothread();
2457 release_lock = false;
2460 len -= l;
2461 buf += l;
2462 addr += l;
2464 rcu_read_unlock();
2466 return result;
2469 MemTxResult address_space_write(AddressSpace *as, hwaddr addr, MemTxAttrs attrs,
2470 const uint8_t *buf, int len)
2472 return address_space_rw(as, addr, attrs, (uint8_t *)buf, len, true);
2475 MemTxResult address_space_read(AddressSpace *as, hwaddr addr, MemTxAttrs attrs,
2476 uint8_t *buf, int len)
2478 return address_space_rw(as, addr, attrs, buf, len, false);
2482 void cpu_physical_memory_rw(hwaddr addr, uint8_t *buf,
2483 int len, int is_write)
2485 address_space_rw(&address_space_memory, addr, MEMTXATTRS_UNSPECIFIED,
2486 buf, len, is_write);
2489 enum write_rom_type {
2490 WRITE_DATA,
2491 FLUSH_CACHE,
2494 static inline void cpu_physical_memory_write_rom_internal(AddressSpace *as,
2495 hwaddr addr, const uint8_t *buf, int len, enum write_rom_type type)
2497 hwaddr l;
2498 uint8_t *ptr;
2499 hwaddr addr1;
2500 MemoryRegion *mr;
2502 rcu_read_lock();
2503 while (len > 0) {
2504 l = len;
2505 mr = address_space_translate(as, addr, &addr1, &l, true);
2507 if (!(memory_region_is_ram(mr) ||
2508 memory_region_is_romd(mr))) {
2509 l = memory_access_size(mr, l, addr1);
2510 } else {
2511 addr1 += memory_region_get_ram_addr(mr);
2512 /* ROM/RAM case */
2513 ptr = qemu_get_ram_ptr(addr1);
2514 switch (type) {
2515 case WRITE_DATA:
2516 memcpy(ptr, buf, l);
2517 invalidate_and_set_dirty(mr, addr1, l);
2518 break;
2519 case FLUSH_CACHE:
2520 flush_icache_range((uintptr_t)ptr, (uintptr_t)ptr + l);
2521 break;
2524 len -= l;
2525 buf += l;
2526 addr += l;
2528 rcu_read_unlock();
2531 /* used for ROM loading : can write in RAM and ROM */
2532 void cpu_physical_memory_write_rom(AddressSpace *as, hwaddr addr,
2533 const uint8_t *buf, int len)
2535 cpu_physical_memory_write_rom_internal(as, addr, buf, len, WRITE_DATA);
2538 void cpu_flush_icache_range(hwaddr start, int len)
2541 * This function should do the same thing as an icache flush that was
2542 * triggered from within the guest. For TCG we are always cache coherent,
2543 * so there is no need to flush anything. For KVM / Xen we need to flush
2544 * the host's instruction cache at least.
2546 if (tcg_enabled()) {
2547 return;
2550 cpu_physical_memory_write_rom_internal(&address_space_memory,
2551 start, NULL, len, FLUSH_CACHE);
2554 typedef struct {
2555 MemoryRegion *mr;
2556 void *buffer;
2557 hwaddr addr;
2558 hwaddr len;
2559 bool in_use;
2560 } BounceBuffer;
2562 static BounceBuffer bounce;
2564 typedef struct MapClient {
2565 QEMUBH *bh;
2566 QLIST_ENTRY(MapClient) link;
2567 } MapClient;
2569 QemuMutex map_client_list_lock;
2570 static QLIST_HEAD(map_client_list, MapClient) map_client_list
2571 = QLIST_HEAD_INITIALIZER(map_client_list);
2573 static void cpu_unregister_map_client_do(MapClient *client)
2575 QLIST_REMOVE(client, link);
2576 g_free(client);
2579 static void cpu_notify_map_clients_locked(void)
2581 MapClient *client;
2583 while (!QLIST_EMPTY(&map_client_list)) {
2584 client = QLIST_FIRST(&map_client_list);
2585 qemu_bh_schedule(client->bh);
2586 cpu_unregister_map_client_do(client);
2590 void cpu_register_map_client(QEMUBH *bh)
2592 MapClient *client = g_malloc(sizeof(*client));
2594 qemu_mutex_lock(&map_client_list_lock);
2595 client->bh = bh;
2596 QLIST_INSERT_HEAD(&map_client_list, client, link);
2597 if (!atomic_read(&bounce.in_use)) {
2598 cpu_notify_map_clients_locked();
2600 qemu_mutex_unlock(&map_client_list_lock);
2603 void cpu_exec_init_all(void)
2605 qemu_mutex_init(&ram_list.mutex);
2606 memory_map_init();
2607 io_mem_init();
2608 qemu_mutex_init(&map_client_list_lock);
2611 void cpu_unregister_map_client(QEMUBH *bh)
2613 MapClient *client;
2615 qemu_mutex_lock(&map_client_list_lock);
2616 QLIST_FOREACH(client, &map_client_list, link) {
2617 if (client->bh == bh) {
2618 cpu_unregister_map_client_do(client);
2619 break;
2622 qemu_mutex_unlock(&map_client_list_lock);
2625 static void cpu_notify_map_clients(void)
2627 qemu_mutex_lock(&map_client_list_lock);
2628 cpu_notify_map_clients_locked();
2629 qemu_mutex_unlock(&map_client_list_lock);
2632 bool address_space_access_valid(AddressSpace *as, hwaddr addr, int len, bool is_write)
2634 MemoryRegion *mr;
2635 hwaddr l, xlat;
2637 rcu_read_lock();
2638 while (len > 0) {
2639 l = len;
2640 mr = address_space_translate(as, addr, &xlat, &l, is_write);
2641 if (!memory_access_is_direct(mr, is_write)) {
2642 l = memory_access_size(mr, l, addr);
2643 if (!memory_region_access_valid(mr, xlat, l, is_write)) {
2644 return false;
2648 len -= l;
2649 addr += l;
2651 rcu_read_unlock();
2652 return true;
2655 /* Map a physical memory region into a host virtual address.
2656 * May map a subset of the requested range, given by and returned in *plen.
2657 * May return NULL if resources needed to perform the mapping are exhausted.
2658 * Use only for reads OR writes - not for read-modify-write operations.
2659 * Use cpu_register_map_client() to know when retrying the map operation is
2660 * likely to succeed.
2662 void *address_space_map(AddressSpace *as,
2663 hwaddr addr,
2664 hwaddr *plen,
2665 bool is_write)
2667 hwaddr len = *plen;
2668 hwaddr done = 0;
2669 hwaddr l, xlat, base;
2670 MemoryRegion *mr, *this_mr;
2671 ram_addr_t raddr;
2673 if (len == 0) {
2674 return NULL;
2677 l = len;
2678 rcu_read_lock();
2679 mr = address_space_translate(as, addr, &xlat, &l, is_write);
2681 if (!memory_access_is_direct(mr, is_write)) {
2682 if (atomic_xchg(&bounce.in_use, true)) {
2683 rcu_read_unlock();
2684 return NULL;
2686 /* Avoid unbounded allocations */
2687 l = MIN(l, TARGET_PAGE_SIZE);
2688 bounce.buffer = qemu_memalign(TARGET_PAGE_SIZE, l);
2689 bounce.addr = addr;
2690 bounce.len = l;
2692 memory_region_ref(mr);
2693 bounce.mr = mr;
2694 if (!is_write) {
2695 address_space_read(as, addr, MEMTXATTRS_UNSPECIFIED,
2696 bounce.buffer, l);
2699 rcu_read_unlock();
2700 *plen = l;
2701 return bounce.buffer;
2704 base = xlat;
2705 raddr = memory_region_get_ram_addr(mr);
2707 for (;;) {
2708 len -= l;
2709 addr += l;
2710 done += l;
2711 if (len == 0) {
2712 break;
2715 l = len;
2716 this_mr = address_space_translate(as, addr, &xlat, &l, is_write);
2717 if (this_mr != mr || xlat != base + done) {
2718 break;
2722 memory_region_ref(mr);
2723 rcu_read_unlock();
2724 *plen = done;
2725 return qemu_ram_ptr_length(raddr + base, plen);
2728 /* Unmaps a memory region previously mapped by address_space_map().
2729 * Will also mark the memory as dirty if is_write == 1. access_len gives
2730 * the amount of memory that was actually read or written by the caller.
2732 void address_space_unmap(AddressSpace *as, void *buffer, hwaddr len,
2733 int is_write, hwaddr access_len)
2735 if (buffer != bounce.buffer) {
2736 MemoryRegion *mr;
2737 ram_addr_t addr1;
2739 mr = qemu_ram_addr_from_host(buffer, &addr1);
2740 assert(mr != NULL);
2741 if (is_write) {
2742 invalidate_and_set_dirty(mr, addr1, access_len);
2744 if (xen_enabled()) {
2745 xen_invalidate_map_cache_entry(buffer);
2747 memory_region_unref(mr);
2748 return;
2750 if (is_write) {
2751 address_space_write(as, bounce.addr, MEMTXATTRS_UNSPECIFIED,
2752 bounce.buffer, access_len);
2754 qemu_vfree(bounce.buffer);
2755 bounce.buffer = NULL;
2756 memory_region_unref(bounce.mr);
2757 atomic_mb_set(&bounce.in_use, false);
2758 cpu_notify_map_clients();
2761 void *cpu_physical_memory_map(hwaddr addr,
2762 hwaddr *plen,
2763 int is_write)
2765 return address_space_map(&address_space_memory, addr, plen, is_write);
2768 void cpu_physical_memory_unmap(void *buffer, hwaddr len,
2769 int is_write, hwaddr access_len)
2771 return address_space_unmap(&address_space_memory, buffer, len, is_write, access_len);
2774 /* warning: addr must be aligned */
2775 static inline uint32_t address_space_ldl_internal(AddressSpace *as, hwaddr addr,
2776 MemTxAttrs attrs,
2777 MemTxResult *result,
2778 enum device_endian endian)
2780 uint8_t *ptr;
2781 uint64_t val;
2782 MemoryRegion *mr;
2783 hwaddr l = 4;
2784 hwaddr addr1;
2785 MemTxResult r;
2786 bool release_lock = false;
2788 rcu_read_lock();
2789 mr = address_space_translate(as, addr, &addr1, &l, false);
2790 if (l < 4 || !memory_access_is_direct(mr, false)) {
2791 release_lock |= prepare_mmio_access(mr);
2793 /* I/O case */
2794 r = memory_region_dispatch_read(mr, addr1, &val, 4, attrs);
2795 #if defined(TARGET_WORDS_BIGENDIAN)
2796 if (endian == DEVICE_LITTLE_ENDIAN) {
2797 val = bswap32(val);
2799 #else
2800 if (endian == DEVICE_BIG_ENDIAN) {
2801 val = bswap32(val);
2803 #endif
2804 } else {
2805 /* RAM case */
2806 ptr = qemu_get_ram_ptr((memory_region_get_ram_addr(mr)
2807 & TARGET_PAGE_MASK)
2808 + addr1);
2809 switch (endian) {
2810 case DEVICE_LITTLE_ENDIAN:
2811 val = ldl_le_p(ptr);
2812 break;
2813 case DEVICE_BIG_ENDIAN:
2814 val = ldl_be_p(ptr);
2815 break;
2816 default:
2817 val = ldl_p(ptr);
2818 break;
2820 r = MEMTX_OK;
2822 if (result) {
2823 *result = r;
2825 if (release_lock) {
2826 qemu_mutex_unlock_iothread();
2828 rcu_read_unlock();
2829 return val;
2832 uint32_t address_space_ldl(AddressSpace *as, hwaddr addr,
2833 MemTxAttrs attrs, MemTxResult *result)
2835 return address_space_ldl_internal(as, addr, attrs, result,
2836 DEVICE_NATIVE_ENDIAN);
2839 uint32_t address_space_ldl_le(AddressSpace *as, hwaddr addr,
2840 MemTxAttrs attrs, MemTxResult *result)
2842 return address_space_ldl_internal(as, addr, attrs, result,
2843 DEVICE_LITTLE_ENDIAN);
2846 uint32_t address_space_ldl_be(AddressSpace *as, hwaddr addr,
2847 MemTxAttrs attrs, MemTxResult *result)
2849 return address_space_ldl_internal(as, addr, attrs, result,
2850 DEVICE_BIG_ENDIAN);
2853 uint32_t ldl_phys(AddressSpace *as, hwaddr addr)
2855 return address_space_ldl(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
2858 uint32_t ldl_le_phys(AddressSpace *as, hwaddr addr)
2860 return address_space_ldl_le(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
2863 uint32_t ldl_be_phys(AddressSpace *as, hwaddr addr)
2865 return address_space_ldl_be(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
2868 /* warning: addr must be aligned */
2869 static inline uint64_t address_space_ldq_internal(AddressSpace *as, hwaddr addr,
2870 MemTxAttrs attrs,
2871 MemTxResult *result,
2872 enum device_endian endian)
2874 uint8_t *ptr;
2875 uint64_t val;
2876 MemoryRegion *mr;
2877 hwaddr l = 8;
2878 hwaddr addr1;
2879 MemTxResult r;
2880 bool release_lock = false;
2882 rcu_read_lock();
2883 mr = address_space_translate(as, addr, &addr1, &l,
2884 false);
2885 if (l < 8 || !memory_access_is_direct(mr, false)) {
2886 release_lock |= prepare_mmio_access(mr);
2888 /* I/O case */
2889 r = memory_region_dispatch_read(mr, addr1, &val, 8, attrs);
2890 #if defined(TARGET_WORDS_BIGENDIAN)
2891 if (endian == DEVICE_LITTLE_ENDIAN) {
2892 val = bswap64(val);
2894 #else
2895 if (endian == DEVICE_BIG_ENDIAN) {
2896 val = bswap64(val);
2898 #endif
2899 } else {
2900 /* RAM case */
2901 ptr = qemu_get_ram_ptr((memory_region_get_ram_addr(mr)
2902 & TARGET_PAGE_MASK)
2903 + addr1);
2904 switch (endian) {
2905 case DEVICE_LITTLE_ENDIAN:
2906 val = ldq_le_p(ptr);
2907 break;
2908 case DEVICE_BIG_ENDIAN:
2909 val = ldq_be_p(ptr);
2910 break;
2911 default:
2912 val = ldq_p(ptr);
2913 break;
2915 r = MEMTX_OK;
2917 if (result) {
2918 *result = r;
2920 if (release_lock) {
2921 qemu_mutex_unlock_iothread();
2923 rcu_read_unlock();
2924 return val;
2927 uint64_t address_space_ldq(AddressSpace *as, hwaddr addr,
2928 MemTxAttrs attrs, MemTxResult *result)
2930 return address_space_ldq_internal(as, addr, attrs, result,
2931 DEVICE_NATIVE_ENDIAN);
2934 uint64_t address_space_ldq_le(AddressSpace *as, hwaddr addr,
2935 MemTxAttrs attrs, MemTxResult *result)
2937 return address_space_ldq_internal(as, addr, attrs, result,
2938 DEVICE_LITTLE_ENDIAN);
2941 uint64_t address_space_ldq_be(AddressSpace *as, hwaddr addr,
2942 MemTxAttrs attrs, MemTxResult *result)
2944 return address_space_ldq_internal(as, addr, attrs, result,
2945 DEVICE_BIG_ENDIAN);
2948 uint64_t ldq_phys(AddressSpace *as, hwaddr addr)
2950 return address_space_ldq(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
2953 uint64_t ldq_le_phys(AddressSpace *as, hwaddr addr)
2955 return address_space_ldq_le(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
2958 uint64_t ldq_be_phys(AddressSpace *as, hwaddr addr)
2960 return address_space_ldq_be(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
2963 /* XXX: optimize */
2964 uint32_t address_space_ldub(AddressSpace *as, hwaddr addr,
2965 MemTxAttrs attrs, MemTxResult *result)
2967 uint8_t val;
2968 MemTxResult r;
2970 r = address_space_rw(as, addr, attrs, &val, 1, 0);
2971 if (result) {
2972 *result = r;
2974 return val;
2977 uint32_t ldub_phys(AddressSpace *as, hwaddr addr)
2979 return address_space_ldub(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
2982 /* warning: addr must be aligned */
2983 static inline uint32_t address_space_lduw_internal(AddressSpace *as,
2984 hwaddr addr,
2985 MemTxAttrs attrs,
2986 MemTxResult *result,
2987 enum device_endian endian)
2989 uint8_t *ptr;
2990 uint64_t val;
2991 MemoryRegion *mr;
2992 hwaddr l = 2;
2993 hwaddr addr1;
2994 MemTxResult r;
2995 bool release_lock = false;
2997 rcu_read_lock();
2998 mr = address_space_translate(as, addr, &addr1, &l,
2999 false);
3000 if (l < 2 || !memory_access_is_direct(mr, false)) {
3001 release_lock |= prepare_mmio_access(mr);
3003 /* I/O case */
3004 r = memory_region_dispatch_read(mr, addr1, &val, 2, attrs);
3005 #if defined(TARGET_WORDS_BIGENDIAN)
3006 if (endian == DEVICE_LITTLE_ENDIAN) {
3007 val = bswap16(val);
3009 #else
3010 if (endian == DEVICE_BIG_ENDIAN) {
3011 val = bswap16(val);
3013 #endif
3014 } else {
3015 /* RAM case */
3016 ptr = qemu_get_ram_ptr((memory_region_get_ram_addr(mr)
3017 & TARGET_PAGE_MASK)
3018 + addr1);
3019 switch (endian) {
3020 case DEVICE_LITTLE_ENDIAN:
3021 val = lduw_le_p(ptr);
3022 break;
3023 case DEVICE_BIG_ENDIAN:
3024 val = lduw_be_p(ptr);
3025 break;
3026 default:
3027 val = lduw_p(ptr);
3028 break;
3030 r = MEMTX_OK;
3032 if (result) {
3033 *result = r;
3035 if (release_lock) {
3036 qemu_mutex_unlock_iothread();
3038 rcu_read_unlock();
3039 return val;
3042 uint32_t address_space_lduw(AddressSpace *as, hwaddr addr,
3043 MemTxAttrs attrs, MemTxResult *result)
3045 return address_space_lduw_internal(as, addr, attrs, result,
3046 DEVICE_NATIVE_ENDIAN);
3049 uint32_t address_space_lduw_le(AddressSpace *as, hwaddr addr,
3050 MemTxAttrs attrs, MemTxResult *result)
3052 return address_space_lduw_internal(as, addr, attrs, result,
3053 DEVICE_LITTLE_ENDIAN);
3056 uint32_t address_space_lduw_be(AddressSpace *as, hwaddr addr,
3057 MemTxAttrs attrs, MemTxResult *result)
3059 return address_space_lduw_internal(as, addr, attrs, result,
3060 DEVICE_BIG_ENDIAN);
3063 uint32_t lduw_phys(AddressSpace *as, hwaddr addr)
3065 return address_space_lduw(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3068 uint32_t lduw_le_phys(AddressSpace *as, hwaddr addr)
3070 return address_space_lduw_le(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3073 uint32_t lduw_be_phys(AddressSpace *as, hwaddr addr)
3075 return address_space_lduw_be(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3078 /* warning: addr must be aligned. The ram page is not masked as dirty
3079 and the code inside is not invalidated. It is useful if the dirty
3080 bits are used to track modified PTEs */
3081 void address_space_stl_notdirty(AddressSpace *as, hwaddr addr, uint32_t val,
3082 MemTxAttrs attrs, MemTxResult *result)
3084 uint8_t *ptr;
3085 MemoryRegion *mr;
3086 hwaddr l = 4;
3087 hwaddr addr1;
3088 MemTxResult r;
3089 uint8_t dirty_log_mask;
3090 bool release_lock = false;
3092 rcu_read_lock();
3093 mr = address_space_translate(as, addr, &addr1, &l,
3094 true);
3095 if (l < 4 || !memory_access_is_direct(mr, true)) {
3096 release_lock |= prepare_mmio_access(mr);
3098 r = memory_region_dispatch_write(mr, addr1, val, 4, attrs);
3099 } else {
3100 addr1 += memory_region_get_ram_addr(mr) & TARGET_PAGE_MASK;
3101 ptr = qemu_get_ram_ptr(addr1);
3102 stl_p(ptr, val);
3104 dirty_log_mask = memory_region_get_dirty_log_mask(mr);
3105 dirty_log_mask &= ~(1 << DIRTY_MEMORY_CODE);
3106 cpu_physical_memory_set_dirty_range(addr1, 4, dirty_log_mask);
3107 r = MEMTX_OK;
3109 if (result) {
3110 *result = r;
3112 if (release_lock) {
3113 qemu_mutex_unlock_iothread();
3115 rcu_read_unlock();
3118 void stl_phys_notdirty(AddressSpace *as, hwaddr addr, uint32_t val)
3120 address_space_stl_notdirty(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3123 /* warning: addr must be aligned */
3124 static inline void address_space_stl_internal(AddressSpace *as,
3125 hwaddr addr, uint32_t val,
3126 MemTxAttrs attrs,
3127 MemTxResult *result,
3128 enum device_endian endian)
3130 uint8_t *ptr;
3131 MemoryRegion *mr;
3132 hwaddr l = 4;
3133 hwaddr addr1;
3134 MemTxResult r;
3135 bool release_lock = false;
3137 rcu_read_lock();
3138 mr = address_space_translate(as, addr, &addr1, &l,
3139 true);
3140 if (l < 4 || !memory_access_is_direct(mr, true)) {
3141 release_lock |= prepare_mmio_access(mr);
3143 #if defined(TARGET_WORDS_BIGENDIAN)
3144 if (endian == DEVICE_LITTLE_ENDIAN) {
3145 val = bswap32(val);
3147 #else
3148 if (endian == DEVICE_BIG_ENDIAN) {
3149 val = bswap32(val);
3151 #endif
3152 r = memory_region_dispatch_write(mr, addr1, val, 4, attrs);
3153 } else {
3154 /* RAM case */
3155 addr1 += memory_region_get_ram_addr(mr) & TARGET_PAGE_MASK;
3156 ptr = qemu_get_ram_ptr(addr1);
3157 switch (endian) {
3158 case DEVICE_LITTLE_ENDIAN:
3159 stl_le_p(ptr, val);
3160 break;
3161 case DEVICE_BIG_ENDIAN:
3162 stl_be_p(ptr, val);
3163 break;
3164 default:
3165 stl_p(ptr, val);
3166 break;
3168 invalidate_and_set_dirty(mr, addr1, 4);
3169 r = MEMTX_OK;
3171 if (result) {
3172 *result = r;
3174 if (release_lock) {
3175 qemu_mutex_unlock_iothread();
3177 rcu_read_unlock();
3180 void address_space_stl(AddressSpace *as, hwaddr addr, uint32_t val,
3181 MemTxAttrs attrs, MemTxResult *result)
3183 address_space_stl_internal(as, addr, val, attrs, result,
3184 DEVICE_NATIVE_ENDIAN);
3187 void address_space_stl_le(AddressSpace *as, hwaddr addr, uint32_t val,
3188 MemTxAttrs attrs, MemTxResult *result)
3190 address_space_stl_internal(as, addr, val, attrs, result,
3191 DEVICE_LITTLE_ENDIAN);
3194 void address_space_stl_be(AddressSpace *as, hwaddr addr, uint32_t val,
3195 MemTxAttrs attrs, MemTxResult *result)
3197 address_space_stl_internal(as, addr, val, attrs, result,
3198 DEVICE_BIG_ENDIAN);
3201 void stl_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3203 address_space_stl(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3206 void stl_le_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3208 address_space_stl_le(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3211 void stl_be_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3213 address_space_stl_be(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3216 /* XXX: optimize */
3217 void address_space_stb(AddressSpace *as, hwaddr addr, uint32_t val,
3218 MemTxAttrs attrs, MemTxResult *result)
3220 uint8_t v = val;
3221 MemTxResult r;
3223 r = address_space_rw(as, addr, attrs, &v, 1, 1);
3224 if (result) {
3225 *result = r;
3229 void stb_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3231 address_space_stb(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3234 /* warning: addr must be aligned */
3235 static inline void address_space_stw_internal(AddressSpace *as,
3236 hwaddr addr, uint32_t val,
3237 MemTxAttrs attrs,
3238 MemTxResult *result,
3239 enum device_endian endian)
3241 uint8_t *ptr;
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, true);
3250 if (l < 2 || !memory_access_is_direct(mr, true)) {
3251 release_lock |= prepare_mmio_access(mr);
3253 #if defined(TARGET_WORDS_BIGENDIAN)
3254 if (endian == DEVICE_LITTLE_ENDIAN) {
3255 val = bswap16(val);
3257 #else
3258 if (endian == DEVICE_BIG_ENDIAN) {
3259 val = bswap16(val);
3261 #endif
3262 r = memory_region_dispatch_write(mr, addr1, val, 2, attrs);
3263 } else {
3264 /* RAM case */
3265 addr1 += memory_region_get_ram_addr(mr) & TARGET_PAGE_MASK;
3266 ptr = qemu_get_ram_ptr(addr1);
3267 switch (endian) {
3268 case DEVICE_LITTLE_ENDIAN:
3269 stw_le_p(ptr, val);
3270 break;
3271 case DEVICE_BIG_ENDIAN:
3272 stw_be_p(ptr, val);
3273 break;
3274 default:
3275 stw_p(ptr, val);
3276 break;
3278 invalidate_and_set_dirty(mr, addr1, 2);
3279 r = MEMTX_OK;
3281 if (result) {
3282 *result = r;
3284 if (release_lock) {
3285 qemu_mutex_unlock_iothread();
3287 rcu_read_unlock();
3290 void address_space_stw(AddressSpace *as, hwaddr addr, uint32_t val,
3291 MemTxAttrs attrs, MemTxResult *result)
3293 address_space_stw_internal(as, addr, val, attrs, result,
3294 DEVICE_NATIVE_ENDIAN);
3297 void address_space_stw_le(AddressSpace *as, hwaddr addr, uint32_t val,
3298 MemTxAttrs attrs, MemTxResult *result)
3300 address_space_stw_internal(as, addr, val, attrs, result,
3301 DEVICE_LITTLE_ENDIAN);
3304 void address_space_stw_be(AddressSpace *as, hwaddr addr, uint32_t val,
3305 MemTxAttrs attrs, MemTxResult *result)
3307 address_space_stw_internal(as, addr, val, attrs, result,
3308 DEVICE_BIG_ENDIAN);
3311 void stw_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3313 address_space_stw(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3316 void stw_le_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3318 address_space_stw_le(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3321 void stw_be_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3323 address_space_stw_be(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3326 /* XXX: optimize */
3327 void address_space_stq(AddressSpace *as, hwaddr addr, uint64_t val,
3328 MemTxAttrs attrs, MemTxResult *result)
3330 MemTxResult r;
3331 val = tswap64(val);
3332 r = address_space_rw(as, addr, attrs, (void *) &val, 8, 1);
3333 if (result) {
3334 *result = r;
3338 void address_space_stq_le(AddressSpace *as, hwaddr addr, uint64_t val,
3339 MemTxAttrs attrs, MemTxResult *result)
3341 MemTxResult r;
3342 val = cpu_to_le64(val);
3343 r = address_space_rw(as, addr, attrs, (void *) &val, 8, 1);
3344 if (result) {
3345 *result = r;
3348 void address_space_stq_be(AddressSpace *as, hwaddr addr, uint64_t val,
3349 MemTxAttrs attrs, MemTxResult *result)
3351 MemTxResult r;
3352 val = cpu_to_be64(val);
3353 r = address_space_rw(as, addr, attrs, (void *) &val, 8, 1);
3354 if (result) {
3355 *result = r;
3359 void stq_phys(AddressSpace *as, hwaddr addr, uint64_t val)
3361 address_space_stq(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3364 void stq_le_phys(AddressSpace *as, hwaddr addr, uint64_t val)
3366 address_space_stq_le(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3369 void stq_be_phys(AddressSpace *as, hwaddr addr, uint64_t val)
3371 address_space_stq_be(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3374 /* virtual memory access for debug (includes writing to ROM) */
3375 int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
3376 uint8_t *buf, int len, int is_write)
3378 int l;
3379 hwaddr phys_addr;
3380 target_ulong page;
3382 while (len > 0) {
3383 page = addr & TARGET_PAGE_MASK;
3384 phys_addr = cpu_get_phys_page_debug(cpu, page);
3385 /* if no physical page mapped, return an error */
3386 if (phys_addr == -1)
3387 return -1;
3388 l = (page + TARGET_PAGE_SIZE) - addr;
3389 if (l > len)
3390 l = len;
3391 phys_addr += (addr & ~TARGET_PAGE_MASK);
3392 if (is_write) {
3393 cpu_physical_memory_write_rom(cpu->as, phys_addr, buf, l);
3394 } else {
3395 address_space_rw(cpu->as, phys_addr, MEMTXATTRS_UNSPECIFIED,
3396 buf, l, 0);
3398 len -= l;
3399 buf += l;
3400 addr += l;
3402 return 0;
3404 #endif
3407 * A helper function for the _utterly broken_ virtio device model to find out if
3408 * it's running on a big endian machine. Don't do this at home kids!
3410 bool target_words_bigendian(void);
3411 bool target_words_bigendian(void)
3413 #if defined(TARGET_WORDS_BIGENDIAN)
3414 return true;
3415 #else
3416 return false;
3417 #endif
3420 #ifndef CONFIG_USER_ONLY
3421 bool cpu_physical_memory_is_io(hwaddr phys_addr)
3423 MemoryRegion*mr;
3424 hwaddr l = 1;
3425 bool res;
3427 rcu_read_lock();
3428 mr = address_space_translate(&address_space_memory,
3429 phys_addr, &phys_addr, &l, false);
3431 res = !(memory_region_is_ram(mr) || memory_region_is_romd(mr));
3432 rcu_read_unlock();
3433 return res;
3436 int qemu_ram_foreach_block(RAMBlockIterFunc func, void *opaque)
3438 RAMBlock *block;
3439 int ret = 0;
3441 rcu_read_lock();
3442 QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
3443 ret = func(block->idstr, block->host, block->offset,
3444 block->used_length, opaque);
3445 if (ret) {
3446 break;
3449 rcu_read_unlock();
3450 return ret;
3452 #endif