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