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