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