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