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