exec: remove unused compacted argument
[sdk/emulator/qemu.git] / exec.c
1 /*
2  *  Virtual page mapping
3  *
4  *  Copyright (c) 2003 Fabrice Bellard
5  *
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.
10  *
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.
15  *
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/>.
18  */
19 #include "qemu/osdep.h"
20 #include "qapi/error.h"
21 #ifndef _WIN32
22 #endif
23
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"
54
55 #include "exec/memory-internal.h"
56 #include "exec/ram_addr.h"
57 #include "exec/log.h"
58
59 #include "migration/vmstate.h"
60
61 #include "qemu/range.h"
62 #ifndef _WIN32
63 #include "qemu/mmap-alloc.h"
64 #endif
65
66 //#define DEBUG_SUBPAGE
67
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.
71  */
72 RAMList ram_list = { .blocks = QLIST_HEAD_INITIALIZER(ram_list.blocks) };
73
74 static MemoryRegion *system_memory;
75 static MemoryRegion *system_io;
76
77 AddressSpace address_space_io;
78 AddressSpace address_space_memory;
79
80 MemoryRegion io_mem_rom, io_mem_notdirty;
81 static MemoryRegion io_mem_unassigned;
82
83 /* RAM is pre-allocated and passed into qemu_ram_alloc_from_ptr */
84 #define RAM_PREALLOC   (1 << 0)
85
86 /* RAM is mmap-ed with MAP_SHARED */
87 #define RAM_SHARED     (1 << 1)
88
89 /* Only a portion of RAM (used_length) is actually used, and migrated.
90  * This used_length size can change across reboots.
91  */
92 #define RAM_RESIZEABLE (1 << 2)
93
94 #endif
95
96 struct CPUTailQ cpus = QTAILQ_HEAD_INITIALIZER(cpus);
97 /* current CPU in the current thread. It is only valid inside
98    cpu_exec() */
99 __thread CPUState *current_cpu;
100 /* 0 = Do not count executed instructions.
101    1 = Precise instruction counting.
102    2 = Adaptive rate instruction counting.  */
103 int use_icount;
104
105 #if !defined(CONFIG_USER_ONLY)
106
107 typedef struct PhysPageEntry PhysPageEntry;
108
109 struct PhysPageEntry {
110     /* How many bits skip to next level (in units of L2_SIZE). 0 for a leaf. */
111     uint32_t skip : 6;
112      /* index into phys_sections (!skip) or phys_map_nodes (skip) */
113     uint32_t ptr : 26;
114 };
115
116 #define PHYS_MAP_NODE_NIL (((uint32_t)~0) >> 6)
117
118 /* Size of the L2 (and L3, etc) page tables.  */
119 #define ADDR_SPACE_BITS 64
120
121 #define P_L2_BITS 9
122 #define P_L2_SIZE (1 << P_L2_BITS)
123
124 #define P_L2_LEVELS (((ADDR_SPACE_BITS - TARGET_PAGE_BITS - 1) / P_L2_BITS) + 1)
125
126 typedef PhysPageEntry Node[P_L2_SIZE];
127
128 typedef struct PhysPageMap {
129     struct rcu_head rcu;
130
131     unsigned sections_nb;
132     unsigned sections_nb_alloc;
133     unsigned nodes_nb;
134     unsigned nodes_nb_alloc;
135     Node *nodes;
136     MemoryRegionSection *sections;
137 } PhysPageMap;
138
139 struct AddressSpaceDispatch {
140     struct rcu_head rcu;
141
142     MemoryRegionSection *mru_section;
143     /* This is a multi-level map on the physical address space.
144      * The bottom level has pointers to MemoryRegionSections.
145      */
146     PhysPageEntry phys_map;
147     PhysPageMap map;
148     AddressSpace *as;
149 };
150
151 #define SUBPAGE_IDX(addr) ((addr) & ~TARGET_PAGE_MASK)
152 typedef struct subpage_t {
153     MemoryRegion iomem;
154     AddressSpace *as;
155     hwaddr base;
156     uint16_t sub_section[TARGET_PAGE_SIZE];
157 } subpage_t;
158
159 #define PHYS_SECTION_UNASSIGNED 0
160 #define PHYS_SECTION_NOTDIRTY 1
161 #define PHYS_SECTION_ROM 2
162 #define PHYS_SECTION_WATCH 3
163
164 static void io_mem_init(void);
165 static void memory_map_init(void);
166 static void tcg_commit(MemoryListener *listener);
167
168 static MemoryRegion io_mem_watch;
169
170 /**
171  * CPUAddressSpace: all the information a CPU needs about an AddressSpace
172  * @cpu: the CPU whose AddressSpace this is
173  * @as: the AddressSpace itself
174  * @memory_dispatch: its dispatch pointer (cached, RCU protected)
175  * @tcg_as_listener: listener for tracking changes to the AddressSpace
176  */
177 struct CPUAddressSpace {
178     CPUState *cpu;
179     AddressSpace *as;
180     struct AddressSpaceDispatch *memory_dispatch;
181     MemoryListener tcg_as_listener;
182 };
183
184 #endif
185
186 #if !defined(CONFIG_USER_ONLY)
187
188 static void phys_map_node_reserve(PhysPageMap *map, unsigned nodes)
189 {
190     static unsigned alloc_hint = 16;
191     if (map->nodes_nb + nodes > map->nodes_nb_alloc) {
192         map->nodes_nb_alloc = MAX(map->nodes_nb_alloc, alloc_hint);
193         map->nodes_nb_alloc = MAX(map->nodes_nb_alloc, map->nodes_nb + nodes);
194         map->nodes = g_renew(Node, map->nodes, map->nodes_nb_alloc);
195         alloc_hint = map->nodes_nb_alloc;
196     }
197 }
198
199 static uint32_t phys_map_node_alloc(PhysPageMap *map, bool leaf)
200 {
201     unsigned i;
202     uint32_t ret;
203     PhysPageEntry e;
204     PhysPageEntry *p;
205
206     ret = map->nodes_nb++;
207     p = map->nodes[ret];
208     assert(ret != PHYS_MAP_NODE_NIL);
209     assert(ret != map->nodes_nb_alloc);
210
211     e.skip = leaf ? 0 : 1;
212     e.ptr = leaf ? PHYS_SECTION_UNASSIGNED : PHYS_MAP_NODE_NIL;
213     for (i = 0; i < P_L2_SIZE; ++i) {
214         memcpy(&p[i], &e, sizeof(e));
215     }
216     return ret;
217 }
218
219 static void phys_page_set_level(PhysPageMap *map, PhysPageEntry *lp,
220                                 hwaddr *index, hwaddr *nb, uint16_t leaf,
221                                 int level)
222 {
223     PhysPageEntry *p;
224     hwaddr step = (hwaddr)1 << (level * P_L2_BITS);
225
226     if (lp->skip && lp->ptr == PHYS_MAP_NODE_NIL) {
227         lp->ptr = phys_map_node_alloc(map, level == 0);
228     }
229     p = map->nodes[lp->ptr];
230     lp = &p[(*index >> (level * P_L2_BITS)) & (P_L2_SIZE - 1)];
231
232     while (*nb && lp < &p[P_L2_SIZE]) {
233         if ((*index & (step - 1)) == 0 && *nb >= step) {
234             lp->skip = 0;
235             lp->ptr = leaf;
236             *index += step;
237             *nb -= step;
238         } else {
239             phys_page_set_level(map, lp, index, nb, leaf, level - 1);
240         }
241         ++lp;
242     }
243 }
244
245 static void phys_page_set(AddressSpaceDispatch *d,
246                           hwaddr index, hwaddr nb,
247                           uint16_t leaf)
248 {
249     /* Wildly overreserve - it doesn't matter much. */
250     phys_map_node_reserve(&d->map, 3 * P_L2_LEVELS);
251
252     phys_page_set_level(&d->map, &d->phys_map, &index, &nb, leaf, P_L2_LEVELS - 1);
253 }
254
255 /* Compact a non leaf page entry. Simply detect that the entry has a single child,
256  * and update our entry so we can skip it and go directly to the destination.
257  */
258 static void phys_page_compact(PhysPageEntry *lp, Node *nodes)
259 {
260     unsigned valid_ptr = P_L2_SIZE;
261     int valid = 0;
262     PhysPageEntry *p;
263     int i;
264
265     if (lp->ptr == PHYS_MAP_NODE_NIL) {
266         return;
267     }
268
269     p = nodes[lp->ptr];
270     for (i = 0; i < P_L2_SIZE; i++) {
271         if (p[i].ptr == PHYS_MAP_NODE_NIL) {
272             continue;
273         }
274
275         valid_ptr = i;
276         valid++;
277         if (p[i].skip) {
278             phys_page_compact(&p[i], nodes);
279         }
280     }
281
282     /* We can only compress if there's only one child. */
283     if (valid != 1) {
284         return;
285     }
286
287     assert(valid_ptr < P_L2_SIZE);
288
289     /* Don't compress if it won't fit in the # of bits we have. */
290     if (lp->skip + p[valid_ptr].skip >= (1 << 3)) {
291         return;
292     }
293
294     lp->ptr = p[valid_ptr].ptr;
295     if (!p[valid_ptr].skip) {
296         /* If our only child is a leaf, make this a leaf. */
297         /* By design, we should have made this node a leaf to begin with so we
298          * should never reach here.
299          * But since it's so simple to handle this, let's do it just in case we
300          * change this rule.
301          */
302         lp->skip = 0;
303     } else {
304         lp->skip += p[valid_ptr].skip;
305     }
306 }
307
308 static void phys_page_compact_all(AddressSpaceDispatch *d, int nodes_nb)
309 {
310     if (d->phys_map.skip) {
311         phys_page_compact(&d->phys_map, d->map.nodes);
312     }
313 }
314
315 static inline bool section_covers_addr(const MemoryRegionSection *section,
316                                        hwaddr addr)
317 {
318     /* Memory topology clips a memory region to [0, 2^64); size.hi > 0 means
319      * the section must cover the entire address space.
320      */
321     return section->size.hi ||
322            range_covers_byte(section->offset_within_address_space,
323                              section->size.lo, addr);
324 }
325
326 static MemoryRegionSection *phys_page_find(PhysPageEntry lp, hwaddr addr,
327                                            Node *nodes, MemoryRegionSection *sections)
328 {
329     PhysPageEntry *p;
330     hwaddr index = addr >> TARGET_PAGE_BITS;
331     int i;
332
333     for (i = P_L2_LEVELS; lp.skip && (i -= lp.skip) >= 0;) {
334         if (lp.ptr == PHYS_MAP_NODE_NIL) {
335             return &sections[PHYS_SECTION_UNASSIGNED];
336         }
337         p = nodes[lp.ptr];
338         lp = p[(index >> (i * P_L2_BITS)) & (P_L2_SIZE - 1)];
339     }
340
341     if (section_covers_addr(&sections[lp.ptr], addr)) {
342         return &sections[lp.ptr];
343     } else {
344         return &sections[PHYS_SECTION_UNASSIGNED];
345     }
346 }
347
348 bool memory_region_is_unassigned(MemoryRegion *mr)
349 {
350     return mr != &io_mem_rom && mr != &io_mem_notdirty && !mr->rom_device
351         && mr != &io_mem_watch;
352 }
353
354 /* Called from RCU critical section */
355 static MemoryRegionSection *address_space_lookup_region(AddressSpaceDispatch *d,
356                                                         hwaddr addr,
357                                                         bool resolve_subpage)
358 {
359     MemoryRegionSection *section = atomic_read(&d->mru_section);
360     subpage_t *subpage;
361     bool update;
362
363     if (section && section != &d->map.sections[PHYS_SECTION_UNASSIGNED] &&
364         section_covers_addr(section, addr)) {
365         update = false;
366     } else {
367         section = phys_page_find(d->phys_map, addr, d->map.nodes,
368                                  d->map.sections);
369         update = true;
370     }
371     if (resolve_subpage && section->mr->subpage) {
372         subpage = container_of(section->mr, subpage_t, iomem);
373         section = &d->map.sections[subpage->sub_section[SUBPAGE_IDX(addr)]];
374     }
375     if (update) {
376         atomic_set(&d->mru_section, section);
377     }
378     return section;
379 }
380
381 /* Called from RCU critical section */
382 static MemoryRegionSection *
383 address_space_translate_internal(AddressSpaceDispatch *d, hwaddr addr, hwaddr *xlat,
384                                  hwaddr *plen, bool resolve_subpage)
385 {
386     MemoryRegionSection *section;
387     MemoryRegion *mr;
388     Int128 diff;
389
390     section = address_space_lookup_region(d, addr, resolve_subpage);
391     /* Compute offset within MemoryRegionSection */
392     addr -= section->offset_within_address_space;
393
394     /* Compute offset within MemoryRegion */
395     *xlat = addr + section->offset_within_region;
396
397     mr = section->mr;
398
399     /* MMIO registers can be expected to perform full-width accesses based only
400      * on their address, without considering adjacent registers that could
401      * decode to completely different MemoryRegions.  When such registers
402      * exist (e.g. I/O ports 0xcf8 and 0xcf9 on most PC chipsets), MMIO
403      * regions overlap wildly.  For this reason we cannot clamp the accesses
404      * here.
405      *
406      * If the length is small (as is the case for address_space_ldl/stl),
407      * everything works fine.  If the incoming length is large, however,
408      * the caller really has to do the clamping through memory_access_size.
409      */
410     if (memory_region_is_ram(mr)) {
411         diff = int128_sub(section->size, int128_make64(addr));
412         *plen = int128_get64(int128_min(diff, int128_make64(*plen)));
413     }
414     return section;
415 }
416
417 /* Called from RCU critical section */
418 MemoryRegion *address_space_translate(AddressSpace *as, hwaddr addr,
419                                       hwaddr *xlat, hwaddr *plen,
420                                       bool is_write)
421 {
422     IOMMUTLBEntry iotlb;
423     MemoryRegionSection *section;
424     MemoryRegion *mr;
425
426     for (;;) {
427         AddressSpaceDispatch *d = atomic_rcu_read(&as->dispatch);
428         section = address_space_translate_internal(d, addr, &addr, plen, true);
429         mr = section->mr;
430
431         if (!mr->iommu_ops) {
432             break;
433         }
434
435         iotlb = mr->iommu_ops->translate(mr, addr, is_write);
436         addr = ((iotlb.translated_addr & ~iotlb.addr_mask)
437                 | (addr & iotlb.addr_mask));
438         *plen = MIN(*plen, (addr | iotlb.addr_mask) - addr + 1);
439         if (!(iotlb.perm & (1 << is_write))) {
440             mr = &io_mem_unassigned;
441             break;
442         }
443
444         as = iotlb.target_as;
445     }
446
447     if (xen_enabled() && memory_access_is_direct(mr, is_write)) {
448         hwaddr page = ((addr & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE) - addr;
449         *plen = MIN(page, *plen);
450     }
451
452     *xlat = addr;
453     return mr;
454 }
455
456 /* Called from RCU critical section */
457 MemoryRegionSection *
458 address_space_translate_for_iotlb(CPUState *cpu, int asidx, hwaddr addr,
459                                   hwaddr *xlat, hwaddr *plen)
460 {
461     MemoryRegionSection *section;
462     AddressSpaceDispatch *d = cpu->cpu_ases[asidx].memory_dispatch;
463
464     section = address_space_translate_internal(d, addr, xlat, plen, false);
465
466     assert(!section->mr->iommu_ops);
467     return section;
468 }
469 #endif
470
471 #if !defined(CONFIG_USER_ONLY)
472
473 static int cpu_common_post_load(void *opaque, int version_id)
474 {
475     CPUState *cpu = opaque;
476
477     /* 0x01 was CPU_INTERRUPT_EXIT. This line can be removed when the
478        version_id is increased. */
479     cpu->interrupt_request &= ~0x01;
480     tlb_flush(cpu, 1);
481
482     return 0;
483 }
484
485 static int cpu_common_pre_load(void *opaque)
486 {
487     CPUState *cpu = opaque;
488
489     cpu->exception_index = -1;
490
491     return 0;
492 }
493
494 static bool cpu_common_exception_index_needed(void *opaque)
495 {
496     CPUState *cpu = opaque;
497
498     return tcg_enabled() && cpu->exception_index != -1;
499 }
500
501 static const VMStateDescription vmstate_cpu_common_exception_index = {
502     .name = "cpu_common/exception_index",
503     .version_id = 1,
504     .minimum_version_id = 1,
505     .needed = cpu_common_exception_index_needed,
506     .fields = (VMStateField[]) {
507         VMSTATE_INT32(exception_index, CPUState),
508         VMSTATE_END_OF_LIST()
509     }
510 };
511
512 static bool cpu_common_crash_occurred_needed(void *opaque)
513 {
514     CPUState *cpu = opaque;
515
516     return cpu->crash_occurred;
517 }
518
519 static const VMStateDescription vmstate_cpu_common_crash_occurred = {
520     .name = "cpu_common/crash_occurred",
521     .version_id = 1,
522     .minimum_version_id = 1,
523     .needed = cpu_common_crash_occurred_needed,
524     .fields = (VMStateField[]) {
525         VMSTATE_BOOL(crash_occurred, CPUState),
526         VMSTATE_END_OF_LIST()
527     }
528 };
529
530 const VMStateDescription vmstate_cpu_common = {
531     .name = "cpu_common",
532     .version_id = 1,
533     .minimum_version_id = 1,
534     .pre_load = cpu_common_pre_load,
535     .post_load = cpu_common_post_load,
536     .fields = (VMStateField[]) {
537         VMSTATE_UINT32(halted, CPUState),
538         VMSTATE_UINT32(interrupt_request, CPUState),
539         VMSTATE_END_OF_LIST()
540     },
541     .subsections = (const VMStateDescription*[]) {
542         &vmstate_cpu_common_exception_index,
543         &vmstate_cpu_common_crash_occurred,
544         NULL
545     }
546 };
547
548 #endif
549
550 CPUState *qemu_get_cpu(int index)
551 {
552     CPUState *cpu;
553
554     CPU_FOREACH(cpu) {
555         if (cpu->cpu_index == index) {
556             return cpu;
557         }
558     }
559
560     return NULL;
561 }
562
563 #if !defined(CONFIG_USER_ONLY)
564 void cpu_address_space_init(CPUState *cpu, AddressSpace *as, int asidx)
565 {
566     CPUAddressSpace *newas;
567
568     /* Target code should have set num_ases before calling us */
569     assert(asidx < cpu->num_ases);
570
571     if (asidx == 0) {
572         /* address space 0 gets the convenience alias */
573         cpu->as = as;
574     }
575
576     /* KVM cannot currently support multiple address spaces. */
577     assert(asidx == 0 || !kvm_enabled());
578
579     if (!cpu->cpu_ases) {
580         cpu->cpu_ases = g_new0(CPUAddressSpace, cpu->num_ases);
581     }
582
583     newas = &cpu->cpu_ases[asidx];
584     newas->cpu = cpu;
585     newas->as = as;
586     if (tcg_enabled()) {
587         newas->tcg_as_listener.commit = tcg_commit;
588         memory_listener_register(&newas->tcg_as_listener, as);
589     }
590 }
591
592 AddressSpace *cpu_get_address_space(CPUState *cpu, int asidx)
593 {
594     /* Return the AddressSpace corresponding to the specified index */
595     return cpu->cpu_ases[asidx].as;
596 }
597 #endif
598
599 void cpu_exec_exit(CPUState *cpu)
600 {
601     CPUClass *cc = CPU_GET_CLASS(cpu);
602
603     cpu_list_remove(cpu);
604
605     if (cc->vmsd != NULL) {
606         vmstate_unregister(NULL, cc->vmsd, cpu);
607     }
608     if (qdev_get_vmsd(DEVICE(cpu)) == NULL) {
609         vmstate_unregister(NULL, &vmstate_cpu_common, cpu);
610     }
611 }
612
613 void cpu_exec_init(CPUState *cpu, Error **errp)
614 {
615     CPUClass *cc ATTRIBUTE_UNUSED = CPU_GET_CLASS(cpu);
616     Error *local_err ATTRIBUTE_UNUSED = NULL;
617
618     cpu->as = NULL;
619     cpu->num_ases = 0;
620
621 #ifndef CONFIG_USER_ONLY
622     cpu->thread_id = qemu_get_thread_id();
623
624     /* This is a softmmu CPU object, so create a property for it
625      * so users can wire up its memory. (This can't go in qom/cpu.c
626      * because that file is compiled only once for both user-mode
627      * and system builds.) The default if no link is set up is to use
628      * the system address space.
629      */
630     object_property_add_link(OBJECT(cpu), "memory", TYPE_MEMORY_REGION,
631                              (Object **)&cpu->memory,
632                              qdev_prop_allow_set_link_before_realize,
633                              OBJ_PROP_LINK_UNREF_ON_RELEASE,
634                              &error_abort);
635     cpu->memory = system_memory;
636     object_ref(OBJECT(cpu->memory));
637 #endif
638
639     cpu_list_add(cpu);
640
641 #ifndef CONFIG_USER_ONLY
642     if (qdev_get_vmsd(DEVICE(cpu)) == NULL) {
643         vmstate_register(NULL, cpu->cpu_index, &vmstate_cpu_common, cpu);
644     }
645     if (cc->vmsd != NULL) {
646         vmstate_register(NULL, cpu->cpu_index, cc->vmsd, cpu);
647     }
648 #endif
649 }
650
651 #if defined(CONFIG_USER_ONLY)
652 static void breakpoint_invalidate(CPUState *cpu, target_ulong pc)
653 {
654     tb_invalidate_phys_page_range(pc, pc + 1, 0);
655 }
656 #else
657 static void breakpoint_invalidate(CPUState *cpu, target_ulong pc)
658 {
659     MemTxAttrs attrs;
660     hwaddr phys = cpu_get_phys_page_attrs_debug(cpu, pc, &attrs);
661     int asidx = cpu_asidx_from_attrs(cpu, attrs);
662     if (phys != -1) {
663         tb_invalidate_phys_addr(cpu->cpu_ases[asidx].as,
664                                 phys | (pc & ~TARGET_PAGE_MASK));
665     }
666 }
667 #endif
668
669 #if defined(CONFIG_USER_ONLY)
670 void cpu_watchpoint_remove_all(CPUState *cpu, int mask)
671
672 {
673 }
674
675 int cpu_watchpoint_remove(CPUState *cpu, vaddr addr, vaddr len,
676                           int flags)
677 {
678     return -ENOSYS;
679 }
680
681 void cpu_watchpoint_remove_by_ref(CPUState *cpu, CPUWatchpoint *watchpoint)
682 {
683 }
684
685 int cpu_watchpoint_insert(CPUState *cpu, vaddr addr, vaddr len,
686                           int flags, CPUWatchpoint **watchpoint)
687 {
688     return -ENOSYS;
689 }
690 #else
691 /* Add a watchpoint.  */
692 int cpu_watchpoint_insert(CPUState *cpu, vaddr addr, vaddr len,
693                           int flags, CPUWatchpoint **watchpoint)
694 {
695     CPUWatchpoint *wp;
696
697     /* forbid ranges which are empty or run off the end of the address space */
698     if (len == 0 || (addr + len - 1) < addr) {
699         error_report("tried to set invalid watchpoint at %"
700                      VADDR_PRIx ", len=%" VADDR_PRIu, addr, len);
701         return -EINVAL;
702     }
703     wp = g_malloc(sizeof(*wp));
704
705     wp->vaddr = addr;
706     wp->len = len;
707     wp->flags = flags;
708
709     /* keep all GDB-injected watchpoints in front */
710     if (flags & BP_GDB) {
711         QTAILQ_INSERT_HEAD(&cpu->watchpoints, wp, entry);
712     } else {
713         QTAILQ_INSERT_TAIL(&cpu->watchpoints, wp, entry);
714     }
715
716     tlb_flush_page(cpu, addr);
717
718     if (watchpoint)
719         *watchpoint = wp;
720     return 0;
721 }
722
723 /* Remove a specific watchpoint.  */
724 int cpu_watchpoint_remove(CPUState *cpu, vaddr addr, vaddr len,
725                           int flags)
726 {
727     CPUWatchpoint *wp;
728
729     QTAILQ_FOREACH(wp, &cpu->watchpoints, entry) {
730         if (addr == wp->vaddr && len == wp->len
731                 && flags == (wp->flags & ~BP_WATCHPOINT_HIT)) {
732             cpu_watchpoint_remove_by_ref(cpu, wp);
733             return 0;
734         }
735     }
736     return -ENOENT;
737 }
738
739 /* Remove a specific watchpoint by reference.  */
740 void cpu_watchpoint_remove_by_ref(CPUState *cpu, CPUWatchpoint *watchpoint)
741 {
742     QTAILQ_REMOVE(&cpu->watchpoints, watchpoint, entry);
743
744     tlb_flush_page(cpu, watchpoint->vaddr);
745
746     g_free(watchpoint);
747 }
748
749 /* Remove all matching watchpoints.  */
750 void cpu_watchpoint_remove_all(CPUState *cpu, int mask)
751 {
752     CPUWatchpoint *wp, *next;
753
754     QTAILQ_FOREACH_SAFE(wp, &cpu->watchpoints, entry, next) {
755         if (wp->flags & mask) {
756             cpu_watchpoint_remove_by_ref(cpu, wp);
757         }
758     }
759 }
760
761 /* Return true if this watchpoint address matches the specified
762  * access (ie the address range covered by the watchpoint overlaps
763  * partially or completely with the address range covered by the
764  * access).
765  */
766 static inline bool cpu_watchpoint_address_matches(CPUWatchpoint *wp,
767                                                   vaddr addr,
768                                                   vaddr len)
769 {
770     /* We know the lengths are non-zero, but a little caution is
771      * required to avoid errors in the case where the range ends
772      * exactly at the top of the address space and so addr + len
773      * wraps round to zero.
774      */
775     vaddr wpend = wp->vaddr + wp->len - 1;
776     vaddr addrend = addr + len - 1;
777
778     return !(addr > wpend || wp->vaddr > addrend);
779 }
780
781 #endif
782
783 /* Add a breakpoint.  */
784 int cpu_breakpoint_insert(CPUState *cpu, vaddr pc, int flags,
785                           CPUBreakpoint **breakpoint)
786 {
787     CPUBreakpoint *bp;
788
789     bp = g_malloc(sizeof(*bp));
790
791     bp->pc = pc;
792     bp->flags = flags;
793
794     /* keep all GDB-injected breakpoints in front */
795     if (flags & BP_GDB) {
796         QTAILQ_INSERT_HEAD(&cpu->breakpoints, bp, entry);
797     } else {
798         QTAILQ_INSERT_TAIL(&cpu->breakpoints, bp, entry);
799     }
800
801     breakpoint_invalidate(cpu, pc);
802
803     if (breakpoint) {
804         *breakpoint = bp;
805     }
806     return 0;
807 }
808
809 /* Remove a specific breakpoint.  */
810 int cpu_breakpoint_remove(CPUState *cpu, vaddr pc, int flags)
811 {
812     CPUBreakpoint *bp;
813
814     QTAILQ_FOREACH(bp, &cpu->breakpoints, entry) {
815         if (bp->pc == pc && bp->flags == flags) {
816             cpu_breakpoint_remove_by_ref(cpu, bp);
817             return 0;
818         }
819     }
820     return -ENOENT;
821 }
822
823 /* Remove a specific breakpoint by reference.  */
824 void cpu_breakpoint_remove_by_ref(CPUState *cpu, CPUBreakpoint *breakpoint)
825 {
826     QTAILQ_REMOVE(&cpu->breakpoints, breakpoint, entry);
827
828     breakpoint_invalidate(cpu, breakpoint->pc);
829
830     g_free(breakpoint);
831 }
832
833 /* Remove all matching breakpoints. */
834 void cpu_breakpoint_remove_all(CPUState *cpu, int mask)
835 {
836     CPUBreakpoint *bp, *next;
837
838     QTAILQ_FOREACH_SAFE(bp, &cpu->breakpoints, entry, next) {
839         if (bp->flags & mask) {
840             cpu_breakpoint_remove_by_ref(cpu, bp);
841         }
842     }
843 }
844
845 /* enable or disable single step mode. EXCP_DEBUG is returned by the
846    CPU loop after each instruction */
847 void cpu_single_step(CPUState *cpu, int enabled)
848 {
849     if (cpu->singlestep_enabled != enabled) {
850         cpu->singlestep_enabled = enabled;
851         if (kvm_enabled()) {
852             kvm_update_guest_debug(cpu, 0);
853         } else {
854             /* must flush all the translated code to avoid inconsistencies */
855             /* XXX: only flush what is necessary */
856             tb_flush(cpu);
857         }
858     }
859 }
860
861 void cpu_abort(CPUState *cpu, const char *fmt, ...)
862 {
863     va_list ap;
864     va_list ap2;
865
866     va_start(ap, fmt);
867     va_copy(ap2, ap);
868     fprintf(stderr, "qemu: fatal: ");
869     vfprintf(stderr, fmt, ap);
870     fprintf(stderr, "\n");
871     cpu_dump_state(cpu, stderr, fprintf, CPU_DUMP_FPU | CPU_DUMP_CCOP);
872     if (qemu_log_separate()) {
873         qemu_log("qemu: fatal: ");
874         qemu_log_vprintf(fmt, ap2);
875         qemu_log("\n");
876         log_cpu_state(cpu, CPU_DUMP_FPU | CPU_DUMP_CCOP);
877         qemu_log_flush();
878         qemu_log_close();
879     }
880     va_end(ap2);
881     va_end(ap);
882     replay_finish();
883 #if defined(CONFIG_USER_ONLY)
884     {
885         struct sigaction act;
886         sigfillset(&act.sa_mask);
887         act.sa_handler = SIG_DFL;
888         sigaction(SIGABRT, &act, NULL);
889     }
890 #endif
891     abort();
892 }
893
894 #if !defined(CONFIG_USER_ONLY)
895 /* Called from RCU critical section */
896 static RAMBlock *qemu_get_ram_block(ram_addr_t addr)
897 {
898     RAMBlock *block;
899
900     block = atomic_rcu_read(&ram_list.mru_block);
901     if (block && addr - block->offset < block->max_length) {
902         return block;
903     }
904     QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
905         if (addr - block->offset < block->max_length) {
906             goto found;
907         }
908     }
909
910     fprintf(stderr, "Bad ram offset %" PRIx64 "\n", (uint64_t)addr);
911     abort();
912
913 found:
914     /* It is safe to write mru_block outside the iothread lock.  This
915      * is what happens:
916      *
917      *     mru_block = xxx
918      *     rcu_read_unlock()
919      *                                        xxx removed from list
920      *                  rcu_read_lock()
921      *                  read mru_block
922      *                                        mru_block = NULL;
923      *                                        call_rcu(reclaim_ramblock, xxx);
924      *                  rcu_read_unlock()
925      *
926      * atomic_rcu_set is not needed here.  The block was already published
927      * when it was placed into the list.  Here we're just making an extra
928      * copy of the pointer.
929      */
930     ram_list.mru_block = block;
931     return block;
932 }
933
934 static void tlb_reset_dirty_range_all(ram_addr_t start, ram_addr_t length)
935 {
936     CPUState *cpu;
937     ram_addr_t start1;
938     RAMBlock *block;
939     ram_addr_t end;
940
941     end = TARGET_PAGE_ALIGN(start + length);
942     start &= TARGET_PAGE_MASK;
943
944     rcu_read_lock();
945     block = qemu_get_ram_block(start);
946     assert(block == qemu_get_ram_block(end - 1));
947     start1 = (uintptr_t)ramblock_ptr(block, start - block->offset);
948     CPU_FOREACH(cpu) {
949         tlb_reset_dirty(cpu, start1, length);
950     }
951     rcu_read_unlock();
952 }
953
954 /* Note: start and end must be within the same ram block.  */
955 bool cpu_physical_memory_test_and_clear_dirty(ram_addr_t start,
956                                               ram_addr_t length,
957                                               unsigned client)
958 {
959     DirtyMemoryBlocks *blocks;
960     unsigned long end, page;
961     bool dirty = false;
962
963     if (length == 0) {
964         return false;
965     }
966
967     end = TARGET_PAGE_ALIGN(start + length) >> TARGET_PAGE_BITS;
968     page = start >> TARGET_PAGE_BITS;
969
970     rcu_read_lock();
971
972     blocks = atomic_rcu_read(&ram_list.dirty_memory[client]);
973
974     while (page < end) {
975         unsigned long idx = page / DIRTY_MEMORY_BLOCK_SIZE;
976         unsigned long offset = page % DIRTY_MEMORY_BLOCK_SIZE;
977         unsigned long num = MIN(end - page, DIRTY_MEMORY_BLOCK_SIZE - offset);
978
979         dirty |= bitmap_test_and_clear_atomic(blocks->blocks[idx],
980                                               offset, num);
981         page += num;
982     }
983
984     rcu_read_unlock();
985
986     if (dirty && tcg_enabled()) {
987         tlb_reset_dirty_range_all(start, length);
988     }
989
990     return dirty;
991 }
992
993 /* Called from RCU critical section */
994 hwaddr memory_region_section_get_iotlb(CPUState *cpu,
995                                        MemoryRegionSection *section,
996                                        target_ulong vaddr,
997                                        hwaddr paddr, hwaddr xlat,
998                                        int prot,
999                                        target_ulong *address)
1000 {
1001     hwaddr iotlb;
1002     CPUWatchpoint *wp;
1003
1004     if (memory_region_is_ram(section->mr)) {
1005         /* Normal RAM.  */
1006         iotlb = memory_region_get_ram_addr(section->mr) + xlat;
1007         if (!section->readonly) {
1008             iotlb |= PHYS_SECTION_NOTDIRTY;
1009         } else {
1010             iotlb |= PHYS_SECTION_ROM;
1011         }
1012     } else {
1013         AddressSpaceDispatch *d;
1014
1015         d = atomic_rcu_read(&section->address_space->dispatch);
1016         iotlb = section - d->map.sections;
1017         iotlb += xlat;
1018     }
1019
1020     /* Make accesses to pages with watchpoints go via the
1021        watchpoint trap routines.  */
1022     QTAILQ_FOREACH(wp, &cpu->watchpoints, entry) {
1023         if (cpu_watchpoint_address_matches(wp, vaddr, TARGET_PAGE_SIZE)) {
1024             /* Avoid trapping reads of pages with a write breakpoint. */
1025             if ((prot & PAGE_WRITE) || (wp->flags & BP_MEM_READ)) {
1026                 iotlb = PHYS_SECTION_WATCH + paddr;
1027                 *address |= TLB_MMIO;
1028                 break;
1029             }
1030         }
1031     }
1032
1033     return iotlb;
1034 }
1035 #endif /* defined(CONFIG_USER_ONLY) */
1036
1037 #if !defined(CONFIG_USER_ONLY)
1038
1039 static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
1040                              uint16_t section);
1041 static subpage_t *subpage_init(AddressSpace *as, hwaddr base);
1042
1043 static void *(*phys_mem_alloc)(size_t size, uint64_t *align) =
1044                                qemu_anon_ram_alloc;
1045
1046 /*
1047  * Set a custom physical guest memory alloator.
1048  * Accelerators with unusual needs may need this.  Hopefully, we can
1049  * get rid of it eventually.
1050  */
1051 void phys_mem_set_alloc(void *(*alloc)(size_t, uint64_t *align))
1052 {
1053     phys_mem_alloc = alloc;
1054 }
1055
1056 static uint16_t phys_section_add(PhysPageMap *map,
1057                                  MemoryRegionSection *section)
1058 {
1059     /* The physical section number is ORed with a page-aligned
1060      * pointer to produce the iotlb entries.  Thus it should
1061      * never overflow into the page-aligned value.
1062      */
1063     assert(map->sections_nb < TARGET_PAGE_SIZE);
1064
1065     if (map->sections_nb == map->sections_nb_alloc) {
1066         map->sections_nb_alloc = MAX(map->sections_nb_alloc * 2, 16);
1067         map->sections = g_renew(MemoryRegionSection, map->sections,
1068                                 map->sections_nb_alloc);
1069     }
1070     map->sections[map->sections_nb] = *section;
1071     memory_region_ref(section->mr);
1072     return map->sections_nb++;
1073 }
1074
1075 static void phys_section_destroy(MemoryRegion *mr)
1076 {
1077     bool have_sub_page = mr->subpage;
1078
1079     memory_region_unref(mr);
1080
1081     if (have_sub_page) {
1082         subpage_t *subpage = container_of(mr, subpage_t, iomem);
1083         object_unref(OBJECT(&subpage->iomem));
1084         g_free(subpage);
1085     }
1086 }
1087
1088 static void phys_sections_free(PhysPageMap *map)
1089 {
1090     while (map->sections_nb > 0) {
1091         MemoryRegionSection *section = &map->sections[--map->sections_nb];
1092         phys_section_destroy(section->mr);
1093     }
1094     g_free(map->sections);
1095     g_free(map->nodes);
1096 }
1097
1098 static void register_subpage(AddressSpaceDispatch *d, MemoryRegionSection *section)
1099 {
1100     subpage_t *subpage;
1101     hwaddr base = section->offset_within_address_space
1102         & TARGET_PAGE_MASK;
1103     MemoryRegionSection *existing = phys_page_find(d->phys_map, base,
1104                                                    d->map.nodes, d->map.sections);
1105     MemoryRegionSection subsection = {
1106         .offset_within_address_space = base,
1107         .size = int128_make64(TARGET_PAGE_SIZE),
1108     };
1109     hwaddr start, end;
1110
1111     assert(existing->mr->subpage || existing->mr == &io_mem_unassigned);
1112
1113     if (!(existing->mr->subpage)) {
1114         subpage = subpage_init(d->as, base);
1115         subsection.address_space = d->as;
1116         subsection.mr = &subpage->iomem;
1117         phys_page_set(d, base >> TARGET_PAGE_BITS, 1,
1118                       phys_section_add(&d->map, &subsection));
1119     } else {
1120         subpage = container_of(existing->mr, subpage_t, iomem);
1121     }
1122     start = section->offset_within_address_space & ~TARGET_PAGE_MASK;
1123     end = start + int128_get64(section->size) - 1;
1124     subpage_register(subpage, start, end,
1125                      phys_section_add(&d->map, section));
1126 }
1127
1128
1129 static void register_multipage(AddressSpaceDispatch *d,
1130                                MemoryRegionSection *section)
1131 {
1132     hwaddr start_addr = section->offset_within_address_space;
1133     uint16_t section_index = phys_section_add(&d->map, section);
1134     uint64_t num_pages = int128_get64(int128_rshift(section->size,
1135                                                     TARGET_PAGE_BITS));
1136
1137     assert(num_pages);
1138     phys_page_set(d, start_addr >> TARGET_PAGE_BITS, num_pages, section_index);
1139 }
1140
1141 static void mem_add(MemoryListener *listener, MemoryRegionSection *section)
1142 {
1143     AddressSpace *as = container_of(listener, AddressSpace, dispatch_listener);
1144     AddressSpaceDispatch *d = as->next_dispatch;
1145     MemoryRegionSection now = *section, remain = *section;
1146     Int128 page_size = int128_make64(TARGET_PAGE_SIZE);
1147
1148     if (now.offset_within_address_space & ~TARGET_PAGE_MASK) {
1149         uint64_t left = TARGET_PAGE_ALIGN(now.offset_within_address_space)
1150                        - now.offset_within_address_space;
1151
1152         now.size = int128_min(int128_make64(left), now.size);
1153         register_subpage(d, &now);
1154     } else {
1155         now.size = int128_zero();
1156     }
1157     while (int128_ne(remain.size, now.size)) {
1158         remain.size = int128_sub(remain.size, now.size);
1159         remain.offset_within_address_space += int128_get64(now.size);
1160         remain.offset_within_region += int128_get64(now.size);
1161         now = remain;
1162         if (int128_lt(remain.size, page_size)) {
1163             register_subpage(d, &now);
1164         } else if (remain.offset_within_address_space & ~TARGET_PAGE_MASK) {
1165             now.size = page_size;
1166             register_subpage(d, &now);
1167         } else {
1168             now.size = int128_and(now.size, int128_neg(page_size));
1169             register_multipage(d, &now);
1170         }
1171     }
1172 }
1173
1174 void qemu_flush_coalesced_mmio_buffer(void)
1175 {
1176     if (kvm_enabled())
1177         kvm_flush_coalesced_mmio_buffer();
1178 }
1179
1180 void qemu_mutex_lock_ramlist(void)
1181 {
1182     qemu_mutex_lock(&ram_list.mutex);
1183 }
1184
1185 void qemu_mutex_unlock_ramlist(void)
1186 {
1187     qemu_mutex_unlock(&ram_list.mutex);
1188 }
1189
1190 #ifdef __linux__
1191 static void *file_ram_alloc(RAMBlock *block,
1192                             ram_addr_t memory,
1193                             const char *path,
1194                             Error **errp)
1195 {
1196     bool unlink_on_error = false;
1197     char *filename;
1198     char *sanitized_name;
1199     char *c;
1200     void *area = MAP_FAILED;
1201     int fd = -1;
1202     int64_t page_size;
1203
1204     if (kvm_enabled() && !kvm_has_sync_mmu()) {
1205         error_setg(errp,
1206                    "host lacks kvm mmu notifiers, -mem-path unsupported");
1207         return NULL;
1208     }
1209
1210     for (;;) {
1211         fd = open(path, O_RDWR);
1212         if (fd >= 0) {
1213             /* @path names an existing file, use it */
1214             break;
1215         }
1216         if (errno == ENOENT) {
1217             /* @path names a file that doesn't exist, create it */
1218             fd = open(path, O_RDWR | O_CREAT | O_EXCL, 0644);
1219             if (fd >= 0) {
1220                 unlink_on_error = true;
1221                 break;
1222             }
1223         } else if (errno == EISDIR) {
1224             /* @path names a directory, create a file there */
1225             /* Make name safe to use with mkstemp by replacing '/' with '_'. */
1226             sanitized_name = g_strdup(memory_region_name(block->mr));
1227             for (c = sanitized_name; *c != '\0'; c++) {
1228                 if (*c == '/') {
1229                     *c = '_';
1230                 }
1231             }
1232
1233             filename = g_strdup_printf("%s/qemu_back_mem.%s.XXXXXX", path,
1234                                        sanitized_name);
1235             g_free(sanitized_name);
1236
1237             fd = mkstemp(filename);
1238             if (fd >= 0) {
1239                 unlink(filename);
1240                 g_free(filename);
1241                 break;
1242             }
1243             g_free(filename);
1244         }
1245         if (errno != EEXIST && errno != EINTR) {
1246             error_setg_errno(errp, errno,
1247                              "can't open backing store %s for guest RAM",
1248                              path);
1249             goto error;
1250         }
1251         /*
1252          * Try again on EINTR and EEXIST.  The latter happens when
1253          * something else creates the file between our two open().
1254          */
1255     }
1256
1257     page_size = qemu_fd_getpagesize(fd);
1258     block->mr->align = MAX(page_size, QEMU_VMALLOC_ALIGN);
1259
1260     if (memory < page_size) {
1261         error_setg(errp, "memory size 0x" RAM_ADDR_FMT " must be equal to "
1262                    "or larger than page size 0x%" PRIx64,
1263                    memory, page_size);
1264         goto error;
1265     }
1266
1267     memory = ROUND_UP(memory, page_size);
1268
1269     /*
1270      * ftruncate is not supported by hugetlbfs in older
1271      * hosts, so don't bother bailing out on errors.
1272      * If anything goes wrong with it under other filesystems,
1273      * mmap will fail.
1274      */
1275     if (ftruncate(fd, memory)) {
1276         perror("ftruncate");
1277     }
1278
1279     area = qemu_ram_mmap(fd, memory, block->mr->align,
1280                          block->flags & RAM_SHARED);
1281     if (area == MAP_FAILED) {
1282         error_setg_errno(errp, errno,
1283                          "unable to map backing store for guest RAM");
1284         goto error;
1285     }
1286
1287     if (mem_prealloc) {
1288         os_mem_prealloc(fd, area, memory, errp);
1289         if (errp && *errp) {
1290             goto error;
1291         }
1292     }
1293
1294     block->fd = fd;
1295     return area;
1296
1297 error:
1298     if (area != MAP_FAILED) {
1299         qemu_ram_munmap(area, memory);
1300     }
1301     if (unlink_on_error) {
1302         unlink(path);
1303     }
1304     if (fd != -1) {
1305         close(fd);
1306     }
1307     return NULL;
1308 }
1309 #endif
1310
1311 /* Called with the ramlist lock held.  */
1312 static ram_addr_t find_ram_offset(ram_addr_t size)
1313 {
1314     RAMBlock *block, *next_block;
1315     ram_addr_t offset = RAM_ADDR_MAX, mingap = RAM_ADDR_MAX;
1316
1317     assert(size != 0); /* it would hand out same offset multiple times */
1318
1319     if (QLIST_EMPTY_RCU(&ram_list.blocks)) {
1320         return 0;
1321     }
1322
1323     QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1324         ram_addr_t end, next = RAM_ADDR_MAX;
1325
1326         end = block->offset + block->max_length;
1327
1328         QLIST_FOREACH_RCU(next_block, &ram_list.blocks, next) {
1329             if (next_block->offset >= end) {
1330                 next = MIN(next, next_block->offset);
1331             }
1332         }
1333         if (next - end >= size && next - end < mingap) {
1334             offset = end;
1335             mingap = next - end;
1336         }
1337     }
1338
1339     if (offset == RAM_ADDR_MAX) {
1340         fprintf(stderr, "Failed to find gap of requested size: %" PRIu64 "\n",
1341                 (uint64_t)size);
1342         abort();
1343     }
1344
1345     return offset;
1346 }
1347
1348 ram_addr_t last_ram_offset(void)
1349 {
1350     RAMBlock *block;
1351     ram_addr_t last = 0;
1352
1353     rcu_read_lock();
1354     QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1355         last = MAX(last, block->offset + block->max_length);
1356     }
1357     rcu_read_unlock();
1358     return last;
1359 }
1360
1361 static void qemu_ram_setup_dump(void *addr, ram_addr_t size)
1362 {
1363     int ret;
1364
1365     /* Use MADV_DONTDUMP, if user doesn't want the guest memory in the core */
1366     if (!machine_dump_guest_core(current_machine)) {
1367         ret = qemu_madvise(addr, size, QEMU_MADV_DONTDUMP);
1368         if (ret) {
1369             perror("qemu_madvise");
1370             fprintf(stderr, "madvise doesn't support MADV_DONTDUMP, "
1371                             "but dump_guest_core=off specified\n");
1372         }
1373     }
1374 }
1375
1376 const char *qemu_ram_get_idstr(RAMBlock *rb)
1377 {
1378     return rb->idstr;
1379 }
1380
1381 /* Called with iothread lock held.  */
1382 void qemu_ram_set_idstr(RAMBlock *new_block, const char *name, DeviceState *dev)
1383 {
1384     RAMBlock *block;
1385
1386     assert(new_block);
1387     assert(!new_block->idstr[0]);
1388
1389     if (dev) {
1390         char *id = qdev_get_dev_path(dev);
1391         if (id) {
1392             snprintf(new_block->idstr, sizeof(new_block->idstr), "%s/", id);
1393             g_free(id);
1394         }
1395     }
1396     pstrcat(new_block->idstr, sizeof(new_block->idstr), name);
1397
1398     rcu_read_lock();
1399     QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1400         if (block != new_block &&
1401             !strcmp(block->idstr, new_block->idstr)) {
1402             fprintf(stderr, "RAMBlock \"%s\" already registered, abort!\n",
1403                     new_block->idstr);
1404             abort();
1405         }
1406     }
1407     rcu_read_unlock();
1408 }
1409
1410 /* Called with iothread lock held.  */
1411 void qemu_ram_unset_idstr(RAMBlock *block)
1412 {
1413     /* FIXME: arch_init.c assumes that this is not called throughout
1414      * migration.  Ignore the problem since hot-unplug during migration
1415      * does not work anyway.
1416      */
1417     if (block) {
1418         memset(block->idstr, 0, sizeof(block->idstr));
1419     }
1420 }
1421
1422 static int memory_try_enable_merging(void *addr, size_t len)
1423 {
1424     if (!machine_mem_merge(current_machine)) {
1425         /* disabled by the user */
1426         return 0;
1427     }
1428
1429     return qemu_madvise(addr, len, QEMU_MADV_MERGEABLE);
1430 }
1431
1432 /* Only legal before guest might have detected the memory size: e.g. on
1433  * incoming migration, or right after reset.
1434  *
1435  * As memory core doesn't know how is memory accessed, it is up to
1436  * resize callback to update device state and/or add assertions to detect
1437  * misuse, if necessary.
1438  */
1439 int qemu_ram_resize(RAMBlock *block, ram_addr_t newsize, Error **errp)
1440 {
1441     assert(block);
1442
1443     newsize = HOST_PAGE_ALIGN(newsize);
1444
1445     if (block->used_length == newsize) {
1446         return 0;
1447     }
1448
1449     if (!(block->flags & RAM_RESIZEABLE)) {
1450         error_setg_errno(errp, EINVAL,
1451                          "Length mismatch: %s: 0x" RAM_ADDR_FMT
1452                          " in != 0x" RAM_ADDR_FMT, block->idstr,
1453                          newsize, block->used_length);
1454         return -EINVAL;
1455     }
1456
1457     if (block->max_length < newsize) {
1458         error_setg_errno(errp, EINVAL,
1459                          "Length too large: %s: 0x" RAM_ADDR_FMT
1460                          " > 0x" RAM_ADDR_FMT, block->idstr,
1461                          newsize, block->max_length);
1462         return -EINVAL;
1463     }
1464
1465     cpu_physical_memory_clear_dirty_range(block->offset, block->used_length);
1466     block->used_length = newsize;
1467     cpu_physical_memory_set_dirty_range(block->offset, block->used_length,
1468                                         DIRTY_CLIENTS_ALL);
1469     memory_region_set_size(block->mr, newsize);
1470     if (block->resized) {
1471         block->resized(block->idstr, newsize, block->host);
1472     }
1473     return 0;
1474 }
1475
1476 /* Called with ram_list.mutex held */
1477 static void dirty_memory_extend(ram_addr_t old_ram_size,
1478                                 ram_addr_t new_ram_size)
1479 {
1480     ram_addr_t old_num_blocks = DIV_ROUND_UP(old_ram_size,
1481                                              DIRTY_MEMORY_BLOCK_SIZE);
1482     ram_addr_t new_num_blocks = DIV_ROUND_UP(new_ram_size,
1483                                              DIRTY_MEMORY_BLOCK_SIZE);
1484     int i;
1485
1486     /* Only need to extend if block count increased */
1487     if (new_num_blocks <= old_num_blocks) {
1488         return;
1489     }
1490
1491     for (i = 0; i < DIRTY_MEMORY_NUM; i++) {
1492         DirtyMemoryBlocks *old_blocks;
1493         DirtyMemoryBlocks *new_blocks;
1494         int j;
1495
1496         old_blocks = atomic_rcu_read(&ram_list.dirty_memory[i]);
1497         new_blocks = g_malloc(sizeof(*new_blocks) +
1498                               sizeof(new_blocks->blocks[0]) * new_num_blocks);
1499
1500         if (old_num_blocks) {
1501             memcpy(new_blocks->blocks, old_blocks->blocks,
1502                    old_num_blocks * sizeof(old_blocks->blocks[0]));
1503         }
1504
1505         for (j = old_num_blocks; j < new_num_blocks; j++) {
1506             new_blocks->blocks[j] = bitmap_new(DIRTY_MEMORY_BLOCK_SIZE);
1507         }
1508
1509         atomic_rcu_set(&ram_list.dirty_memory[i], new_blocks);
1510
1511         if (old_blocks) {
1512             g_free_rcu(old_blocks, rcu);
1513         }
1514     }
1515 }
1516
1517 static void ram_block_add(RAMBlock *new_block, Error **errp)
1518 {
1519     RAMBlock *block;
1520     RAMBlock *last_block = NULL;
1521     ram_addr_t old_ram_size, new_ram_size;
1522     Error *err = NULL;
1523
1524     old_ram_size = last_ram_offset() >> TARGET_PAGE_BITS;
1525
1526     qemu_mutex_lock_ramlist();
1527     new_block->offset = find_ram_offset(new_block->max_length);
1528
1529     if (!new_block->host) {
1530         if (xen_enabled()) {
1531             xen_ram_alloc(new_block->offset, new_block->max_length,
1532                           new_block->mr, &err);
1533             if (err) {
1534                 error_propagate(errp, err);
1535                 qemu_mutex_unlock_ramlist();
1536                 return;
1537             }
1538         } else {
1539             new_block->host = phys_mem_alloc(new_block->max_length,
1540                                              &new_block->mr->align);
1541             if (!new_block->host) {
1542                 error_setg_errno(errp, errno,
1543                                  "cannot set up guest memory '%s'",
1544                                  memory_region_name(new_block->mr));
1545                 qemu_mutex_unlock_ramlist();
1546                 return;
1547             }
1548             memory_try_enable_merging(new_block->host, new_block->max_length);
1549         }
1550     }
1551
1552     new_ram_size = MAX(old_ram_size,
1553               (new_block->offset + new_block->max_length) >> TARGET_PAGE_BITS);
1554     if (new_ram_size > old_ram_size) {
1555         migration_bitmap_extend(old_ram_size, new_ram_size);
1556         dirty_memory_extend(old_ram_size, new_ram_size);
1557     }
1558     /* Keep the list sorted from biggest to smallest block.  Unlike QTAILQ,
1559      * QLIST (which has an RCU-friendly variant) does not have insertion at
1560      * tail, so save the last element in last_block.
1561      */
1562     QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1563         last_block = block;
1564         if (block->max_length < new_block->max_length) {
1565             break;
1566         }
1567     }
1568     if (block) {
1569         QLIST_INSERT_BEFORE_RCU(block, new_block, next);
1570     } else if (last_block) {
1571         QLIST_INSERT_AFTER_RCU(last_block, new_block, next);
1572     } else { /* list is empty */
1573         QLIST_INSERT_HEAD_RCU(&ram_list.blocks, new_block, next);
1574     }
1575     ram_list.mru_block = NULL;
1576
1577     /* Write list before version */
1578     smp_wmb();
1579     ram_list.version++;
1580     qemu_mutex_unlock_ramlist();
1581
1582     cpu_physical_memory_set_dirty_range(new_block->offset,
1583                                         new_block->used_length,
1584                                         DIRTY_CLIENTS_ALL);
1585
1586     if (new_block->host) {
1587         qemu_ram_setup_dump(new_block->host, new_block->max_length);
1588         qemu_madvise(new_block->host, new_block->max_length, QEMU_MADV_HUGEPAGE);
1589         /* MADV_DONTFORK is also needed by KVM in absence of synchronous MMU */
1590         qemu_madvise(new_block->host, new_block->max_length, QEMU_MADV_DONTFORK);
1591     }
1592 }
1593
1594 #ifdef __linux__
1595 RAMBlock *qemu_ram_alloc_from_file(ram_addr_t size, MemoryRegion *mr,
1596                                    bool share, const char *mem_path,
1597                                    Error **errp)
1598 {
1599     RAMBlock *new_block;
1600     Error *local_err = NULL;
1601
1602     if (xen_enabled()) {
1603         error_setg(errp, "-mem-path not supported with Xen");
1604         return NULL;
1605     }
1606
1607     if (phys_mem_alloc != qemu_anon_ram_alloc) {
1608         /*
1609          * file_ram_alloc() needs to allocate just like
1610          * phys_mem_alloc, but we haven't bothered to provide
1611          * a hook there.
1612          */
1613         error_setg(errp,
1614                    "-mem-path not supported with this accelerator");
1615         return NULL;
1616     }
1617
1618     size = HOST_PAGE_ALIGN(size);
1619     new_block = g_malloc0(sizeof(*new_block));
1620     new_block->mr = mr;
1621     new_block->used_length = size;
1622     new_block->max_length = size;
1623     new_block->flags = share ? RAM_SHARED : 0;
1624     new_block->host = file_ram_alloc(new_block, size,
1625                                      mem_path, errp);
1626     if (!new_block->host) {
1627         g_free(new_block);
1628         return NULL;
1629     }
1630
1631     ram_block_add(new_block, &local_err);
1632     if (local_err) {
1633         g_free(new_block);
1634         error_propagate(errp, local_err);
1635         return NULL;
1636     }
1637     return new_block;
1638 }
1639 #endif
1640
1641 static
1642 RAMBlock *qemu_ram_alloc_internal(ram_addr_t size, ram_addr_t max_size,
1643                                   void (*resized)(const char*,
1644                                                   uint64_t length,
1645                                                   void *host),
1646                                   void *host, bool resizeable,
1647                                   MemoryRegion *mr, Error **errp)
1648 {
1649     RAMBlock *new_block;
1650     Error *local_err = NULL;
1651
1652     size = HOST_PAGE_ALIGN(size);
1653     max_size = HOST_PAGE_ALIGN(max_size);
1654     new_block = g_malloc0(sizeof(*new_block));
1655     new_block->mr = mr;
1656     new_block->resized = resized;
1657     new_block->used_length = size;
1658     new_block->max_length = max_size;
1659     assert(max_size >= size);
1660     new_block->fd = -1;
1661     new_block->host = host;
1662     if (host) {
1663         new_block->flags |= RAM_PREALLOC;
1664     }
1665     if (resizeable) {
1666         new_block->flags |= RAM_RESIZEABLE;
1667     }
1668     ram_block_add(new_block, &local_err);
1669     if (local_err) {
1670         g_free(new_block);
1671         error_propagate(errp, local_err);
1672         return NULL;
1673     }
1674     return new_block;
1675 }
1676
1677 RAMBlock *qemu_ram_alloc_from_ptr(ram_addr_t size, void *host,
1678                                    MemoryRegion *mr, Error **errp)
1679 {
1680     return qemu_ram_alloc_internal(size, size, NULL, host, false, mr, errp);
1681 }
1682
1683 RAMBlock *qemu_ram_alloc(ram_addr_t size, MemoryRegion *mr, Error **errp)
1684 {
1685     return qemu_ram_alloc_internal(size, size, NULL, NULL, false, mr, errp);
1686 }
1687
1688 RAMBlock *qemu_ram_alloc_resizeable(ram_addr_t size, ram_addr_t maxsz,
1689                                      void (*resized)(const char*,
1690                                                      uint64_t length,
1691                                                      void *host),
1692                                      MemoryRegion *mr, Error **errp)
1693 {
1694     return qemu_ram_alloc_internal(size, maxsz, resized, NULL, true, mr, errp);
1695 }
1696
1697 static void reclaim_ramblock(RAMBlock *block)
1698 {
1699     if (block->flags & RAM_PREALLOC) {
1700         ;
1701     } else if (xen_enabled()) {
1702         xen_invalidate_map_cache_entry(block->host);
1703 #ifndef _WIN32
1704     } else if (block->fd >= 0) {
1705         qemu_ram_munmap(block->host, block->max_length);
1706         close(block->fd);
1707 #endif
1708     } else {
1709         qemu_anon_ram_free(block->host, block->max_length);
1710     }
1711     g_free(block);
1712 }
1713
1714 void qemu_ram_free(RAMBlock *block)
1715 {
1716     if (!block) {
1717         return;
1718     }
1719
1720     qemu_mutex_lock_ramlist();
1721     QLIST_REMOVE_RCU(block, next);
1722     ram_list.mru_block = NULL;
1723     /* Write list before version */
1724     smp_wmb();
1725     ram_list.version++;
1726     call_rcu(block, reclaim_ramblock, rcu);
1727     qemu_mutex_unlock_ramlist();
1728 }
1729
1730 #ifndef _WIN32
1731 void qemu_ram_remap(ram_addr_t addr, ram_addr_t length)
1732 {
1733     RAMBlock *block;
1734     ram_addr_t offset;
1735     int flags;
1736     void *area, *vaddr;
1737
1738     QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1739         offset = addr - block->offset;
1740         if (offset < block->max_length) {
1741             vaddr = ramblock_ptr(block, offset);
1742             if (block->flags & RAM_PREALLOC) {
1743                 ;
1744             } else if (xen_enabled()) {
1745                 abort();
1746             } else {
1747                 flags = MAP_FIXED;
1748                 if (block->fd >= 0) {
1749                     flags |= (block->flags & RAM_SHARED ?
1750                               MAP_SHARED : MAP_PRIVATE);
1751                     area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
1752                                 flags, block->fd, offset);
1753                 } else {
1754                     /*
1755                      * Remap needs to match alloc.  Accelerators that
1756                      * set phys_mem_alloc never remap.  If they did,
1757                      * we'd need a remap hook here.
1758                      */
1759                     assert(phys_mem_alloc == qemu_anon_ram_alloc);
1760
1761                     flags |= MAP_PRIVATE | MAP_ANONYMOUS;
1762                     area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
1763                                 flags, -1, 0);
1764                 }
1765                 if (area != vaddr) {
1766                     fprintf(stderr, "Could not remap addr: "
1767                             RAM_ADDR_FMT "@" RAM_ADDR_FMT "\n",
1768                             length, addr);
1769                     exit(1);
1770                 }
1771                 memory_try_enable_merging(vaddr, length);
1772                 qemu_ram_setup_dump(vaddr, length);
1773             }
1774         }
1775     }
1776 }
1777 #endif /* !_WIN32 */
1778
1779 /* Return a host pointer to ram allocated with qemu_ram_alloc.
1780  * This should not be used for general purpose DMA.  Use address_space_map
1781  * or address_space_rw instead. For local memory (e.g. video ram) that the
1782  * device owns, use memory_region_get_ram_ptr.
1783  *
1784  * Called within RCU critical section.
1785  */
1786 void *qemu_map_ram_ptr(RAMBlock *ram_block, ram_addr_t addr)
1787 {
1788     RAMBlock *block = ram_block;
1789
1790     if (block == NULL) {
1791         block = qemu_get_ram_block(addr);
1792         addr -= block->offset;
1793     }
1794
1795     if (xen_enabled() && block->host == NULL) {
1796         /* We need to check if the requested address is in the RAM
1797          * because we don't want to map the entire memory in QEMU.
1798          * In that case just map until the end of the page.
1799          */
1800         if (block->offset == 0) {
1801             return xen_map_cache(addr, 0, 0);
1802         }
1803
1804         block->host = xen_map_cache(block->offset, block->max_length, 1);
1805     }
1806     return ramblock_ptr(block, addr);
1807 }
1808
1809 /* Return a host pointer to guest's ram. Similar to qemu_map_ram_ptr
1810  * but takes a size argument.
1811  *
1812  * Called within RCU critical section.
1813  */
1814 static void *qemu_ram_ptr_length(RAMBlock *ram_block, ram_addr_t addr,
1815                                  hwaddr *size)
1816 {
1817     RAMBlock *block = ram_block;
1818     if (*size == 0) {
1819         return NULL;
1820     }
1821
1822     if (block == NULL) {
1823         block = qemu_get_ram_block(addr);
1824         addr -= block->offset;
1825     }
1826     *size = MIN(*size, block->max_length - addr);
1827
1828     if (xen_enabled() && block->host == NULL) {
1829         /* We need to check if the requested address is in the RAM
1830          * because we don't want to map the entire memory in QEMU.
1831          * In that case just map the requested area.
1832          */
1833         if (block->offset == 0) {
1834             return xen_map_cache(addr, *size, 1);
1835         }
1836
1837         block->host = xen_map_cache(block->offset, block->max_length, 1);
1838     }
1839
1840     return ramblock_ptr(block, addr);
1841 }
1842
1843 /*
1844  * Translates a host ptr back to a RAMBlock, a ram_addr and an offset
1845  * in that RAMBlock.
1846  *
1847  * ptr: Host pointer to look up
1848  * round_offset: If true round the result offset down to a page boundary
1849  * *ram_addr: set to result ram_addr
1850  * *offset: set to result offset within the RAMBlock
1851  *
1852  * Returns: RAMBlock (or NULL if not found)
1853  *
1854  * By the time this function returns, the returned pointer is not protected
1855  * by RCU anymore.  If the caller is not within an RCU critical section and
1856  * does not hold the iothread lock, it must have other means of protecting the
1857  * pointer, such as a reference to the region that includes the incoming
1858  * ram_addr_t.
1859  */
1860 RAMBlock *qemu_ram_block_from_host(void *ptr, bool round_offset,
1861                                    ram_addr_t *offset)
1862 {
1863     RAMBlock *block;
1864     uint8_t *host = ptr;
1865
1866     if (xen_enabled()) {
1867         ram_addr_t ram_addr;
1868         rcu_read_lock();
1869         ram_addr = xen_ram_addr_from_mapcache(ptr);
1870         block = qemu_get_ram_block(ram_addr);
1871         if (block) {
1872             *offset = ram_addr - block->offset;
1873         }
1874         rcu_read_unlock();
1875         return block;
1876     }
1877
1878     rcu_read_lock();
1879     block = atomic_rcu_read(&ram_list.mru_block);
1880     if (block && block->host && host - block->host < block->max_length) {
1881         goto found;
1882     }
1883
1884     QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1885         /* This case append when the block is not mapped. */
1886         if (block->host == NULL) {
1887             continue;
1888         }
1889         if (host - block->host < block->max_length) {
1890             goto found;
1891         }
1892     }
1893
1894     rcu_read_unlock();
1895     return NULL;
1896
1897 found:
1898     *offset = (host - block->host);
1899     if (round_offset) {
1900         *offset &= TARGET_PAGE_MASK;
1901     }
1902     rcu_read_unlock();
1903     return block;
1904 }
1905
1906 /*
1907  * Finds the named RAMBlock
1908  *
1909  * name: The name of RAMBlock to find
1910  *
1911  * Returns: RAMBlock (or NULL if not found)
1912  */
1913 RAMBlock *qemu_ram_block_by_name(const char *name)
1914 {
1915     RAMBlock *block;
1916
1917     QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1918         if (!strcmp(name, block->idstr)) {
1919             return block;
1920         }
1921     }
1922
1923     return NULL;
1924 }
1925
1926 /* Some of the softmmu routines need to translate from a host pointer
1927    (typically a TLB entry) back to a ram offset.  */
1928 ram_addr_t qemu_ram_addr_from_host(void *ptr)
1929 {
1930     RAMBlock *block;
1931     ram_addr_t offset;
1932
1933     block = qemu_ram_block_from_host(ptr, false, &offset);
1934     if (!block) {
1935         return RAM_ADDR_INVALID;
1936     }
1937
1938     return block->offset + offset;
1939 }
1940
1941 /* Called within RCU critical section.  */
1942 static void notdirty_mem_write(void *opaque, hwaddr ram_addr,
1943                                uint64_t val, unsigned size)
1944 {
1945     if (!cpu_physical_memory_get_dirty_flag(ram_addr, DIRTY_MEMORY_CODE)) {
1946         tb_invalidate_phys_page_fast(ram_addr, size);
1947     }
1948     switch (size) {
1949     case 1:
1950         stb_p(qemu_map_ram_ptr(NULL, ram_addr), val);
1951         break;
1952     case 2:
1953         stw_p(qemu_map_ram_ptr(NULL, ram_addr), val);
1954         break;
1955     case 4:
1956         stl_p(qemu_map_ram_ptr(NULL, ram_addr), val);
1957         break;
1958     default:
1959         abort();
1960     }
1961     /* Set both VGA and migration bits for simplicity and to remove
1962      * the notdirty callback faster.
1963      */
1964     cpu_physical_memory_set_dirty_range(ram_addr, size,
1965                                         DIRTY_CLIENTS_NOCODE);
1966     /* we remove the notdirty callback only if the code has been
1967        flushed */
1968     if (!cpu_physical_memory_is_clean(ram_addr)) {
1969         tlb_set_dirty(current_cpu, current_cpu->mem_io_vaddr);
1970     }
1971 }
1972
1973 static bool notdirty_mem_accepts(void *opaque, hwaddr addr,
1974                                  unsigned size, bool is_write)
1975 {
1976     return is_write;
1977 }
1978
1979 static const MemoryRegionOps notdirty_mem_ops = {
1980     .write = notdirty_mem_write,
1981     .valid.accepts = notdirty_mem_accepts,
1982     .endianness = DEVICE_NATIVE_ENDIAN,
1983 };
1984
1985 /* Generate a debug exception if a watchpoint has been hit.  */
1986 static void check_watchpoint(int offset, int len, MemTxAttrs attrs, int flags)
1987 {
1988     CPUState *cpu = current_cpu;
1989     CPUClass *cc = CPU_GET_CLASS(cpu);
1990     CPUArchState *env = cpu->env_ptr;
1991     target_ulong pc, cs_base;
1992     target_ulong vaddr;
1993     CPUWatchpoint *wp;
1994     uint32_t cpu_flags;
1995
1996     if (cpu->watchpoint_hit) {
1997         /* We re-entered the check after replacing the TB. Now raise
1998          * the debug interrupt so that is will trigger after the
1999          * current instruction. */
2000         cpu_interrupt(cpu, CPU_INTERRUPT_DEBUG);
2001         return;
2002     }
2003     vaddr = (cpu->mem_io_vaddr & TARGET_PAGE_MASK) + offset;
2004     QTAILQ_FOREACH(wp, &cpu->watchpoints, entry) {
2005         if (cpu_watchpoint_address_matches(wp, vaddr, len)
2006             && (wp->flags & flags)) {
2007             if (flags == BP_MEM_READ) {
2008                 wp->flags |= BP_WATCHPOINT_HIT_READ;
2009             } else {
2010                 wp->flags |= BP_WATCHPOINT_HIT_WRITE;
2011             }
2012             wp->hitaddr = vaddr;
2013             wp->hitattrs = attrs;
2014             if (!cpu->watchpoint_hit) {
2015                 if (wp->flags & BP_CPU &&
2016                     !cc->debug_check_watchpoint(cpu, wp)) {
2017                     wp->flags &= ~BP_WATCHPOINT_HIT;
2018                     continue;
2019                 }
2020                 cpu->watchpoint_hit = wp;
2021                 tb_check_watchpoint(cpu);
2022                 if (wp->flags & BP_STOP_BEFORE_ACCESS) {
2023                     cpu->exception_index = EXCP_DEBUG;
2024                     cpu_loop_exit(cpu);
2025                 } else {
2026                     cpu_get_tb_cpu_state(env, &pc, &cs_base, &cpu_flags);
2027                     tb_gen_code(cpu, pc, cs_base, cpu_flags, 1);
2028                     cpu_loop_exit_noexc(cpu);
2029                 }
2030             }
2031         } else {
2032             wp->flags &= ~BP_WATCHPOINT_HIT;
2033         }
2034     }
2035 }
2036
2037 /* Watchpoint access routines.  Watchpoints are inserted using TLB tricks,
2038    so these check for a hit then pass through to the normal out-of-line
2039    phys routines.  */
2040 static MemTxResult watch_mem_read(void *opaque, hwaddr addr, uint64_t *pdata,
2041                                   unsigned size, MemTxAttrs attrs)
2042 {
2043     MemTxResult res;
2044     uint64_t data;
2045     int asidx = cpu_asidx_from_attrs(current_cpu, attrs);
2046     AddressSpace *as = current_cpu->cpu_ases[asidx].as;
2047
2048     check_watchpoint(addr & ~TARGET_PAGE_MASK, size, attrs, BP_MEM_READ);
2049     switch (size) {
2050     case 1:
2051         data = address_space_ldub(as, addr, attrs, &res);
2052         break;
2053     case 2:
2054         data = address_space_lduw(as, addr, attrs, &res);
2055         break;
2056     case 4:
2057         data = address_space_ldl(as, addr, attrs, &res);
2058         break;
2059     default: abort();
2060     }
2061     *pdata = data;
2062     return res;
2063 }
2064
2065 static MemTxResult watch_mem_write(void *opaque, hwaddr addr,
2066                                    uint64_t val, unsigned size,
2067                                    MemTxAttrs attrs)
2068 {
2069     MemTxResult res;
2070     int asidx = cpu_asidx_from_attrs(current_cpu, attrs);
2071     AddressSpace *as = current_cpu->cpu_ases[asidx].as;
2072
2073     check_watchpoint(addr & ~TARGET_PAGE_MASK, size, attrs, BP_MEM_WRITE);
2074     switch (size) {
2075     case 1:
2076         address_space_stb(as, addr, val, attrs, &res);
2077         break;
2078     case 2:
2079         address_space_stw(as, addr, val, attrs, &res);
2080         break;
2081     case 4:
2082         address_space_stl(as, addr, val, attrs, &res);
2083         break;
2084     default: abort();
2085     }
2086     return res;
2087 }
2088
2089 static const MemoryRegionOps watch_mem_ops = {
2090     .read_with_attrs = watch_mem_read,
2091     .write_with_attrs = watch_mem_write,
2092     .endianness = DEVICE_NATIVE_ENDIAN,
2093 };
2094
2095 static MemTxResult subpage_read(void *opaque, hwaddr addr, uint64_t *data,
2096                                 unsigned len, MemTxAttrs attrs)
2097 {
2098     subpage_t *subpage = opaque;
2099     uint8_t buf[8];
2100     MemTxResult res;
2101
2102 #if defined(DEBUG_SUBPAGE)
2103     printf("%s: subpage %p len %u addr " TARGET_FMT_plx "\n", __func__,
2104            subpage, len, addr);
2105 #endif
2106     res = address_space_read(subpage->as, addr + subpage->base,
2107                              attrs, buf, len);
2108     if (res) {
2109         return res;
2110     }
2111     switch (len) {
2112     case 1:
2113         *data = ldub_p(buf);
2114         return MEMTX_OK;
2115     case 2:
2116         *data = lduw_p(buf);
2117         return MEMTX_OK;
2118     case 4:
2119         *data = ldl_p(buf);
2120         return MEMTX_OK;
2121     case 8:
2122         *data = ldq_p(buf);
2123         return MEMTX_OK;
2124     default:
2125         abort();
2126     }
2127 }
2128
2129 static MemTxResult subpage_write(void *opaque, hwaddr addr,
2130                                  uint64_t value, unsigned len, MemTxAttrs attrs)
2131 {
2132     subpage_t *subpage = opaque;
2133     uint8_t buf[8];
2134
2135 #if defined(DEBUG_SUBPAGE)
2136     printf("%s: subpage %p len %u addr " TARGET_FMT_plx
2137            " value %"PRIx64"\n",
2138            __func__, subpage, len, addr, value);
2139 #endif
2140     switch (len) {
2141     case 1:
2142         stb_p(buf, value);
2143         break;
2144     case 2:
2145         stw_p(buf, value);
2146         break;
2147     case 4:
2148         stl_p(buf, value);
2149         break;
2150     case 8:
2151         stq_p(buf, value);
2152         break;
2153     default:
2154         abort();
2155     }
2156     return address_space_write(subpage->as, addr + subpage->base,
2157                                attrs, buf, len);
2158 }
2159
2160 static bool subpage_accepts(void *opaque, hwaddr addr,
2161                             unsigned len, bool is_write)
2162 {
2163     subpage_t *subpage = opaque;
2164 #if defined(DEBUG_SUBPAGE)
2165     printf("%s: subpage %p %c len %u addr " TARGET_FMT_plx "\n",
2166            __func__, subpage, is_write ? 'w' : 'r', len, addr);
2167 #endif
2168
2169     return address_space_access_valid(subpage->as, addr + subpage->base,
2170                                       len, is_write);
2171 }
2172
2173 static const MemoryRegionOps subpage_ops = {
2174     .read_with_attrs = subpage_read,
2175     .write_with_attrs = subpage_write,
2176     .impl.min_access_size = 1,
2177     .impl.max_access_size = 8,
2178     .valid.min_access_size = 1,
2179     .valid.max_access_size = 8,
2180     .valid.accepts = subpage_accepts,
2181     .endianness = DEVICE_NATIVE_ENDIAN,
2182 };
2183
2184 static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
2185                              uint16_t section)
2186 {
2187     int idx, eidx;
2188
2189     if (start >= TARGET_PAGE_SIZE || end >= TARGET_PAGE_SIZE)
2190         return -1;
2191     idx = SUBPAGE_IDX(start);
2192     eidx = SUBPAGE_IDX(end);
2193 #if defined(DEBUG_SUBPAGE)
2194     printf("%s: %p start %08x end %08x idx %08x eidx %08x section %d\n",
2195            __func__, mmio, start, end, idx, eidx, section);
2196 #endif
2197     for (; idx <= eidx; idx++) {
2198         mmio->sub_section[idx] = section;
2199     }
2200
2201     return 0;
2202 }
2203
2204 static subpage_t *subpage_init(AddressSpace *as, hwaddr base)
2205 {
2206     subpage_t *mmio;
2207
2208     mmio = g_malloc0(sizeof(subpage_t));
2209
2210     mmio->as = as;
2211     mmio->base = base;
2212     memory_region_init_io(&mmio->iomem, NULL, &subpage_ops, mmio,
2213                           NULL, TARGET_PAGE_SIZE);
2214     mmio->iomem.subpage = true;
2215 #if defined(DEBUG_SUBPAGE)
2216     printf("%s: %p base " TARGET_FMT_plx " len %08x\n", __func__,
2217            mmio, base, TARGET_PAGE_SIZE);
2218 #endif
2219     subpage_register(mmio, 0, TARGET_PAGE_SIZE-1, PHYS_SECTION_UNASSIGNED);
2220
2221     return mmio;
2222 }
2223
2224 static uint16_t dummy_section(PhysPageMap *map, AddressSpace *as,
2225                               MemoryRegion *mr)
2226 {
2227     assert(as);
2228     MemoryRegionSection section = {
2229         .address_space = as,
2230         .mr = mr,
2231         .offset_within_address_space = 0,
2232         .offset_within_region = 0,
2233         .size = int128_2_64(),
2234     };
2235
2236     return phys_section_add(map, &section);
2237 }
2238
2239 MemoryRegion *iotlb_to_region(CPUState *cpu, hwaddr index, MemTxAttrs attrs)
2240 {
2241     int asidx = cpu_asidx_from_attrs(cpu, attrs);
2242     CPUAddressSpace *cpuas = &cpu->cpu_ases[asidx];
2243     AddressSpaceDispatch *d = atomic_rcu_read(&cpuas->memory_dispatch);
2244     MemoryRegionSection *sections = d->map.sections;
2245
2246     return sections[index & ~TARGET_PAGE_MASK].mr;
2247 }
2248
2249 static void io_mem_init(void)
2250 {
2251     memory_region_init_io(&io_mem_rom, NULL, &unassigned_mem_ops, NULL, NULL, UINT64_MAX);
2252     memory_region_init_io(&io_mem_unassigned, NULL, &unassigned_mem_ops, NULL,
2253                           NULL, UINT64_MAX);
2254     memory_region_init_io(&io_mem_notdirty, NULL, &notdirty_mem_ops, NULL,
2255                           NULL, UINT64_MAX);
2256     memory_region_init_io(&io_mem_watch, NULL, &watch_mem_ops, NULL,
2257                           NULL, UINT64_MAX);
2258 }
2259
2260 static void mem_begin(MemoryListener *listener)
2261 {
2262     AddressSpace *as = container_of(listener, AddressSpace, dispatch_listener);
2263     AddressSpaceDispatch *d = g_new0(AddressSpaceDispatch, 1);
2264     uint16_t n;
2265
2266     n = dummy_section(&d->map, as, &io_mem_unassigned);
2267     assert(n == PHYS_SECTION_UNASSIGNED);
2268     n = dummy_section(&d->map, as, &io_mem_notdirty);
2269     assert(n == PHYS_SECTION_NOTDIRTY);
2270     n = dummy_section(&d->map, as, &io_mem_rom);
2271     assert(n == PHYS_SECTION_ROM);
2272     n = dummy_section(&d->map, as, &io_mem_watch);
2273     assert(n == PHYS_SECTION_WATCH);
2274
2275     d->phys_map  = (PhysPageEntry) { .ptr = PHYS_MAP_NODE_NIL, .skip = 1 };
2276     d->as = as;
2277     as->next_dispatch = d;
2278 }
2279
2280 static void address_space_dispatch_free(AddressSpaceDispatch *d)
2281 {
2282     phys_sections_free(&d->map);
2283     g_free(d);
2284 }
2285
2286 static void mem_commit(MemoryListener *listener)
2287 {
2288     AddressSpace *as = container_of(listener, AddressSpace, dispatch_listener);
2289     AddressSpaceDispatch *cur = as->dispatch;
2290     AddressSpaceDispatch *next = as->next_dispatch;
2291
2292     phys_page_compact_all(next, next->map.nodes_nb);
2293
2294     atomic_rcu_set(&as->dispatch, next);
2295     if (cur) {
2296         call_rcu(cur, address_space_dispatch_free, rcu);
2297     }
2298 }
2299
2300 static void tcg_commit(MemoryListener *listener)
2301 {
2302     CPUAddressSpace *cpuas;
2303     AddressSpaceDispatch *d;
2304
2305     /* since each CPU stores ram addresses in its TLB cache, we must
2306        reset the modified entries */
2307     cpuas = container_of(listener, CPUAddressSpace, tcg_as_listener);
2308     cpu_reloading_memory_map();
2309     /* The CPU and TLB are protected by the iothread lock.
2310      * We reload the dispatch pointer now because cpu_reloading_memory_map()
2311      * may have split the RCU critical section.
2312      */
2313     d = atomic_rcu_read(&cpuas->as->dispatch);
2314     cpuas->memory_dispatch = d;
2315     tlb_flush(cpuas->cpu, 1);
2316 }
2317
2318 void address_space_init_dispatch(AddressSpace *as)
2319 {
2320     as->dispatch = NULL;
2321     as->dispatch_listener = (MemoryListener) {
2322         .begin = mem_begin,
2323         .commit = mem_commit,
2324         .region_add = mem_add,
2325         .region_nop = mem_add,
2326         .priority = 0,
2327     };
2328     memory_listener_register(&as->dispatch_listener, as);
2329 }
2330
2331 void address_space_unregister(AddressSpace *as)
2332 {
2333     memory_listener_unregister(&as->dispatch_listener);
2334 }
2335
2336 void address_space_destroy_dispatch(AddressSpace *as)
2337 {
2338     AddressSpaceDispatch *d = as->dispatch;
2339
2340     atomic_rcu_set(&as->dispatch, NULL);
2341     if (d) {
2342         call_rcu(d, address_space_dispatch_free, rcu);
2343     }
2344 }
2345
2346 static void memory_map_init(void)
2347 {
2348     system_memory = g_malloc(sizeof(*system_memory));
2349
2350     memory_region_init(system_memory, NULL, "system", UINT64_MAX);
2351     address_space_init(&address_space_memory, system_memory, "memory");
2352
2353     system_io = g_malloc(sizeof(*system_io));
2354     memory_region_init_io(system_io, NULL, &unassigned_io_ops, NULL, "io",
2355                           65536);
2356     address_space_init(&address_space_io, system_io, "I/O");
2357 }
2358
2359 MemoryRegion *get_system_memory(void)
2360 {
2361     return system_memory;
2362 }
2363
2364 MemoryRegion *get_system_io(void)
2365 {
2366     return system_io;
2367 }
2368
2369 #endif /* !defined(CONFIG_USER_ONLY) */
2370
2371 /* physical memory access (slow version, mainly for debug) */
2372 #if defined(CONFIG_USER_ONLY)
2373 int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
2374                         uint8_t *buf, int len, int is_write)
2375 {
2376     int l, flags;
2377     target_ulong page;
2378     void * p;
2379
2380     while (len > 0) {
2381         page = addr & TARGET_PAGE_MASK;
2382         l = (page + TARGET_PAGE_SIZE) - addr;
2383         if (l > len)
2384             l = len;
2385         flags = page_get_flags(page);
2386         if (!(flags & PAGE_VALID))
2387             return -1;
2388         if (is_write) {
2389             if (!(flags & PAGE_WRITE))
2390                 return -1;
2391             /* XXX: this code should not depend on lock_user */
2392             if (!(p = lock_user(VERIFY_WRITE, addr, l, 0)))
2393                 return -1;
2394             memcpy(p, buf, l);
2395             unlock_user(p, addr, l);
2396         } else {
2397             if (!(flags & PAGE_READ))
2398                 return -1;
2399             /* XXX: this code should not depend on lock_user */
2400             if (!(p = lock_user(VERIFY_READ, addr, l, 1)))
2401                 return -1;
2402             memcpy(buf, p, l);
2403             unlock_user(p, addr, 0);
2404         }
2405         len -= l;
2406         buf += l;
2407         addr += l;
2408     }
2409     return 0;
2410 }
2411
2412 #else
2413
2414 static void invalidate_and_set_dirty(MemoryRegion *mr, hwaddr addr,
2415                                      hwaddr length)
2416 {
2417     uint8_t dirty_log_mask = memory_region_get_dirty_log_mask(mr);
2418     addr += memory_region_get_ram_addr(mr);
2419
2420     /* No early return if dirty_log_mask is or becomes 0, because
2421      * cpu_physical_memory_set_dirty_range will still call
2422      * xen_modified_memory.
2423      */
2424     if (dirty_log_mask) {
2425         dirty_log_mask =
2426             cpu_physical_memory_range_includes_clean(addr, length, dirty_log_mask);
2427     }
2428     if (dirty_log_mask & (1 << DIRTY_MEMORY_CODE)) {
2429         tb_invalidate_phys_range(addr, addr + length);
2430         dirty_log_mask &= ~(1 << DIRTY_MEMORY_CODE);
2431     }
2432     cpu_physical_memory_set_dirty_range(addr, length, dirty_log_mask);
2433 }
2434
2435 static int memory_access_size(MemoryRegion *mr, unsigned l, hwaddr addr)
2436 {
2437     unsigned access_size_max = mr->ops->valid.max_access_size;
2438
2439     /* Regions are assumed to support 1-4 byte accesses unless
2440        otherwise specified.  */
2441     if (access_size_max == 0) {
2442         access_size_max = 4;
2443     }
2444
2445     /* Bound the maximum access by the alignment of the address.  */
2446     if (!mr->ops->impl.unaligned) {
2447         unsigned align_size_max = addr & -addr;
2448         if (align_size_max != 0 && align_size_max < access_size_max) {
2449             access_size_max = align_size_max;
2450         }
2451     }
2452
2453     /* Don't attempt accesses larger than the maximum.  */
2454     if (l > access_size_max) {
2455         l = access_size_max;
2456     }
2457     l = pow2floor(l);
2458
2459     return l;
2460 }
2461
2462 static bool prepare_mmio_access(MemoryRegion *mr)
2463 {
2464     bool unlocked = !qemu_mutex_iothread_locked();
2465     bool release_lock = false;
2466
2467     if (unlocked && mr->global_locking) {
2468         qemu_mutex_lock_iothread();
2469         unlocked = false;
2470         release_lock = true;
2471     }
2472     if (mr->flush_coalesced_mmio) {
2473         if (unlocked) {
2474             qemu_mutex_lock_iothread();
2475         }
2476         qemu_flush_coalesced_mmio_buffer();
2477         if (unlocked) {
2478             qemu_mutex_unlock_iothread();
2479         }
2480     }
2481
2482     return release_lock;
2483 }
2484
2485 /* Called within RCU critical section.  */
2486 static MemTxResult address_space_write_continue(AddressSpace *as, hwaddr addr,
2487                                                 MemTxAttrs attrs,
2488                                                 const uint8_t *buf,
2489                                                 int len, hwaddr addr1,
2490                                                 hwaddr l, MemoryRegion *mr)
2491 {
2492     uint8_t *ptr;
2493     uint64_t val;
2494     MemTxResult result = MEMTX_OK;
2495     bool release_lock = false;
2496
2497     for (;;) {
2498         if (!memory_access_is_direct(mr, true)) {
2499             release_lock |= prepare_mmio_access(mr);
2500             l = memory_access_size(mr, l, addr1);
2501             /* XXX: could force current_cpu to NULL to avoid
2502                potential bugs */
2503             switch (l) {
2504             case 8:
2505                 /* 64 bit write access */
2506                 val = ldq_p(buf);
2507                 result |= memory_region_dispatch_write(mr, addr1, val, 8,
2508                                                        attrs);
2509                 break;
2510             case 4:
2511                 /* 32 bit write access */
2512                 val = ldl_p(buf);
2513                 result |= memory_region_dispatch_write(mr, addr1, val, 4,
2514                                                        attrs);
2515                 break;
2516             case 2:
2517                 /* 16 bit write access */
2518                 val = lduw_p(buf);
2519                 result |= memory_region_dispatch_write(mr, addr1, val, 2,
2520                                                        attrs);
2521                 break;
2522             case 1:
2523                 /* 8 bit write access */
2524                 val = ldub_p(buf);
2525                 result |= memory_region_dispatch_write(mr, addr1, val, 1,
2526                                                        attrs);
2527                 break;
2528             default:
2529                 abort();
2530             }
2531         } else {
2532             /* RAM case */
2533             ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
2534             memcpy(ptr, buf, l);
2535             invalidate_and_set_dirty(mr, addr1, l);
2536         }
2537
2538         if (release_lock) {
2539             qemu_mutex_unlock_iothread();
2540             release_lock = false;
2541         }
2542
2543         len -= l;
2544         buf += l;
2545         addr += l;
2546
2547         if (!len) {
2548             break;
2549         }
2550
2551         l = len;
2552         mr = address_space_translate(as, addr, &addr1, &l, true);
2553     }
2554
2555     return result;
2556 }
2557
2558 MemTxResult address_space_write(AddressSpace *as, hwaddr addr, MemTxAttrs attrs,
2559                                 const uint8_t *buf, int len)
2560 {
2561     hwaddr l;
2562     hwaddr addr1;
2563     MemoryRegion *mr;
2564     MemTxResult result = MEMTX_OK;
2565
2566     if (len > 0) {
2567         rcu_read_lock();
2568         l = len;
2569         mr = address_space_translate(as, addr, &addr1, &l, true);
2570         result = address_space_write_continue(as, addr, attrs, buf, len,
2571                                               addr1, l, mr);
2572         rcu_read_unlock();
2573     }
2574
2575     return result;
2576 }
2577
2578 /* Called within RCU critical section.  */
2579 MemTxResult address_space_read_continue(AddressSpace *as, hwaddr addr,
2580                                         MemTxAttrs attrs, uint8_t *buf,
2581                                         int len, hwaddr addr1, hwaddr l,
2582                                         MemoryRegion *mr)
2583 {
2584     uint8_t *ptr;
2585     uint64_t val;
2586     MemTxResult result = MEMTX_OK;
2587     bool release_lock = false;
2588
2589     for (;;) {
2590         if (!memory_access_is_direct(mr, false)) {
2591             /* I/O case */
2592             release_lock |= prepare_mmio_access(mr);
2593             l = memory_access_size(mr, l, addr1);
2594             switch (l) {
2595             case 8:
2596                 /* 64 bit read access */
2597                 result |= memory_region_dispatch_read(mr, addr1, &val, 8,
2598                                                       attrs);
2599                 stq_p(buf, val);
2600                 break;
2601             case 4:
2602                 /* 32 bit read access */
2603                 result |= memory_region_dispatch_read(mr, addr1, &val, 4,
2604                                                       attrs);
2605                 stl_p(buf, val);
2606                 break;
2607             case 2:
2608                 /* 16 bit read access */
2609                 result |= memory_region_dispatch_read(mr, addr1, &val, 2,
2610                                                       attrs);
2611                 stw_p(buf, val);
2612                 break;
2613             case 1:
2614                 /* 8 bit read access */
2615                 result |= memory_region_dispatch_read(mr, addr1, &val, 1,
2616                                                       attrs);
2617                 stb_p(buf, val);
2618                 break;
2619             default:
2620                 abort();
2621             }
2622         } else {
2623             /* RAM case */
2624             ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
2625             memcpy(buf, ptr, l);
2626         }
2627
2628         if (release_lock) {
2629             qemu_mutex_unlock_iothread();
2630             release_lock = false;
2631         }
2632
2633         len -= l;
2634         buf += l;
2635         addr += l;
2636
2637         if (!len) {
2638             break;
2639         }
2640
2641         l = len;
2642         mr = address_space_translate(as, addr, &addr1, &l, false);
2643     }
2644
2645     return result;
2646 }
2647
2648 MemTxResult address_space_read_full(AddressSpace *as, hwaddr addr,
2649                                     MemTxAttrs attrs, uint8_t *buf, int len)
2650 {
2651     hwaddr l;
2652     hwaddr addr1;
2653     MemoryRegion *mr;
2654     MemTxResult result = MEMTX_OK;
2655
2656     if (len > 0) {
2657         rcu_read_lock();
2658         l = len;
2659         mr = address_space_translate(as, addr, &addr1, &l, false);
2660         result = address_space_read_continue(as, addr, attrs, buf, len,
2661                                              addr1, l, mr);
2662         rcu_read_unlock();
2663     }
2664
2665     return result;
2666 }
2667
2668 MemTxResult address_space_rw(AddressSpace *as, hwaddr addr, MemTxAttrs attrs,
2669                              uint8_t *buf, int len, bool is_write)
2670 {
2671     if (is_write) {
2672         return address_space_write(as, addr, attrs, (uint8_t *)buf, len);
2673     } else {
2674         return address_space_read(as, addr, attrs, (uint8_t *)buf, len);
2675     }
2676 }
2677
2678 void cpu_physical_memory_rw(hwaddr addr, uint8_t *buf,
2679                             int len, int is_write)
2680 {
2681     address_space_rw(&address_space_memory, addr, MEMTXATTRS_UNSPECIFIED,
2682                      buf, len, is_write);
2683 }
2684
2685 enum write_rom_type {
2686     WRITE_DATA,
2687     FLUSH_CACHE,
2688 };
2689
2690 static inline void cpu_physical_memory_write_rom_internal(AddressSpace *as,
2691     hwaddr addr, const uint8_t *buf, int len, enum write_rom_type type)
2692 {
2693     hwaddr l;
2694     uint8_t *ptr;
2695     hwaddr addr1;
2696     MemoryRegion *mr;
2697
2698     rcu_read_lock();
2699     while (len > 0) {
2700         l = len;
2701         mr = address_space_translate(as, addr, &addr1, &l, true);
2702
2703         if (!(memory_region_is_ram(mr) ||
2704               memory_region_is_romd(mr))) {
2705             l = memory_access_size(mr, l, addr1);
2706         } else {
2707             /* ROM/RAM case */
2708             ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
2709             switch (type) {
2710             case WRITE_DATA:
2711                 memcpy(ptr, buf, l);
2712                 invalidate_and_set_dirty(mr, addr1, l);
2713                 break;
2714             case FLUSH_CACHE:
2715                 flush_icache_range((uintptr_t)ptr, (uintptr_t)ptr + l);
2716                 break;
2717             }
2718         }
2719         len -= l;
2720         buf += l;
2721         addr += l;
2722     }
2723     rcu_read_unlock();
2724 }
2725
2726 /* used for ROM loading : can write in RAM and ROM */
2727 void cpu_physical_memory_write_rom(AddressSpace *as, hwaddr addr,
2728                                    const uint8_t *buf, int len)
2729 {
2730     cpu_physical_memory_write_rom_internal(as, addr, buf, len, WRITE_DATA);
2731 }
2732
2733 void cpu_flush_icache_range(hwaddr start, int len)
2734 {
2735     /*
2736      * This function should do the same thing as an icache flush that was
2737      * triggered from within the guest. For TCG we are always cache coherent,
2738      * so there is no need to flush anything. For KVM / Xen we need to flush
2739      * the host's instruction cache at least.
2740      */
2741     if (tcg_enabled()) {
2742         return;
2743     }
2744
2745     cpu_physical_memory_write_rom_internal(&address_space_memory,
2746                                            start, NULL, len, FLUSH_CACHE);
2747 }
2748
2749 typedef struct {
2750     MemoryRegion *mr;
2751     void *buffer;
2752     hwaddr addr;
2753     hwaddr len;
2754     bool in_use;
2755 } BounceBuffer;
2756
2757 static BounceBuffer bounce;
2758
2759 typedef struct MapClient {
2760     QEMUBH *bh;
2761     QLIST_ENTRY(MapClient) link;
2762 } MapClient;
2763
2764 QemuMutex map_client_list_lock;
2765 static QLIST_HEAD(map_client_list, MapClient) map_client_list
2766     = QLIST_HEAD_INITIALIZER(map_client_list);
2767
2768 static void cpu_unregister_map_client_do(MapClient *client)
2769 {
2770     QLIST_REMOVE(client, link);
2771     g_free(client);
2772 }
2773
2774 static void cpu_notify_map_clients_locked(void)
2775 {
2776     MapClient *client;
2777
2778     while (!QLIST_EMPTY(&map_client_list)) {
2779         client = QLIST_FIRST(&map_client_list);
2780         qemu_bh_schedule(client->bh);
2781         cpu_unregister_map_client_do(client);
2782     }
2783 }
2784
2785 void cpu_register_map_client(QEMUBH *bh)
2786 {
2787     MapClient *client = g_malloc(sizeof(*client));
2788
2789     qemu_mutex_lock(&map_client_list_lock);
2790     client->bh = bh;
2791     QLIST_INSERT_HEAD(&map_client_list, client, link);
2792     if (!atomic_read(&bounce.in_use)) {
2793         cpu_notify_map_clients_locked();
2794     }
2795     qemu_mutex_unlock(&map_client_list_lock);
2796 }
2797
2798 void cpu_exec_init_all(void)
2799 {
2800     qemu_mutex_init(&ram_list.mutex);
2801     io_mem_init();
2802     memory_map_init();
2803     qemu_mutex_init(&map_client_list_lock);
2804 }
2805
2806 void cpu_unregister_map_client(QEMUBH *bh)
2807 {
2808     MapClient *client;
2809
2810     qemu_mutex_lock(&map_client_list_lock);
2811     QLIST_FOREACH(client, &map_client_list, link) {
2812         if (client->bh == bh) {
2813             cpu_unregister_map_client_do(client);
2814             break;
2815         }
2816     }
2817     qemu_mutex_unlock(&map_client_list_lock);
2818 }
2819
2820 static void cpu_notify_map_clients(void)
2821 {
2822     qemu_mutex_lock(&map_client_list_lock);
2823     cpu_notify_map_clients_locked();
2824     qemu_mutex_unlock(&map_client_list_lock);
2825 }
2826
2827 bool address_space_access_valid(AddressSpace *as, hwaddr addr, int len, bool is_write)
2828 {
2829     MemoryRegion *mr;
2830     hwaddr l, xlat;
2831
2832     rcu_read_lock();
2833     while (len > 0) {
2834         l = len;
2835         mr = address_space_translate(as, addr, &xlat, &l, is_write);
2836         if (!memory_access_is_direct(mr, is_write)) {
2837             l = memory_access_size(mr, l, addr);
2838             if (!memory_region_access_valid(mr, xlat, l, is_write)) {
2839                 return false;
2840             }
2841         }
2842
2843         len -= l;
2844         addr += l;
2845     }
2846     rcu_read_unlock();
2847     return true;
2848 }
2849
2850 /* Map a physical memory region into a host virtual address.
2851  * May map a subset of the requested range, given by and returned in *plen.
2852  * May return NULL if resources needed to perform the mapping are exhausted.
2853  * Use only for reads OR writes - not for read-modify-write operations.
2854  * Use cpu_register_map_client() to know when retrying the map operation is
2855  * likely to succeed.
2856  */
2857 void *address_space_map(AddressSpace *as,
2858                         hwaddr addr,
2859                         hwaddr *plen,
2860                         bool is_write)
2861 {
2862     hwaddr len = *plen;
2863     hwaddr done = 0;
2864     hwaddr l, xlat, base;
2865     MemoryRegion *mr, *this_mr;
2866     void *ptr;
2867
2868     if (len == 0) {
2869         return NULL;
2870     }
2871
2872     l = len;
2873     rcu_read_lock();
2874     mr = address_space_translate(as, addr, &xlat, &l, is_write);
2875
2876     if (!memory_access_is_direct(mr, is_write)) {
2877         if (atomic_xchg(&bounce.in_use, true)) {
2878             rcu_read_unlock();
2879             return NULL;
2880         }
2881         /* Avoid unbounded allocations */
2882         l = MIN(l, TARGET_PAGE_SIZE);
2883         bounce.buffer = qemu_memalign(TARGET_PAGE_SIZE, l);
2884         bounce.addr = addr;
2885         bounce.len = l;
2886
2887         memory_region_ref(mr);
2888         bounce.mr = mr;
2889         if (!is_write) {
2890             address_space_read(as, addr, MEMTXATTRS_UNSPECIFIED,
2891                                bounce.buffer, l);
2892         }
2893
2894         rcu_read_unlock();
2895         *plen = l;
2896         return bounce.buffer;
2897     }
2898
2899     base = xlat;
2900
2901     for (;;) {
2902         len -= l;
2903         addr += l;
2904         done += l;
2905         if (len == 0) {
2906             break;
2907         }
2908
2909         l = len;
2910         this_mr = address_space_translate(as, addr, &xlat, &l, is_write);
2911         if (this_mr != mr || xlat != base + done) {
2912             break;
2913         }
2914     }
2915
2916     memory_region_ref(mr);
2917     *plen = done;
2918     ptr = qemu_ram_ptr_length(mr->ram_block, base, plen);
2919     rcu_read_unlock();
2920
2921     return ptr;
2922 }
2923
2924 /* Unmaps a memory region previously mapped by address_space_map().
2925  * Will also mark the memory as dirty if is_write == 1.  access_len gives
2926  * the amount of memory that was actually read or written by the caller.
2927  */
2928 void address_space_unmap(AddressSpace *as, void *buffer, hwaddr len,
2929                          int is_write, hwaddr access_len)
2930 {
2931     if (buffer != bounce.buffer) {
2932         MemoryRegion *mr;
2933         ram_addr_t addr1;
2934
2935         mr = memory_region_from_host(buffer, &addr1);
2936         assert(mr != NULL);
2937         if (is_write) {
2938             invalidate_and_set_dirty(mr, addr1, access_len);
2939         }
2940         if (xen_enabled()) {
2941             xen_invalidate_map_cache_entry(buffer);
2942         }
2943         memory_region_unref(mr);
2944         return;
2945     }
2946     if (is_write) {
2947         address_space_write(as, bounce.addr, MEMTXATTRS_UNSPECIFIED,
2948                             bounce.buffer, access_len);
2949     }
2950     qemu_vfree(bounce.buffer);
2951     bounce.buffer = NULL;
2952     memory_region_unref(bounce.mr);
2953     atomic_mb_set(&bounce.in_use, false);
2954     cpu_notify_map_clients();
2955 }
2956
2957 void *cpu_physical_memory_map(hwaddr addr,
2958                               hwaddr *plen,
2959                               int is_write)
2960 {
2961     return address_space_map(&address_space_memory, addr, plen, is_write);
2962 }
2963
2964 void cpu_physical_memory_unmap(void *buffer, hwaddr len,
2965                                int is_write, hwaddr access_len)
2966 {
2967     return address_space_unmap(&address_space_memory, buffer, len, is_write, access_len);
2968 }
2969
2970 /* warning: addr must be aligned */
2971 static inline uint32_t address_space_ldl_internal(AddressSpace *as, hwaddr addr,
2972                                                   MemTxAttrs attrs,
2973                                                   MemTxResult *result,
2974                                                   enum device_endian endian)
2975 {
2976     uint8_t *ptr;
2977     uint64_t val;
2978     MemoryRegion *mr;
2979     hwaddr l = 4;
2980     hwaddr addr1;
2981     MemTxResult r;
2982     bool release_lock = false;
2983
2984     rcu_read_lock();
2985     mr = address_space_translate(as, addr, &addr1, &l, false);
2986     if (l < 4 || !memory_access_is_direct(mr, false)) {
2987         release_lock |= prepare_mmio_access(mr);
2988
2989         /* I/O case */
2990         r = memory_region_dispatch_read(mr, addr1, &val, 4, attrs);
2991 #if defined(TARGET_WORDS_BIGENDIAN)
2992         if (endian == DEVICE_LITTLE_ENDIAN) {
2993             val = bswap32(val);
2994         }
2995 #else
2996         if (endian == DEVICE_BIG_ENDIAN) {
2997             val = bswap32(val);
2998         }
2999 #endif
3000     } else {
3001         /* RAM case */
3002         ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
3003         switch (endian) {
3004         case DEVICE_LITTLE_ENDIAN:
3005             val = ldl_le_p(ptr);
3006             break;
3007         case DEVICE_BIG_ENDIAN:
3008             val = ldl_be_p(ptr);
3009             break;
3010         default:
3011             val = ldl_p(ptr);
3012             break;
3013         }
3014         r = MEMTX_OK;
3015     }
3016     if (result) {
3017         *result = r;
3018     }
3019     if (release_lock) {
3020         qemu_mutex_unlock_iothread();
3021     }
3022     rcu_read_unlock();
3023     return val;
3024 }
3025
3026 uint32_t address_space_ldl(AddressSpace *as, hwaddr addr,
3027                            MemTxAttrs attrs, MemTxResult *result)
3028 {
3029     return address_space_ldl_internal(as, addr, attrs, result,
3030                                       DEVICE_NATIVE_ENDIAN);
3031 }
3032
3033 uint32_t address_space_ldl_le(AddressSpace *as, hwaddr addr,
3034                               MemTxAttrs attrs, MemTxResult *result)
3035 {
3036     return address_space_ldl_internal(as, addr, attrs, result,
3037                                       DEVICE_LITTLE_ENDIAN);
3038 }
3039
3040 uint32_t address_space_ldl_be(AddressSpace *as, hwaddr addr,
3041                               MemTxAttrs attrs, MemTxResult *result)
3042 {
3043     return address_space_ldl_internal(as, addr, attrs, result,
3044                                       DEVICE_BIG_ENDIAN);
3045 }
3046
3047 uint32_t ldl_phys(AddressSpace *as, hwaddr addr)
3048 {
3049     return address_space_ldl(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3050 }
3051
3052 uint32_t ldl_le_phys(AddressSpace *as, hwaddr addr)
3053 {
3054     return address_space_ldl_le(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3055 }
3056
3057 uint32_t ldl_be_phys(AddressSpace *as, hwaddr addr)
3058 {
3059     return address_space_ldl_be(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3060 }
3061
3062 /* warning: addr must be aligned */
3063 static inline uint64_t address_space_ldq_internal(AddressSpace *as, hwaddr addr,
3064                                                   MemTxAttrs attrs,
3065                                                   MemTxResult *result,
3066                                                   enum device_endian endian)
3067 {
3068     uint8_t *ptr;
3069     uint64_t val;
3070     MemoryRegion *mr;
3071     hwaddr l = 8;
3072     hwaddr addr1;
3073     MemTxResult r;
3074     bool release_lock = false;
3075
3076     rcu_read_lock();
3077     mr = address_space_translate(as, addr, &addr1, &l,
3078                                  false);
3079     if (l < 8 || !memory_access_is_direct(mr, false)) {
3080         release_lock |= prepare_mmio_access(mr);
3081
3082         /* I/O case */
3083         r = memory_region_dispatch_read(mr, addr1, &val, 8, attrs);
3084 #if defined(TARGET_WORDS_BIGENDIAN)
3085         if (endian == DEVICE_LITTLE_ENDIAN) {
3086             val = bswap64(val);
3087         }
3088 #else
3089         if (endian == DEVICE_BIG_ENDIAN) {
3090             val = bswap64(val);
3091         }
3092 #endif
3093     } else {
3094         /* RAM case */
3095         ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
3096         switch (endian) {
3097         case DEVICE_LITTLE_ENDIAN:
3098             val = ldq_le_p(ptr);
3099             break;
3100         case DEVICE_BIG_ENDIAN:
3101             val = ldq_be_p(ptr);
3102             break;
3103         default:
3104             val = ldq_p(ptr);
3105             break;
3106         }
3107         r = MEMTX_OK;
3108     }
3109     if (result) {
3110         *result = r;
3111     }
3112     if (release_lock) {
3113         qemu_mutex_unlock_iothread();
3114     }
3115     rcu_read_unlock();
3116     return val;
3117 }
3118
3119 uint64_t address_space_ldq(AddressSpace *as, hwaddr addr,
3120                            MemTxAttrs attrs, MemTxResult *result)
3121 {
3122     return address_space_ldq_internal(as, addr, attrs, result,
3123                                       DEVICE_NATIVE_ENDIAN);
3124 }
3125
3126 uint64_t address_space_ldq_le(AddressSpace *as, hwaddr addr,
3127                            MemTxAttrs attrs, MemTxResult *result)
3128 {
3129     return address_space_ldq_internal(as, addr, attrs, result,
3130                                       DEVICE_LITTLE_ENDIAN);
3131 }
3132
3133 uint64_t address_space_ldq_be(AddressSpace *as, hwaddr addr,
3134                            MemTxAttrs attrs, MemTxResult *result)
3135 {
3136     return address_space_ldq_internal(as, addr, attrs, result,
3137                                       DEVICE_BIG_ENDIAN);
3138 }
3139
3140 uint64_t ldq_phys(AddressSpace *as, hwaddr addr)
3141 {
3142     return address_space_ldq(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3143 }
3144
3145 uint64_t ldq_le_phys(AddressSpace *as, hwaddr addr)
3146 {
3147     return address_space_ldq_le(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3148 }
3149
3150 uint64_t ldq_be_phys(AddressSpace *as, hwaddr addr)
3151 {
3152     return address_space_ldq_be(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3153 }
3154
3155 /* XXX: optimize */
3156 uint32_t address_space_ldub(AddressSpace *as, hwaddr addr,
3157                             MemTxAttrs attrs, MemTxResult *result)
3158 {
3159     uint8_t val;
3160     MemTxResult r;
3161
3162     r = address_space_rw(as, addr, attrs, &val, 1, 0);
3163     if (result) {
3164         *result = r;
3165     }
3166     return val;
3167 }
3168
3169 uint32_t ldub_phys(AddressSpace *as, hwaddr addr)
3170 {
3171     return address_space_ldub(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3172 }
3173
3174 /* warning: addr must be aligned */
3175 static inline uint32_t address_space_lduw_internal(AddressSpace *as,
3176                                                    hwaddr addr,
3177                                                    MemTxAttrs attrs,
3178                                                    MemTxResult *result,
3179                                                    enum device_endian endian)
3180 {
3181     uint8_t *ptr;
3182     uint64_t val;
3183     MemoryRegion *mr;
3184     hwaddr l = 2;
3185     hwaddr addr1;
3186     MemTxResult r;
3187     bool release_lock = false;
3188
3189     rcu_read_lock();
3190     mr = address_space_translate(as, addr, &addr1, &l,
3191                                  false);
3192     if (l < 2 || !memory_access_is_direct(mr, false)) {
3193         release_lock |= prepare_mmio_access(mr);
3194
3195         /* I/O case */
3196         r = memory_region_dispatch_read(mr, addr1, &val, 2, attrs);
3197 #if defined(TARGET_WORDS_BIGENDIAN)
3198         if (endian == DEVICE_LITTLE_ENDIAN) {
3199             val = bswap16(val);
3200         }
3201 #else
3202         if (endian == DEVICE_BIG_ENDIAN) {
3203             val = bswap16(val);
3204         }
3205 #endif
3206     } else {
3207         /* RAM case */
3208         ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
3209         switch (endian) {
3210         case DEVICE_LITTLE_ENDIAN:
3211             val = lduw_le_p(ptr);
3212             break;
3213         case DEVICE_BIG_ENDIAN:
3214             val = lduw_be_p(ptr);
3215             break;
3216         default:
3217             val = lduw_p(ptr);
3218             break;
3219         }
3220         r = MEMTX_OK;
3221     }
3222     if (result) {
3223         *result = r;
3224     }
3225     if (release_lock) {
3226         qemu_mutex_unlock_iothread();
3227     }
3228     rcu_read_unlock();
3229     return val;
3230 }
3231
3232 uint32_t address_space_lduw(AddressSpace *as, hwaddr addr,
3233                            MemTxAttrs attrs, MemTxResult *result)
3234 {
3235     return address_space_lduw_internal(as, addr, attrs, result,
3236                                        DEVICE_NATIVE_ENDIAN);
3237 }
3238
3239 uint32_t address_space_lduw_le(AddressSpace *as, hwaddr addr,
3240                            MemTxAttrs attrs, MemTxResult *result)
3241 {
3242     return address_space_lduw_internal(as, addr, attrs, result,
3243                                        DEVICE_LITTLE_ENDIAN);
3244 }
3245
3246 uint32_t address_space_lduw_be(AddressSpace *as, hwaddr addr,
3247                            MemTxAttrs attrs, MemTxResult *result)
3248 {
3249     return address_space_lduw_internal(as, addr, attrs, result,
3250                                        DEVICE_BIG_ENDIAN);
3251 }
3252
3253 uint32_t lduw_phys(AddressSpace *as, hwaddr addr)
3254 {
3255     return address_space_lduw(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3256 }
3257
3258 uint32_t lduw_le_phys(AddressSpace *as, hwaddr addr)
3259 {
3260     return address_space_lduw_le(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3261 }
3262
3263 uint32_t lduw_be_phys(AddressSpace *as, hwaddr addr)
3264 {
3265     return address_space_lduw_be(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
3266 }
3267
3268 /* warning: addr must be aligned. The ram page is not masked as dirty
3269    and the code inside is not invalidated. It is useful if the dirty
3270    bits are used to track modified PTEs */
3271 void address_space_stl_notdirty(AddressSpace *as, hwaddr addr, uint32_t val,
3272                                 MemTxAttrs attrs, MemTxResult *result)
3273 {
3274     uint8_t *ptr;
3275     MemoryRegion *mr;
3276     hwaddr l = 4;
3277     hwaddr addr1;
3278     MemTxResult r;
3279     uint8_t dirty_log_mask;
3280     bool release_lock = false;
3281
3282     rcu_read_lock();
3283     mr = address_space_translate(as, addr, &addr1, &l,
3284                                  true);
3285     if (l < 4 || !memory_access_is_direct(mr, true)) {
3286         release_lock |= prepare_mmio_access(mr);
3287
3288         r = memory_region_dispatch_write(mr, addr1, val, 4, attrs);
3289     } else {
3290         ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
3291         stl_p(ptr, val);
3292
3293         dirty_log_mask = memory_region_get_dirty_log_mask(mr);
3294         dirty_log_mask &= ~(1 << DIRTY_MEMORY_CODE);
3295         cpu_physical_memory_set_dirty_range(memory_region_get_ram_addr(mr) + addr,
3296                                             4, dirty_log_mask);
3297         r = MEMTX_OK;
3298     }
3299     if (result) {
3300         *result = r;
3301     }
3302     if (release_lock) {
3303         qemu_mutex_unlock_iothread();
3304     }
3305     rcu_read_unlock();
3306 }
3307
3308 void stl_phys_notdirty(AddressSpace *as, hwaddr addr, uint32_t val)
3309 {
3310     address_space_stl_notdirty(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3311 }
3312
3313 /* warning: addr must be aligned */
3314 static inline void address_space_stl_internal(AddressSpace *as,
3315                                               hwaddr addr, uint32_t val,
3316                                               MemTxAttrs attrs,
3317                                               MemTxResult *result,
3318                                               enum device_endian endian)
3319 {
3320     uint8_t *ptr;
3321     MemoryRegion *mr;
3322     hwaddr l = 4;
3323     hwaddr addr1;
3324     MemTxResult r;
3325     bool release_lock = false;
3326
3327     rcu_read_lock();
3328     mr = address_space_translate(as, addr, &addr1, &l,
3329                                  true);
3330     if (l < 4 || !memory_access_is_direct(mr, true)) {
3331         release_lock |= prepare_mmio_access(mr);
3332
3333 #if defined(TARGET_WORDS_BIGENDIAN)
3334         if (endian == DEVICE_LITTLE_ENDIAN) {
3335             val = bswap32(val);
3336         }
3337 #else
3338         if (endian == DEVICE_BIG_ENDIAN) {
3339             val = bswap32(val);
3340         }
3341 #endif
3342         r = memory_region_dispatch_write(mr, addr1, val, 4, attrs);
3343     } else {
3344         /* RAM case */
3345         ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
3346         switch (endian) {
3347         case DEVICE_LITTLE_ENDIAN:
3348             stl_le_p(ptr, val);
3349             break;
3350         case DEVICE_BIG_ENDIAN:
3351             stl_be_p(ptr, val);
3352             break;
3353         default:
3354             stl_p(ptr, val);
3355             break;
3356         }
3357         invalidate_and_set_dirty(mr, addr1, 4);
3358         r = MEMTX_OK;
3359     }
3360     if (result) {
3361         *result = r;
3362     }
3363     if (release_lock) {
3364         qemu_mutex_unlock_iothread();
3365     }
3366     rcu_read_unlock();
3367 }
3368
3369 void address_space_stl(AddressSpace *as, hwaddr addr, uint32_t val,
3370                        MemTxAttrs attrs, MemTxResult *result)
3371 {
3372     address_space_stl_internal(as, addr, val, attrs, result,
3373                                DEVICE_NATIVE_ENDIAN);
3374 }
3375
3376 void address_space_stl_le(AddressSpace *as, hwaddr addr, uint32_t val,
3377                        MemTxAttrs attrs, MemTxResult *result)
3378 {
3379     address_space_stl_internal(as, addr, val, attrs, result,
3380                                DEVICE_LITTLE_ENDIAN);
3381 }
3382
3383 void address_space_stl_be(AddressSpace *as, hwaddr addr, uint32_t val,
3384                        MemTxAttrs attrs, MemTxResult *result)
3385 {
3386     address_space_stl_internal(as, addr, val, attrs, result,
3387                                DEVICE_BIG_ENDIAN);
3388 }
3389
3390 void stl_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3391 {
3392     address_space_stl(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3393 }
3394
3395 void stl_le_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3396 {
3397     address_space_stl_le(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3398 }
3399
3400 void stl_be_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3401 {
3402     address_space_stl_be(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3403 }
3404
3405 /* XXX: optimize */
3406 void address_space_stb(AddressSpace *as, hwaddr addr, uint32_t val,
3407                        MemTxAttrs attrs, MemTxResult *result)
3408 {
3409     uint8_t v = val;
3410     MemTxResult r;
3411
3412     r = address_space_rw(as, addr, attrs, &v, 1, 1);
3413     if (result) {
3414         *result = r;
3415     }
3416 }
3417
3418 void stb_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3419 {
3420     address_space_stb(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3421 }
3422
3423 /* warning: addr must be aligned */
3424 static inline void address_space_stw_internal(AddressSpace *as,
3425                                               hwaddr addr, uint32_t val,
3426                                               MemTxAttrs attrs,
3427                                               MemTxResult *result,
3428                                               enum device_endian endian)
3429 {
3430     uint8_t *ptr;
3431     MemoryRegion *mr;
3432     hwaddr l = 2;
3433     hwaddr addr1;
3434     MemTxResult r;
3435     bool release_lock = false;
3436
3437     rcu_read_lock();
3438     mr = address_space_translate(as, addr, &addr1, &l, true);
3439     if (l < 2 || !memory_access_is_direct(mr, true)) {
3440         release_lock |= prepare_mmio_access(mr);
3441
3442 #if defined(TARGET_WORDS_BIGENDIAN)
3443         if (endian == DEVICE_LITTLE_ENDIAN) {
3444             val = bswap16(val);
3445         }
3446 #else
3447         if (endian == DEVICE_BIG_ENDIAN) {
3448             val = bswap16(val);
3449         }
3450 #endif
3451         r = memory_region_dispatch_write(mr, addr1, val, 2, attrs);
3452     } else {
3453         /* RAM case */
3454         ptr = qemu_map_ram_ptr(mr->ram_block, addr1);
3455         switch (endian) {
3456         case DEVICE_LITTLE_ENDIAN:
3457             stw_le_p(ptr, val);
3458             break;
3459         case DEVICE_BIG_ENDIAN:
3460             stw_be_p(ptr, val);
3461             break;
3462         default:
3463             stw_p(ptr, val);
3464             break;
3465         }
3466         invalidate_and_set_dirty(mr, addr1, 2);
3467         r = MEMTX_OK;
3468     }
3469     if (result) {
3470         *result = r;
3471     }
3472     if (release_lock) {
3473         qemu_mutex_unlock_iothread();
3474     }
3475     rcu_read_unlock();
3476 }
3477
3478 void address_space_stw(AddressSpace *as, hwaddr addr, uint32_t val,
3479                        MemTxAttrs attrs, MemTxResult *result)
3480 {
3481     address_space_stw_internal(as, addr, val, attrs, result,
3482                                DEVICE_NATIVE_ENDIAN);
3483 }
3484
3485 void address_space_stw_le(AddressSpace *as, hwaddr addr, uint32_t val,
3486                        MemTxAttrs attrs, MemTxResult *result)
3487 {
3488     address_space_stw_internal(as, addr, val, attrs, result,
3489                                DEVICE_LITTLE_ENDIAN);
3490 }
3491
3492 void address_space_stw_be(AddressSpace *as, hwaddr addr, uint32_t val,
3493                        MemTxAttrs attrs, MemTxResult *result)
3494 {
3495     address_space_stw_internal(as, addr, val, attrs, result,
3496                                DEVICE_BIG_ENDIAN);
3497 }
3498
3499 void stw_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3500 {
3501     address_space_stw(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3502 }
3503
3504 void stw_le_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3505 {
3506     address_space_stw_le(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3507 }
3508
3509 void stw_be_phys(AddressSpace *as, hwaddr addr, uint32_t val)
3510 {
3511     address_space_stw_be(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3512 }
3513
3514 /* XXX: optimize */
3515 void address_space_stq(AddressSpace *as, hwaddr addr, uint64_t val,
3516                        MemTxAttrs attrs, MemTxResult *result)
3517 {
3518     MemTxResult r;
3519     val = tswap64(val);
3520     r = address_space_rw(as, addr, attrs, (void *) &val, 8, 1);
3521     if (result) {
3522         *result = r;
3523     }
3524 }
3525
3526 void address_space_stq_le(AddressSpace *as, hwaddr addr, uint64_t val,
3527                        MemTxAttrs attrs, MemTxResult *result)
3528 {
3529     MemTxResult r;
3530     val = cpu_to_le64(val);
3531     r = address_space_rw(as, addr, attrs, (void *) &val, 8, 1);
3532     if (result) {
3533         *result = r;
3534     }
3535 }
3536 void address_space_stq_be(AddressSpace *as, hwaddr addr, uint64_t val,
3537                        MemTxAttrs attrs, MemTxResult *result)
3538 {
3539     MemTxResult r;
3540     val = cpu_to_be64(val);
3541     r = address_space_rw(as, addr, attrs, (void *) &val, 8, 1);
3542     if (result) {
3543         *result = r;
3544     }
3545 }
3546
3547 void stq_phys(AddressSpace *as, hwaddr addr, uint64_t val)
3548 {
3549     address_space_stq(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3550 }
3551
3552 void stq_le_phys(AddressSpace *as, hwaddr addr, uint64_t val)
3553 {
3554     address_space_stq_le(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3555 }
3556
3557 void stq_be_phys(AddressSpace *as, hwaddr addr, uint64_t val)
3558 {
3559     address_space_stq_be(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
3560 }
3561
3562 /* virtual memory access for debug (includes writing to ROM) */
3563 int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
3564                         uint8_t *buf, int len, int is_write)
3565 {
3566     int l;
3567     hwaddr phys_addr;
3568     target_ulong page;
3569
3570     while (len > 0) {
3571         int asidx;
3572         MemTxAttrs attrs;
3573
3574         page = addr & TARGET_PAGE_MASK;
3575         phys_addr = cpu_get_phys_page_attrs_debug(cpu, page, &attrs);
3576         asidx = cpu_asidx_from_attrs(cpu, attrs);
3577         /* if no physical page mapped, return an error */
3578         if (phys_addr == -1)
3579             return -1;
3580         l = (page + TARGET_PAGE_SIZE) - addr;
3581         if (l > len)
3582             l = len;
3583         phys_addr += (addr & ~TARGET_PAGE_MASK);
3584         if (is_write) {
3585             cpu_physical_memory_write_rom(cpu->cpu_ases[asidx].as,
3586                                           phys_addr, buf, l);
3587         } else {
3588             address_space_rw(cpu->cpu_ases[asidx].as, phys_addr,
3589                              MEMTXATTRS_UNSPECIFIED,
3590                              buf, l, 0);
3591         }
3592         len -= l;
3593         buf += l;
3594         addr += l;
3595     }
3596     return 0;
3597 }
3598
3599 /*
3600  * Allows code that needs to deal with migration bitmaps etc to still be built
3601  * target independent.
3602  */
3603 size_t qemu_target_page_bits(void)
3604 {
3605     return TARGET_PAGE_BITS;
3606 }
3607
3608 #endif
3609
3610 /*
3611  * A helper function for the _utterly broken_ virtio device model to find out if
3612  * it's running on a big endian machine. Don't do this at home kids!
3613  */
3614 bool target_words_bigendian(void);
3615 bool target_words_bigendian(void)
3616 {
3617 #if defined(TARGET_WORDS_BIGENDIAN)
3618     return true;
3619 #else
3620     return false;
3621 #endif
3622 }
3623
3624 #ifndef CONFIG_USER_ONLY
3625 bool cpu_physical_memory_is_io(hwaddr phys_addr)
3626 {
3627     MemoryRegion*mr;
3628     hwaddr l = 1;
3629     bool res;
3630
3631     rcu_read_lock();
3632     mr = address_space_translate(&address_space_memory,
3633                                  phys_addr, &phys_addr, &l, false);
3634
3635     res = !(memory_region_is_ram(mr) || memory_region_is_romd(mr));
3636     rcu_read_unlock();
3637     return res;
3638 }
3639
3640 int qemu_ram_foreach_block(RAMBlockIterFunc func, void *opaque)
3641 {
3642     RAMBlock *block;
3643     int ret = 0;
3644
3645     rcu_read_lock();
3646     QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
3647         ret = func(block->idstr, block->host, block->offset,
3648                    block->used_length, opaque);
3649         if (ret) {
3650             break;
3651         }
3652     }
3653     rcu_read_unlock();
3654     return ret;
3655 }
3656 #endif