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