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