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