]> rtime.felk.cvut.cz Git - lisovros/qemu_apohw.git/blob - exec.c
Merge remote-tracking branch 'remotes/riku/linux-user-for-upstream' into staging
[lisovros/qemu_apohw.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 #include "hw/qdev.h"
30 #include "qemu/osdep.h"
31 #include "sysemu/kvm.h"
32 #include "sysemu/sysemu.h"
33 #include "hw/xen/xen.h"
34 #include "qemu/timer.h"
35 #include "qemu/config-file.h"
36 #include "exec/memory.h"
37 #include "sysemu/dma.h"
38 #include "exec/address-spaces.h"
39 #if defined(CONFIG_USER_ONLY)
40 #include <qemu.h>
41 #else /* !CONFIG_USER_ONLY */
42 #include "sysemu/xen-mapcache.h"
43 #include "trace.h"
44 #endif
45 #include "exec/cpu-all.h"
46
47 #include "exec/cputlb.h"
48 #include "translate-all.h"
49
50 #include "exec/memory-internal.h"
51 #include "exec/ram_addr.h"
52 #include "qemu/cache-utils.h"
53
54 #include "qemu/range.h"
55
56 //#define DEBUG_SUBPAGE
57
58 #if !defined(CONFIG_USER_ONLY)
59 static bool in_migration;
60
61 RAMList ram_list = { .blocks = QTAILQ_HEAD_INITIALIZER(ram_list.blocks) };
62
63 static MemoryRegion *system_memory;
64 static MemoryRegion *system_io;
65
66 AddressSpace address_space_io;
67 AddressSpace address_space_memory;
68
69 MemoryRegion io_mem_rom, io_mem_notdirty;
70 static MemoryRegion io_mem_unassigned;
71
72 #endif
73
74 struct CPUTailQ cpus = QTAILQ_HEAD_INITIALIZER(cpus);
75 /* current CPU in the current thread. It is only valid inside
76    cpu_exec() */
77 DEFINE_TLS(CPUState *, current_cpu);
78 /* 0 = Do not count executed instructions.
79    1 = Precise instruction counting.
80    2 = Adaptive rate instruction counting.  */
81 int use_icount;
82
83 #if !defined(CONFIG_USER_ONLY)
84
85 typedef struct PhysPageEntry PhysPageEntry;
86
87 struct PhysPageEntry {
88     /* How many bits skip to next level (in units of L2_SIZE). 0 for a leaf. */
89     uint32_t skip : 6;
90      /* index into phys_sections (!skip) or phys_map_nodes (skip) */
91     uint32_t ptr : 26;
92 };
93
94 #define PHYS_MAP_NODE_NIL (((uint32_t)~0) >> 6)
95
96 /* Size of the L2 (and L3, etc) page tables.  */
97 #define ADDR_SPACE_BITS 64
98
99 #define P_L2_BITS 9
100 #define P_L2_SIZE (1 << P_L2_BITS)
101
102 #define P_L2_LEVELS (((ADDR_SPACE_BITS - TARGET_PAGE_BITS - 1) / P_L2_BITS) + 1)
103
104 typedef PhysPageEntry Node[P_L2_SIZE];
105
106 typedef struct PhysPageMap {
107     unsigned sections_nb;
108     unsigned sections_nb_alloc;
109     unsigned nodes_nb;
110     unsigned nodes_nb_alloc;
111     Node *nodes;
112     MemoryRegionSection *sections;
113 } PhysPageMap;
114
115 struct AddressSpaceDispatch {
116     /* This is a multi-level map on the physical address space.
117      * The bottom level has pointers to MemoryRegionSections.
118      */
119     PhysPageEntry phys_map;
120     PhysPageMap map;
121     AddressSpace *as;
122 };
123
124 #define SUBPAGE_IDX(addr) ((addr) & ~TARGET_PAGE_MASK)
125 typedef struct subpage_t {
126     MemoryRegion iomem;
127     AddressSpace *as;
128     hwaddr base;
129     uint16_t sub_section[TARGET_PAGE_SIZE];
130 } subpage_t;
131
132 #define PHYS_SECTION_UNASSIGNED 0
133 #define PHYS_SECTION_NOTDIRTY 1
134 #define PHYS_SECTION_ROM 2
135 #define PHYS_SECTION_WATCH 3
136
137 static void io_mem_init(void);
138 static void memory_map_init(void);
139 static void tcg_commit(MemoryListener *listener);
140
141 static MemoryRegion io_mem_watch;
142 #endif
143
144 #if !defined(CONFIG_USER_ONLY)
145
146 static void phys_map_node_reserve(PhysPageMap *map, unsigned nodes)
147 {
148     if (map->nodes_nb + nodes > map->nodes_nb_alloc) {
149         map->nodes_nb_alloc = MAX(map->nodes_nb_alloc * 2, 16);
150         map->nodes_nb_alloc = MAX(map->nodes_nb_alloc, map->nodes_nb + nodes);
151         map->nodes = g_renew(Node, map->nodes, map->nodes_nb_alloc);
152     }
153 }
154
155 static uint32_t phys_map_node_alloc(PhysPageMap *map)
156 {
157     unsigned i;
158     uint32_t ret;
159
160     ret = map->nodes_nb++;
161     assert(ret != PHYS_MAP_NODE_NIL);
162     assert(ret != map->nodes_nb_alloc);
163     for (i = 0; i < P_L2_SIZE; ++i) {
164         map->nodes[ret][i].skip = 1;
165         map->nodes[ret][i].ptr = PHYS_MAP_NODE_NIL;
166     }
167     return ret;
168 }
169
170 static void phys_page_set_level(PhysPageMap *map, PhysPageEntry *lp,
171                                 hwaddr *index, hwaddr *nb, uint16_t leaf,
172                                 int level)
173 {
174     PhysPageEntry *p;
175     int i;
176     hwaddr step = (hwaddr)1 << (level * P_L2_BITS);
177
178     if (lp->skip && lp->ptr == PHYS_MAP_NODE_NIL) {
179         lp->ptr = phys_map_node_alloc(map);
180         p = map->nodes[lp->ptr];
181         if (level == 0) {
182             for (i = 0; i < P_L2_SIZE; i++) {
183                 p[i].skip = 0;
184                 p[i].ptr = PHYS_SECTION_UNASSIGNED;
185             }
186         }
187     } else {
188         p = map->nodes[lp->ptr];
189     }
190     lp = &p[(*index >> (level * P_L2_BITS)) & (P_L2_SIZE - 1)];
191
192     while (*nb && lp < &p[P_L2_SIZE]) {
193         if ((*index & (step - 1)) == 0 && *nb >= step) {
194             lp->skip = 0;
195             lp->ptr = leaf;
196             *index += step;
197             *nb -= step;
198         } else {
199             phys_page_set_level(map, lp, index, nb, leaf, level - 1);
200         }
201         ++lp;
202     }
203 }
204
205 static void phys_page_set(AddressSpaceDispatch *d,
206                           hwaddr index, hwaddr nb,
207                           uint16_t leaf)
208 {
209     /* Wildly overreserve - it doesn't matter much. */
210     phys_map_node_reserve(&d->map, 3 * P_L2_LEVELS);
211
212     phys_page_set_level(&d->map, &d->phys_map, &index, &nb, leaf, P_L2_LEVELS - 1);
213 }
214
215 /* Compact a non leaf page entry. Simply detect that the entry has a single child,
216  * and update our entry so we can skip it and go directly to the destination.
217  */
218 static void phys_page_compact(PhysPageEntry *lp, Node *nodes, unsigned long *compacted)
219 {
220     unsigned valid_ptr = P_L2_SIZE;
221     int valid = 0;
222     PhysPageEntry *p;
223     int i;
224
225     if (lp->ptr == PHYS_MAP_NODE_NIL) {
226         return;
227     }
228
229     p = nodes[lp->ptr];
230     for (i = 0; i < P_L2_SIZE; i++) {
231         if (p[i].ptr == PHYS_MAP_NODE_NIL) {
232             continue;
233         }
234
235         valid_ptr = i;
236         valid++;
237         if (p[i].skip) {
238             phys_page_compact(&p[i], nodes, compacted);
239         }
240     }
241
242     /* We can only compress if there's only one child. */
243     if (valid != 1) {
244         return;
245     }
246
247     assert(valid_ptr < P_L2_SIZE);
248
249     /* Don't compress if it won't fit in the # of bits we have. */
250     if (lp->skip + p[valid_ptr].skip >= (1 << 3)) {
251         return;
252     }
253
254     lp->ptr = p[valid_ptr].ptr;
255     if (!p[valid_ptr].skip) {
256         /* If our only child is a leaf, make this a leaf. */
257         /* By design, we should have made this node a leaf to begin with so we
258          * should never reach here.
259          * But since it's so simple to handle this, let's do it just in case we
260          * change this rule.
261          */
262         lp->skip = 0;
263     } else {
264         lp->skip += p[valid_ptr].skip;
265     }
266 }
267
268 static void phys_page_compact_all(AddressSpaceDispatch *d, int nodes_nb)
269 {
270     DECLARE_BITMAP(compacted, nodes_nb);
271
272     if (d->phys_map.skip) {
273         phys_page_compact(&d->phys_map, d->map.nodes, compacted);
274     }
275 }
276
277 static MemoryRegionSection *phys_page_find(PhysPageEntry lp, hwaddr addr,
278                                            Node *nodes, MemoryRegionSection *sections)
279 {
280     PhysPageEntry *p;
281     hwaddr index = addr >> TARGET_PAGE_BITS;
282     int i;
283
284     for (i = P_L2_LEVELS; lp.skip && (i -= lp.skip) >= 0;) {
285         if (lp.ptr == PHYS_MAP_NODE_NIL) {
286             return &sections[PHYS_SECTION_UNASSIGNED];
287         }
288         p = nodes[lp.ptr];
289         lp = p[(index >> (i * P_L2_BITS)) & (P_L2_SIZE - 1)];
290     }
291
292     if (sections[lp.ptr].size.hi ||
293         range_covers_byte(sections[lp.ptr].offset_within_address_space,
294                           sections[lp.ptr].size.lo, addr)) {
295         return &sections[lp.ptr];
296     } else {
297         return &sections[PHYS_SECTION_UNASSIGNED];
298     }
299 }
300
301 bool memory_region_is_unassigned(MemoryRegion *mr)
302 {
303     return mr != &io_mem_rom && mr != &io_mem_notdirty && !mr->rom_device
304         && mr != &io_mem_watch;
305 }
306
307 static MemoryRegionSection *address_space_lookup_region(AddressSpaceDispatch *d,
308                                                         hwaddr addr,
309                                                         bool resolve_subpage)
310 {
311     MemoryRegionSection *section;
312     subpage_t *subpage;
313
314     section = phys_page_find(d->phys_map, addr, d->map.nodes, d->map.sections);
315     if (resolve_subpage && section->mr->subpage) {
316         subpage = container_of(section->mr, subpage_t, iomem);
317         section = &d->map.sections[subpage->sub_section[SUBPAGE_IDX(addr)]];
318     }
319     return section;
320 }
321
322 static MemoryRegionSection *
323 address_space_translate_internal(AddressSpaceDispatch *d, hwaddr addr, hwaddr *xlat,
324                                  hwaddr *plen, bool resolve_subpage)
325 {
326     MemoryRegionSection *section;
327     Int128 diff;
328
329     section = address_space_lookup_region(d, addr, resolve_subpage);
330     /* Compute offset within MemoryRegionSection */
331     addr -= section->offset_within_address_space;
332
333     /* Compute offset within MemoryRegion */
334     *xlat = addr + section->offset_within_region;
335
336     diff = int128_sub(section->mr->size, int128_make64(addr));
337     *plen = int128_get64(int128_min(diff, int128_make64(*plen)));
338     return section;
339 }
340
341 static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write)
342 {
343     if (memory_region_is_ram(mr)) {
344         return !(is_write && mr->readonly);
345     }
346     if (memory_region_is_romd(mr)) {
347         return !is_write;
348     }
349
350     return false;
351 }
352
353 MemoryRegion *address_space_translate(AddressSpace *as, hwaddr addr,
354                                       hwaddr *xlat, hwaddr *plen,
355                                       bool is_write)
356 {
357     IOMMUTLBEntry iotlb;
358     MemoryRegionSection *section;
359     MemoryRegion *mr;
360     hwaddr len = *plen;
361
362     for (;;) {
363         section = address_space_translate_internal(as->dispatch, addr, &addr, plen, true);
364         mr = section->mr;
365
366         if (!mr->iommu_ops) {
367             break;
368         }
369
370         iotlb = mr->iommu_ops->translate(mr, addr);
371         addr = ((iotlb.translated_addr & ~iotlb.addr_mask)
372                 | (addr & iotlb.addr_mask));
373         len = MIN(len, (addr | iotlb.addr_mask) - addr + 1);
374         if (!(iotlb.perm & (1 << is_write))) {
375             mr = &io_mem_unassigned;
376             break;
377         }
378
379         as = iotlb.target_as;
380     }
381
382     if (memory_access_is_direct(mr, is_write)) {
383         hwaddr page = ((addr & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE) - addr;
384         len = MIN(page, len);
385     }
386
387     *plen = len;
388     *xlat = addr;
389     return mr;
390 }
391
392 MemoryRegionSection *
393 address_space_translate_for_iotlb(AddressSpace *as, hwaddr addr, hwaddr *xlat,
394                                   hwaddr *plen)
395 {
396     MemoryRegionSection *section;
397     section = address_space_translate_internal(as->dispatch, addr, xlat, plen, false);
398
399     assert(!section->mr->iommu_ops);
400     return section;
401 }
402 #endif
403
404 void cpu_exec_init_all(void)
405 {
406 #if !defined(CONFIG_USER_ONLY)
407     qemu_mutex_init(&ram_list.mutex);
408     memory_map_init();
409     io_mem_init();
410 #endif
411 }
412
413 #if !defined(CONFIG_USER_ONLY)
414
415 static int cpu_common_post_load(void *opaque, int version_id)
416 {
417     CPUState *cpu = opaque;
418
419     /* 0x01 was CPU_INTERRUPT_EXIT. This line can be removed when the
420        version_id is increased. */
421     cpu->interrupt_request &= ~0x01;
422     tlb_flush(cpu->env_ptr, 1);
423
424     return 0;
425 }
426
427 const VMStateDescription vmstate_cpu_common = {
428     .name = "cpu_common",
429     .version_id = 1,
430     .minimum_version_id = 1,
431     .minimum_version_id_old = 1,
432     .post_load = cpu_common_post_load,
433     .fields      = (VMStateField []) {
434         VMSTATE_UINT32(halted, CPUState),
435         VMSTATE_UINT32(interrupt_request, CPUState),
436         VMSTATE_END_OF_LIST()
437     }
438 };
439
440 #endif
441
442 CPUState *qemu_get_cpu(int index)
443 {
444     CPUState *cpu;
445
446     CPU_FOREACH(cpu) {
447         if (cpu->cpu_index == index) {
448             return cpu;
449         }
450     }
451
452     return NULL;
453 }
454
455 #if !defined(CONFIG_USER_ONLY)
456 void tcg_cpu_address_space_init(CPUState *cpu, AddressSpace *as)
457 {
458     /* We only support one address space per cpu at the moment.  */
459     assert(cpu->as == as);
460
461     if (cpu->tcg_as_listener) {
462         memory_listener_unregister(cpu->tcg_as_listener);
463     } else {
464         cpu->tcg_as_listener = g_new0(MemoryListener, 1);
465     }
466     cpu->tcg_as_listener->commit = tcg_commit;
467     memory_listener_register(cpu->tcg_as_listener, as);
468 }
469 #endif
470
471 void cpu_exec_init(CPUArchState *env)
472 {
473     CPUState *cpu = ENV_GET_CPU(env);
474     CPUClass *cc = CPU_GET_CLASS(cpu);
475     CPUState *some_cpu;
476     int cpu_index;
477
478 #if defined(CONFIG_USER_ONLY)
479     cpu_list_lock();
480 #endif
481     cpu_index = 0;
482     CPU_FOREACH(some_cpu) {
483         cpu_index++;
484     }
485     cpu->cpu_index = cpu_index;
486     cpu->numa_node = 0;
487     QTAILQ_INIT(&env->breakpoints);
488     QTAILQ_INIT(&env->watchpoints);
489 #ifndef CONFIG_USER_ONLY
490     cpu->as = &address_space_memory;
491     cpu->thread_id = qemu_get_thread_id();
492 #endif
493     QTAILQ_INSERT_TAIL(&cpus, cpu, node);
494 #if defined(CONFIG_USER_ONLY)
495     cpu_list_unlock();
496 #endif
497     if (qdev_get_vmsd(DEVICE(cpu)) == NULL) {
498         vmstate_register(NULL, cpu_index, &vmstate_cpu_common, cpu);
499     }
500 #if defined(CPU_SAVE_VERSION) && !defined(CONFIG_USER_ONLY)
501     register_savevm(NULL, "cpu", cpu_index, CPU_SAVE_VERSION,
502                     cpu_save, cpu_load, env);
503     assert(cc->vmsd == NULL);
504     assert(qdev_get_vmsd(DEVICE(cpu)) == NULL);
505 #endif
506     if (cc->vmsd != NULL) {
507         vmstate_register(NULL, cpu_index, cc->vmsd, cpu);
508     }
509 }
510
511 #if defined(TARGET_HAS_ICE)
512 #if defined(CONFIG_USER_ONLY)
513 static void breakpoint_invalidate(CPUState *cpu, target_ulong pc)
514 {
515     tb_invalidate_phys_page_range(pc, pc + 1, 0);
516 }
517 #else
518 static void breakpoint_invalidate(CPUState *cpu, target_ulong pc)
519 {
520     hwaddr phys = cpu_get_phys_page_debug(cpu, pc);
521     if (phys != -1) {
522         tb_invalidate_phys_addr(cpu->as,
523                                 phys | (pc & ~TARGET_PAGE_MASK));
524     }
525 }
526 #endif
527 #endif /* TARGET_HAS_ICE */
528
529 #if defined(CONFIG_USER_ONLY)
530 void cpu_watchpoint_remove_all(CPUArchState *env, int mask)
531
532 {
533 }
534
535 int cpu_watchpoint_insert(CPUArchState *env, target_ulong addr, target_ulong len,
536                           int flags, CPUWatchpoint **watchpoint)
537 {
538     return -ENOSYS;
539 }
540 #else
541 /* Add a watchpoint.  */
542 int cpu_watchpoint_insert(CPUArchState *env, target_ulong addr, target_ulong len,
543                           int flags, CPUWatchpoint **watchpoint)
544 {
545     target_ulong len_mask = ~(len - 1);
546     CPUWatchpoint *wp;
547
548     /* sanity checks: allow power-of-2 lengths, deny unaligned watchpoints */
549     if ((len & (len - 1)) || (addr & ~len_mask) ||
550             len == 0 || len > TARGET_PAGE_SIZE) {
551         fprintf(stderr, "qemu: tried to set invalid watchpoint at "
552                 TARGET_FMT_lx ", len=" TARGET_FMT_lu "\n", addr, len);
553         return -EINVAL;
554     }
555     wp = g_malloc(sizeof(*wp));
556
557     wp->vaddr = addr;
558     wp->len_mask = len_mask;
559     wp->flags = flags;
560
561     /* keep all GDB-injected watchpoints in front */
562     if (flags & BP_GDB)
563         QTAILQ_INSERT_HEAD(&env->watchpoints, wp, entry);
564     else
565         QTAILQ_INSERT_TAIL(&env->watchpoints, wp, entry);
566
567     tlb_flush_page(env, addr);
568
569     if (watchpoint)
570         *watchpoint = wp;
571     return 0;
572 }
573
574 /* Remove a specific watchpoint.  */
575 int cpu_watchpoint_remove(CPUArchState *env, target_ulong addr, target_ulong len,
576                           int flags)
577 {
578     target_ulong len_mask = ~(len - 1);
579     CPUWatchpoint *wp;
580
581     QTAILQ_FOREACH(wp, &env->watchpoints, entry) {
582         if (addr == wp->vaddr && len_mask == wp->len_mask
583                 && flags == (wp->flags & ~BP_WATCHPOINT_HIT)) {
584             cpu_watchpoint_remove_by_ref(env, wp);
585             return 0;
586         }
587     }
588     return -ENOENT;
589 }
590
591 /* Remove a specific watchpoint by reference.  */
592 void cpu_watchpoint_remove_by_ref(CPUArchState *env, CPUWatchpoint *watchpoint)
593 {
594     QTAILQ_REMOVE(&env->watchpoints, watchpoint, entry);
595
596     tlb_flush_page(env, watchpoint->vaddr);
597
598     g_free(watchpoint);
599 }
600
601 /* Remove all matching watchpoints.  */
602 void cpu_watchpoint_remove_all(CPUArchState *env, int mask)
603 {
604     CPUWatchpoint *wp, *next;
605
606     QTAILQ_FOREACH_SAFE(wp, &env->watchpoints, entry, next) {
607         if (wp->flags & mask)
608             cpu_watchpoint_remove_by_ref(env, wp);
609     }
610 }
611 #endif
612
613 /* Add a breakpoint.  */
614 int cpu_breakpoint_insert(CPUArchState *env, target_ulong pc, int flags,
615                           CPUBreakpoint **breakpoint)
616 {
617 #if defined(TARGET_HAS_ICE)
618     CPUBreakpoint *bp;
619
620     bp = g_malloc(sizeof(*bp));
621
622     bp->pc = pc;
623     bp->flags = flags;
624
625     /* keep all GDB-injected breakpoints in front */
626     if (flags & BP_GDB) {
627         QTAILQ_INSERT_HEAD(&env->breakpoints, bp, entry);
628     } else {
629         QTAILQ_INSERT_TAIL(&env->breakpoints, bp, entry);
630     }
631
632     breakpoint_invalidate(ENV_GET_CPU(env), pc);
633
634     if (breakpoint) {
635         *breakpoint = bp;
636     }
637     return 0;
638 #else
639     return -ENOSYS;
640 #endif
641 }
642
643 /* Remove a specific breakpoint.  */
644 int cpu_breakpoint_remove(CPUArchState *env, target_ulong pc, int flags)
645 {
646 #if defined(TARGET_HAS_ICE)
647     CPUBreakpoint *bp;
648
649     QTAILQ_FOREACH(bp, &env->breakpoints, entry) {
650         if (bp->pc == pc && bp->flags == flags) {
651             cpu_breakpoint_remove_by_ref(env, bp);
652             return 0;
653         }
654     }
655     return -ENOENT;
656 #else
657     return -ENOSYS;
658 #endif
659 }
660
661 /* Remove a specific breakpoint by reference.  */
662 void cpu_breakpoint_remove_by_ref(CPUArchState *env, CPUBreakpoint *breakpoint)
663 {
664 #if defined(TARGET_HAS_ICE)
665     QTAILQ_REMOVE(&env->breakpoints, breakpoint, entry);
666
667     breakpoint_invalidate(ENV_GET_CPU(env), breakpoint->pc);
668
669     g_free(breakpoint);
670 #endif
671 }
672
673 /* Remove all matching breakpoints. */
674 void cpu_breakpoint_remove_all(CPUArchState *env, int mask)
675 {
676 #if defined(TARGET_HAS_ICE)
677     CPUBreakpoint *bp, *next;
678
679     QTAILQ_FOREACH_SAFE(bp, &env->breakpoints, entry, next) {
680         if (bp->flags & mask)
681             cpu_breakpoint_remove_by_ref(env, bp);
682     }
683 #endif
684 }
685
686 /* enable or disable single step mode. EXCP_DEBUG is returned by the
687    CPU loop after each instruction */
688 void cpu_single_step(CPUState *cpu, int enabled)
689 {
690 #if defined(TARGET_HAS_ICE)
691     if (cpu->singlestep_enabled != enabled) {
692         cpu->singlestep_enabled = enabled;
693         if (kvm_enabled()) {
694             kvm_update_guest_debug(cpu, 0);
695         } else {
696             /* must flush all the translated code to avoid inconsistencies */
697             /* XXX: only flush what is necessary */
698             CPUArchState *env = cpu->env_ptr;
699             tb_flush(env);
700         }
701     }
702 #endif
703 }
704
705 void cpu_abort(CPUArchState *env, const char *fmt, ...)
706 {
707     CPUState *cpu = ENV_GET_CPU(env);
708     va_list ap;
709     va_list ap2;
710
711     va_start(ap, fmt);
712     va_copy(ap2, ap);
713     fprintf(stderr, "qemu: fatal: ");
714     vfprintf(stderr, fmt, ap);
715     fprintf(stderr, "\n");
716     cpu_dump_state(cpu, stderr, fprintf, CPU_DUMP_FPU | CPU_DUMP_CCOP);
717     if (qemu_log_enabled()) {
718         qemu_log("qemu: fatal: ");
719         qemu_log_vprintf(fmt, ap2);
720         qemu_log("\n");
721         log_cpu_state(cpu, CPU_DUMP_FPU | CPU_DUMP_CCOP);
722         qemu_log_flush();
723         qemu_log_close();
724     }
725     va_end(ap2);
726     va_end(ap);
727 #if defined(CONFIG_USER_ONLY)
728     {
729         struct sigaction act;
730         sigfillset(&act.sa_mask);
731         act.sa_handler = SIG_DFL;
732         sigaction(SIGABRT, &act, NULL);
733     }
734 #endif
735     abort();
736 }
737
738 #if !defined(CONFIG_USER_ONLY)
739 static RAMBlock *qemu_get_ram_block(ram_addr_t addr)
740 {
741     RAMBlock *block;
742
743     /* The list is protected by the iothread lock here.  */
744     block = ram_list.mru_block;
745     if (block && addr - block->offset < block->length) {
746         goto found;
747     }
748     QTAILQ_FOREACH(block, &ram_list.blocks, next) {
749         if (addr - block->offset < block->length) {
750             goto found;
751         }
752     }
753
754     fprintf(stderr, "Bad ram offset %" PRIx64 "\n", (uint64_t)addr);
755     abort();
756
757 found:
758     ram_list.mru_block = block;
759     return block;
760 }
761
762 static void tlb_reset_dirty_range_all(ram_addr_t start, ram_addr_t length)
763 {
764     ram_addr_t start1;
765     RAMBlock *block;
766     ram_addr_t end;
767
768     end = TARGET_PAGE_ALIGN(start + length);
769     start &= TARGET_PAGE_MASK;
770
771     block = qemu_get_ram_block(start);
772     assert(block == qemu_get_ram_block(end - 1));
773     start1 = (uintptr_t)block->host + (start - block->offset);
774     cpu_tlb_reset_dirty_all(start1, length);
775 }
776
777 /* Note: start and end must be within the same ram block.  */
778 void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t length,
779                                      unsigned client)
780 {
781     if (length == 0)
782         return;
783     cpu_physical_memory_clear_dirty_range(start, length, client);
784
785     if (tcg_enabled()) {
786         tlb_reset_dirty_range_all(start, length);
787     }
788 }
789
790 static void cpu_physical_memory_set_dirty_tracking(bool enable)
791 {
792     in_migration = enable;
793 }
794
795 hwaddr memory_region_section_get_iotlb(CPUArchState *env,
796                                        MemoryRegionSection *section,
797                                        target_ulong vaddr,
798                                        hwaddr paddr, hwaddr xlat,
799                                        int prot,
800                                        target_ulong *address)
801 {
802     hwaddr iotlb;
803     CPUWatchpoint *wp;
804
805     if (memory_region_is_ram(section->mr)) {
806         /* Normal RAM.  */
807         iotlb = (memory_region_get_ram_addr(section->mr) & TARGET_PAGE_MASK)
808             + xlat;
809         if (!section->readonly) {
810             iotlb |= PHYS_SECTION_NOTDIRTY;
811         } else {
812             iotlb |= PHYS_SECTION_ROM;
813         }
814     } else {
815         iotlb = section - section->address_space->dispatch->map.sections;
816         iotlb += xlat;
817     }
818
819     /* Make accesses to pages with watchpoints go via the
820        watchpoint trap routines.  */
821     QTAILQ_FOREACH(wp, &env->watchpoints, entry) {
822         if (vaddr == (wp->vaddr & TARGET_PAGE_MASK)) {
823             /* Avoid trapping reads of pages with a write breakpoint. */
824             if ((prot & PAGE_WRITE) || (wp->flags & BP_MEM_READ)) {
825                 iotlb = PHYS_SECTION_WATCH + paddr;
826                 *address |= TLB_MMIO;
827                 break;
828             }
829         }
830     }
831
832     return iotlb;
833 }
834 #endif /* defined(CONFIG_USER_ONLY) */
835
836 #if !defined(CONFIG_USER_ONLY)
837
838 static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
839                              uint16_t section);
840 static subpage_t *subpage_init(AddressSpace *as, hwaddr base);
841
842 static void *(*phys_mem_alloc)(size_t size) = qemu_anon_ram_alloc;
843
844 /*
845  * Set a custom physical guest memory alloator.
846  * Accelerators with unusual needs may need this.  Hopefully, we can
847  * get rid of it eventually.
848  */
849 void phys_mem_set_alloc(void *(*alloc)(size_t))
850 {
851     phys_mem_alloc = alloc;
852 }
853
854 static uint16_t phys_section_add(PhysPageMap *map,
855                                  MemoryRegionSection *section)
856 {
857     /* The physical section number is ORed with a page-aligned
858      * pointer to produce the iotlb entries.  Thus it should
859      * never overflow into the page-aligned value.
860      */
861     assert(map->sections_nb < TARGET_PAGE_SIZE);
862
863     if (map->sections_nb == map->sections_nb_alloc) {
864         map->sections_nb_alloc = MAX(map->sections_nb_alloc * 2, 16);
865         map->sections = g_renew(MemoryRegionSection, map->sections,
866                                 map->sections_nb_alloc);
867     }
868     map->sections[map->sections_nb] = *section;
869     memory_region_ref(section->mr);
870     return map->sections_nb++;
871 }
872
873 static void phys_section_destroy(MemoryRegion *mr)
874 {
875     memory_region_unref(mr);
876
877     if (mr->subpage) {
878         subpage_t *subpage = container_of(mr, subpage_t, iomem);
879         memory_region_destroy(&subpage->iomem);
880         g_free(subpage);
881     }
882 }
883
884 static void phys_sections_free(PhysPageMap *map)
885 {
886     while (map->sections_nb > 0) {
887         MemoryRegionSection *section = &map->sections[--map->sections_nb];
888         phys_section_destroy(section->mr);
889     }
890     g_free(map->sections);
891     g_free(map->nodes);
892 }
893
894 static void register_subpage(AddressSpaceDispatch *d, MemoryRegionSection *section)
895 {
896     subpage_t *subpage;
897     hwaddr base = section->offset_within_address_space
898         & TARGET_PAGE_MASK;
899     MemoryRegionSection *existing = phys_page_find(d->phys_map, base,
900                                                    d->map.nodes, d->map.sections);
901     MemoryRegionSection subsection = {
902         .offset_within_address_space = base,
903         .size = int128_make64(TARGET_PAGE_SIZE),
904     };
905     hwaddr start, end;
906
907     assert(existing->mr->subpage || existing->mr == &io_mem_unassigned);
908
909     if (!(existing->mr->subpage)) {
910         subpage = subpage_init(d->as, base);
911         subsection.address_space = d->as;
912         subsection.mr = &subpage->iomem;
913         phys_page_set(d, base >> TARGET_PAGE_BITS, 1,
914                       phys_section_add(&d->map, &subsection));
915     } else {
916         subpage = container_of(existing->mr, subpage_t, iomem);
917     }
918     start = section->offset_within_address_space & ~TARGET_PAGE_MASK;
919     end = start + int128_get64(section->size) - 1;
920     subpage_register(subpage, start, end,
921                      phys_section_add(&d->map, section));
922 }
923
924
925 static void register_multipage(AddressSpaceDispatch *d,
926                                MemoryRegionSection *section)
927 {
928     hwaddr start_addr = section->offset_within_address_space;
929     uint16_t section_index = phys_section_add(&d->map, section);
930     uint64_t num_pages = int128_get64(int128_rshift(section->size,
931                                                     TARGET_PAGE_BITS));
932
933     assert(num_pages);
934     phys_page_set(d, start_addr >> TARGET_PAGE_BITS, num_pages, section_index);
935 }
936
937 static void mem_add(MemoryListener *listener, MemoryRegionSection *section)
938 {
939     AddressSpace *as = container_of(listener, AddressSpace, dispatch_listener);
940     AddressSpaceDispatch *d = as->next_dispatch;
941     MemoryRegionSection now = *section, remain = *section;
942     Int128 page_size = int128_make64(TARGET_PAGE_SIZE);
943
944     if (now.offset_within_address_space & ~TARGET_PAGE_MASK) {
945         uint64_t left = TARGET_PAGE_ALIGN(now.offset_within_address_space)
946                        - now.offset_within_address_space;
947
948         now.size = int128_min(int128_make64(left), now.size);
949         register_subpage(d, &now);
950     } else {
951         now.size = int128_zero();
952     }
953     while (int128_ne(remain.size, now.size)) {
954         remain.size = int128_sub(remain.size, now.size);
955         remain.offset_within_address_space += int128_get64(now.size);
956         remain.offset_within_region += int128_get64(now.size);
957         now = remain;
958         if (int128_lt(remain.size, page_size)) {
959             register_subpage(d, &now);
960         } else if (remain.offset_within_address_space & ~TARGET_PAGE_MASK) {
961             now.size = page_size;
962             register_subpage(d, &now);
963         } else {
964             now.size = int128_and(now.size, int128_neg(page_size));
965             register_multipage(d, &now);
966         }
967     }
968 }
969
970 void qemu_flush_coalesced_mmio_buffer(void)
971 {
972     if (kvm_enabled())
973         kvm_flush_coalesced_mmio_buffer();
974 }
975
976 void qemu_mutex_lock_ramlist(void)
977 {
978     qemu_mutex_lock(&ram_list.mutex);
979 }
980
981 void qemu_mutex_unlock_ramlist(void)
982 {
983     qemu_mutex_unlock(&ram_list.mutex);
984 }
985
986 #ifdef __linux__
987
988 #include <sys/vfs.h>
989
990 #define HUGETLBFS_MAGIC       0x958458f6
991
992 static long gethugepagesize(const char *path)
993 {
994     struct statfs fs;
995     int ret;
996
997     do {
998         ret = statfs(path, &fs);
999     } while (ret != 0 && errno == EINTR);
1000
1001     if (ret != 0) {
1002         perror(path);
1003         return 0;
1004     }
1005
1006     if (fs.f_type != HUGETLBFS_MAGIC)
1007         fprintf(stderr, "Warning: path not on HugeTLBFS: %s\n", path);
1008
1009     return fs.f_bsize;
1010 }
1011
1012 static sigjmp_buf sigjump;
1013
1014 static void sigbus_handler(int signal)
1015 {
1016     siglongjmp(sigjump, 1);
1017 }
1018
1019 static void *file_ram_alloc(RAMBlock *block,
1020                             ram_addr_t memory,
1021                             const char *path)
1022 {
1023     char *filename;
1024     char *sanitized_name;
1025     char *c;
1026     void *area;
1027     int fd;
1028     unsigned long hpagesize;
1029
1030     hpagesize = gethugepagesize(path);
1031     if (!hpagesize) {
1032         return NULL;
1033     }
1034
1035     if (memory < hpagesize) {
1036         return NULL;
1037     }
1038
1039     if (kvm_enabled() && !kvm_has_sync_mmu()) {
1040         fprintf(stderr, "host lacks kvm mmu notifiers, -mem-path unsupported\n");
1041         return NULL;
1042     }
1043
1044     /* Make name safe to use with mkstemp by replacing '/' with '_'. */
1045     sanitized_name = g_strdup(block->mr->name);
1046     for (c = sanitized_name; *c != '\0'; c++) {
1047         if (*c == '/')
1048             *c = '_';
1049     }
1050
1051     filename = g_strdup_printf("%s/qemu_back_mem.%s.XXXXXX", path,
1052                                sanitized_name);
1053     g_free(sanitized_name);
1054
1055     fd = mkstemp(filename);
1056     if (fd < 0) {
1057         perror("unable to create backing store for hugepages");
1058         g_free(filename);
1059         return NULL;
1060     }
1061     unlink(filename);
1062     g_free(filename);
1063
1064     memory = (memory+hpagesize-1) & ~(hpagesize-1);
1065
1066     /*
1067      * ftruncate is not supported by hugetlbfs in older
1068      * hosts, so don't bother bailing out on errors.
1069      * If anything goes wrong with it under other filesystems,
1070      * mmap will fail.
1071      */
1072     if (ftruncate(fd, memory))
1073         perror("ftruncate");
1074
1075     area = mmap(0, memory, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
1076     if (area == MAP_FAILED) {
1077         perror("file_ram_alloc: can't mmap RAM pages");
1078         close(fd);
1079         return (NULL);
1080     }
1081
1082     if (mem_prealloc) {
1083         int ret, i;
1084         struct sigaction act, oldact;
1085         sigset_t set, oldset;
1086
1087         memset(&act, 0, sizeof(act));
1088         act.sa_handler = &sigbus_handler;
1089         act.sa_flags = 0;
1090
1091         ret = sigaction(SIGBUS, &act, &oldact);
1092         if (ret) {
1093             perror("file_ram_alloc: failed to install signal handler");
1094             exit(1);
1095         }
1096
1097         /* unblock SIGBUS */
1098         sigemptyset(&set);
1099         sigaddset(&set, SIGBUS);
1100         pthread_sigmask(SIG_UNBLOCK, &set, &oldset);
1101
1102         if (sigsetjmp(sigjump, 1)) {
1103             fprintf(stderr, "file_ram_alloc: failed to preallocate pages\n");
1104             exit(1);
1105         }
1106
1107         /* MAP_POPULATE silently ignores failures */
1108         for (i = 0; i < (memory/hpagesize); i++) {
1109             memset(area + (hpagesize*i), 0, 1);
1110         }
1111
1112         ret = sigaction(SIGBUS, &oldact, NULL);
1113         if (ret) {
1114             perror("file_ram_alloc: failed to reinstall signal handler");
1115             exit(1);
1116         }
1117
1118         pthread_sigmask(SIG_SETMASK, &oldset, NULL);
1119     }
1120
1121     block->fd = fd;
1122     return area;
1123 }
1124 #else
1125 static void *file_ram_alloc(RAMBlock *block,
1126                             ram_addr_t memory,
1127                             const char *path)
1128 {
1129     fprintf(stderr, "-mem-path not supported on this host\n");
1130     exit(1);
1131 }
1132 #endif
1133
1134 static ram_addr_t find_ram_offset(ram_addr_t size)
1135 {
1136     RAMBlock *block, *next_block;
1137     ram_addr_t offset = RAM_ADDR_MAX, mingap = RAM_ADDR_MAX;
1138
1139     assert(size != 0); /* it would hand out same offset multiple times */
1140
1141     if (QTAILQ_EMPTY(&ram_list.blocks))
1142         return 0;
1143
1144     QTAILQ_FOREACH(block, &ram_list.blocks, next) {
1145         ram_addr_t end, next = RAM_ADDR_MAX;
1146
1147         end = block->offset + block->length;
1148
1149         QTAILQ_FOREACH(next_block, &ram_list.blocks, next) {
1150             if (next_block->offset >= end) {
1151                 next = MIN(next, next_block->offset);
1152             }
1153         }
1154         if (next - end >= size && next - end < mingap) {
1155             offset = end;
1156             mingap = next - end;
1157         }
1158     }
1159
1160     if (offset == RAM_ADDR_MAX) {
1161         fprintf(stderr, "Failed to find gap of requested size: %" PRIu64 "\n",
1162                 (uint64_t)size);
1163         abort();
1164     }
1165
1166     return offset;
1167 }
1168
1169 ram_addr_t last_ram_offset(void)
1170 {
1171     RAMBlock *block;
1172     ram_addr_t last = 0;
1173
1174     QTAILQ_FOREACH(block, &ram_list.blocks, next)
1175         last = MAX(last, block->offset + block->length);
1176
1177     return last;
1178 }
1179
1180 static void qemu_ram_setup_dump(void *addr, ram_addr_t size)
1181 {
1182     int ret;
1183
1184     /* Use MADV_DONTDUMP, if user doesn't want the guest memory in the core */
1185     if (!qemu_opt_get_bool(qemu_get_machine_opts(),
1186                            "dump-guest-core", true)) {
1187         ret = qemu_madvise(addr, size, QEMU_MADV_DONTDUMP);
1188         if (ret) {
1189             perror("qemu_madvise");
1190             fprintf(stderr, "madvise doesn't support MADV_DONTDUMP, "
1191                             "but dump_guest_core=off specified\n");
1192         }
1193     }
1194 }
1195
1196 void qemu_ram_set_idstr(ram_addr_t addr, const char *name, DeviceState *dev)
1197 {
1198     RAMBlock *new_block, *block;
1199
1200     new_block = NULL;
1201     QTAILQ_FOREACH(block, &ram_list.blocks, next) {
1202         if (block->offset == addr) {
1203             new_block = block;
1204             break;
1205         }
1206     }
1207     assert(new_block);
1208     assert(!new_block->idstr[0]);
1209
1210     if (dev) {
1211         char *id = qdev_get_dev_path(dev);
1212         if (id) {
1213             snprintf(new_block->idstr, sizeof(new_block->idstr), "%s/", id);
1214             g_free(id);
1215         }
1216     }
1217     pstrcat(new_block->idstr, sizeof(new_block->idstr), name);
1218
1219     /* This assumes the iothread lock is taken here too.  */
1220     qemu_mutex_lock_ramlist();
1221     QTAILQ_FOREACH(block, &ram_list.blocks, next) {
1222         if (block != new_block && !strcmp(block->idstr, new_block->idstr)) {
1223             fprintf(stderr, "RAMBlock \"%s\" already registered, abort!\n",
1224                     new_block->idstr);
1225             abort();
1226         }
1227     }
1228     qemu_mutex_unlock_ramlist();
1229 }
1230
1231 static int memory_try_enable_merging(void *addr, size_t len)
1232 {
1233     if (!qemu_opt_get_bool(qemu_get_machine_opts(), "mem-merge", true)) {
1234         /* disabled by the user */
1235         return 0;
1236     }
1237
1238     return qemu_madvise(addr, len, QEMU_MADV_MERGEABLE);
1239 }
1240
1241 ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host,
1242                                    MemoryRegion *mr)
1243 {
1244     RAMBlock *block, *new_block;
1245     ram_addr_t old_ram_size, new_ram_size;
1246
1247     old_ram_size = last_ram_offset() >> TARGET_PAGE_BITS;
1248
1249     size = TARGET_PAGE_ALIGN(size);
1250     new_block = g_malloc0(sizeof(*new_block));
1251     new_block->fd = -1;
1252
1253     /* This assumes the iothread lock is taken here too.  */
1254     qemu_mutex_lock_ramlist();
1255     new_block->mr = mr;
1256     new_block->offset = find_ram_offset(size);
1257     if (host) {
1258         new_block->host = host;
1259         new_block->flags |= RAM_PREALLOC_MASK;
1260     } else if (xen_enabled()) {
1261         if (mem_path) {
1262             fprintf(stderr, "-mem-path not supported with Xen\n");
1263             exit(1);
1264         }
1265         xen_ram_alloc(new_block->offset, size, mr);
1266     } else {
1267         if (mem_path) {
1268             if (phys_mem_alloc != qemu_anon_ram_alloc) {
1269                 /*
1270                  * file_ram_alloc() needs to allocate just like
1271                  * phys_mem_alloc, but we haven't bothered to provide
1272                  * a hook there.
1273                  */
1274                 fprintf(stderr,
1275                         "-mem-path not supported with this accelerator\n");
1276                 exit(1);
1277             }
1278             new_block->host = file_ram_alloc(new_block, size, mem_path);
1279         }
1280         if (!new_block->host) {
1281             new_block->host = phys_mem_alloc(size);
1282             if (!new_block->host) {
1283                 fprintf(stderr, "Cannot set up guest memory '%s': %s\n",
1284                         new_block->mr->name, strerror(errno));
1285                 exit(1);
1286             }
1287             memory_try_enable_merging(new_block->host, size);
1288         }
1289     }
1290     new_block->length = size;
1291
1292     /* Keep the list sorted from biggest to smallest block.  */
1293     QTAILQ_FOREACH(block, &ram_list.blocks, next) {
1294         if (block->length < new_block->length) {
1295             break;
1296         }
1297     }
1298     if (block) {
1299         QTAILQ_INSERT_BEFORE(block, new_block, next);
1300     } else {
1301         QTAILQ_INSERT_TAIL(&ram_list.blocks, new_block, next);
1302     }
1303     ram_list.mru_block = NULL;
1304
1305     ram_list.version++;
1306     qemu_mutex_unlock_ramlist();
1307
1308     new_ram_size = last_ram_offset() >> TARGET_PAGE_BITS;
1309
1310     if (new_ram_size > old_ram_size) {
1311         int i;
1312         for (i = 0; i < DIRTY_MEMORY_NUM; i++) {
1313             ram_list.dirty_memory[i] =
1314                 bitmap_zero_extend(ram_list.dirty_memory[i],
1315                                    old_ram_size, new_ram_size);
1316        }
1317     }
1318     cpu_physical_memory_set_dirty_range(new_block->offset, size);
1319
1320     qemu_ram_setup_dump(new_block->host, size);
1321     qemu_madvise(new_block->host, size, QEMU_MADV_HUGEPAGE);
1322     qemu_madvise(new_block->host, size, QEMU_MADV_DONTFORK);
1323
1324     if (kvm_enabled())
1325         kvm_setup_guest_memory(new_block->host, size);
1326
1327     return new_block->offset;
1328 }
1329
1330 ram_addr_t qemu_ram_alloc(ram_addr_t size, MemoryRegion *mr)
1331 {
1332     return qemu_ram_alloc_from_ptr(size, NULL, mr);
1333 }
1334
1335 void qemu_ram_free_from_ptr(ram_addr_t addr)
1336 {
1337     RAMBlock *block;
1338
1339     /* This assumes the iothread lock is taken here too.  */
1340     qemu_mutex_lock_ramlist();
1341     QTAILQ_FOREACH(block, &ram_list.blocks, next) {
1342         if (addr == block->offset) {
1343             QTAILQ_REMOVE(&ram_list.blocks, block, next);
1344             ram_list.mru_block = NULL;
1345             ram_list.version++;
1346             g_free(block);
1347             break;
1348         }
1349     }
1350     qemu_mutex_unlock_ramlist();
1351 }
1352
1353 void qemu_ram_free(ram_addr_t addr)
1354 {
1355     RAMBlock *block;
1356
1357     /* This assumes the iothread lock is taken here too.  */
1358     qemu_mutex_lock_ramlist();
1359     QTAILQ_FOREACH(block, &ram_list.blocks, next) {
1360         if (addr == block->offset) {
1361             QTAILQ_REMOVE(&ram_list.blocks, block, next);
1362             ram_list.mru_block = NULL;
1363             ram_list.version++;
1364             if (block->flags & RAM_PREALLOC_MASK) {
1365                 ;
1366             } else if (xen_enabled()) {
1367                 xen_invalidate_map_cache_entry(block->host);
1368 #ifndef _WIN32
1369             } else if (block->fd >= 0) {
1370                 munmap(block->host, block->length);
1371                 close(block->fd);
1372 #endif
1373             } else {
1374                 qemu_anon_ram_free(block->host, block->length);
1375             }
1376             g_free(block);
1377             break;
1378         }
1379     }
1380     qemu_mutex_unlock_ramlist();
1381
1382 }
1383
1384 #ifndef _WIN32
1385 void qemu_ram_remap(ram_addr_t addr, ram_addr_t length)
1386 {
1387     RAMBlock *block;
1388     ram_addr_t offset;
1389     int flags;
1390     void *area, *vaddr;
1391
1392     QTAILQ_FOREACH(block, &ram_list.blocks, next) {
1393         offset = addr - block->offset;
1394         if (offset < block->length) {
1395             vaddr = block->host + offset;
1396             if (block->flags & RAM_PREALLOC_MASK) {
1397                 ;
1398             } else if (xen_enabled()) {
1399                 abort();
1400             } else {
1401                 flags = MAP_FIXED;
1402                 munmap(vaddr, length);
1403                 if (block->fd >= 0) {
1404 #ifdef MAP_POPULATE
1405                     flags |= mem_prealloc ? MAP_POPULATE | MAP_SHARED :
1406                         MAP_PRIVATE;
1407 #else
1408                     flags |= MAP_PRIVATE;
1409 #endif
1410                     area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
1411                                 flags, block->fd, offset);
1412                 } else {
1413                     /*
1414                      * Remap needs to match alloc.  Accelerators that
1415                      * set phys_mem_alloc never remap.  If they did,
1416                      * we'd need a remap hook here.
1417                      */
1418                     assert(phys_mem_alloc == qemu_anon_ram_alloc);
1419
1420                     flags |= MAP_PRIVATE | MAP_ANONYMOUS;
1421                     area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
1422                                 flags, -1, 0);
1423                 }
1424                 if (area != vaddr) {
1425                     fprintf(stderr, "Could not remap addr: "
1426                             RAM_ADDR_FMT "@" RAM_ADDR_FMT "\n",
1427                             length, addr);
1428                     exit(1);
1429                 }
1430                 memory_try_enable_merging(vaddr, length);
1431                 qemu_ram_setup_dump(vaddr, length);
1432             }
1433             return;
1434         }
1435     }
1436 }
1437 #endif /* !_WIN32 */
1438
1439 /* Return a host pointer to ram allocated with qemu_ram_alloc.
1440    With the exception of the softmmu code in this file, this should
1441    only be used for local memory (e.g. video ram) that the device owns,
1442    and knows it isn't going to access beyond the end of the block.
1443
1444    It should not be used for general purpose DMA.
1445    Use cpu_physical_memory_map/cpu_physical_memory_rw instead.
1446  */
1447 void *qemu_get_ram_ptr(ram_addr_t addr)
1448 {
1449     RAMBlock *block = qemu_get_ram_block(addr);
1450
1451     if (xen_enabled()) {
1452         /* We need to check if the requested address is in the RAM
1453          * because we don't want to map the entire memory in QEMU.
1454          * In that case just map until the end of the page.
1455          */
1456         if (block->offset == 0) {
1457             return xen_map_cache(addr, 0, 0);
1458         } else if (block->host == NULL) {
1459             block->host =
1460                 xen_map_cache(block->offset, block->length, 1);
1461         }
1462     }
1463     return block->host + (addr - block->offset);
1464 }
1465
1466 /* Return a host pointer to guest's ram. Similar to qemu_get_ram_ptr
1467  * but takes a size argument */
1468 static void *qemu_ram_ptr_length(ram_addr_t addr, hwaddr *size)
1469 {
1470     if (*size == 0) {
1471         return NULL;
1472     }
1473     if (xen_enabled()) {
1474         return xen_map_cache(addr, *size, 1);
1475     } else {
1476         RAMBlock *block;
1477
1478         QTAILQ_FOREACH(block, &ram_list.blocks, next) {
1479             if (addr - block->offset < block->length) {
1480                 if (addr - block->offset + *size > block->length)
1481                     *size = block->length - addr + block->offset;
1482                 return block->host + (addr - block->offset);
1483             }
1484         }
1485
1486         fprintf(stderr, "Bad ram offset %" PRIx64 "\n", (uint64_t)addr);
1487         abort();
1488     }
1489 }
1490
1491 /* Some of the softmmu routines need to translate from a host pointer
1492    (typically a TLB entry) back to a ram offset.  */
1493 MemoryRegion *qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr)
1494 {
1495     RAMBlock *block;
1496     uint8_t *host = ptr;
1497
1498     if (xen_enabled()) {
1499         *ram_addr = xen_ram_addr_from_mapcache(ptr);
1500         return qemu_get_ram_block(*ram_addr)->mr;
1501     }
1502
1503     block = ram_list.mru_block;
1504     if (block && block->host && host - block->host < block->length) {
1505         goto found;
1506     }
1507
1508     QTAILQ_FOREACH(block, &ram_list.blocks, next) {
1509         /* This case append when the block is not mapped. */
1510         if (block->host == NULL) {
1511             continue;
1512         }
1513         if (host - block->host < block->length) {
1514             goto found;
1515         }
1516     }
1517
1518     return NULL;
1519
1520 found:
1521     *ram_addr = block->offset + (host - block->host);
1522     return block->mr;
1523 }
1524
1525 static void notdirty_mem_write(void *opaque, hwaddr ram_addr,
1526                                uint64_t val, unsigned size)
1527 {
1528     if (!cpu_physical_memory_get_dirty_flag(ram_addr, DIRTY_MEMORY_CODE)) {
1529         tb_invalidate_phys_page_fast(ram_addr, size);
1530     }
1531     switch (size) {
1532     case 1:
1533         stb_p(qemu_get_ram_ptr(ram_addr), val);
1534         break;
1535     case 2:
1536         stw_p(qemu_get_ram_ptr(ram_addr), val);
1537         break;
1538     case 4:
1539         stl_p(qemu_get_ram_ptr(ram_addr), val);
1540         break;
1541     default:
1542         abort();
1543     }
1544     cpu_physical_memory_set_dirty_flag(ram_addr, DIRTY_MEMORY_MIGRATION);
1545     cpu_physical_memory_set_dirty_flag(ram_addr, DIRTY_MEMORY_VGA);
1546     /* we remove the notdirty callback only if the code has been
1547        flushed */
1548     if (!cpu_physical_memory_is_clean(ram_addr)) {
1549         CPUArchState *env = current_cpu->env_ptr;
1550         tlb_set_dirty(env, env->mem_io_vaddr);
1551     }
1552 }
1553
1554 static bool notdirty_mem_accepts(void *opaque, hwaddr addr,
1555                                  unsigned size, bool is_write)
1556 {
1557     return is_write;
1558 }
1559
1560 static const MemoryRegionOps notdirty_mem_ops = {
1561     .write = notdirty_mem_write,
1562     .valid.accepts = notdirty_mem_accepts,
1563     .endianness = DEVICE_NATIVE_ENDIAN,
1564 };
1565
1566 /* Generate a debug exception if a watchpoint has been hit.  */
1567 static void check_watchpoint(int offset, int len_mask, int flags)
1568 {
1569     CPUArchState *env = current_cpu->env_ptr;
1570     target_ulong pc, cs_base;
1571     target_ulong vaddr;
1572     CPUWatchpoint *wp;
1573     int cpu_flags;
1574
1575     if (env->watchpoint_hit) {
1576         /* We re-entered the check after replacing the TB. Now raise
1577          * the debug interrupt so that is will trigger after the
1578          * current instruction. */
1579         cpu_interrupt(ENV_GET_CPU(env), CPU_INTERRUPT_DEBUG);
1580         return;
1581     }
1582     vaddr = (env->mem_io_vaddr & TARGET_PAGE_MASK) + offset;
1583     QTAILQ_FOREACH(wp, &env->watchpoints, entry) {
1584         if ((vaddr == (wp->vaddr & len_mask) ||
1585              (vaddr & wp->len_mask) == wp->vaddr) && (wp->flags & flags)) {
1586             wp->flags |= BP_WATCHPOINT_HIT;
1587             if (!env->watchpoint_hit) {
1588                 env->watchpoint_hit = wp;
1589                 tb_check_watchpoint(env);
1590                 if (wp->flags & BP_STOP_BEFORE_ACCESS) {
1591                     env->exception_index = EXCP_DEBUG;
1592                     cpu_loop_exit(env);
1593                 } else {
1594                     cpu_get_tb_cpu_state(env, &pc, &cs_base, &cpu_flags);
1595                     tb_gen_code(env, pc, cs_base, cpu_flags, 1);
1596                     cpu_resume_from_signal(env, NULL);
1597                 }
1598             }
1599         } else {
1600             wp->flags &= ~BP_WATCHPOINT_HIT;
1601         }
1602     }
1603 }
1604
1605 /* Watchpoint access routines.  Watchpoints are inserted using TLB tricks,
1606    so these check for a hit then pass through to the normal out-of-line
1607    phys routines.  */
1608 static uint64_t watch_mem_read(void *opaque, hwaddr addr,
1609                                unsigned size)
1610 {
1611     check_watchpoint(addr & ~TARGET_PAGE_MASK, ~(size - 1), BP_MEM_READ);
1612     switch (size) {
1613     case 1: return ldub_phys(&address_space_memory, addr);
1614     case 2: return lduw_phys(&address_space_memory, addr);
1615     case 4: return ldl_phys(&address_space_memory, addr);
1616     default: abort();
1617     }
1618 }
1619
1620 static void watch_mem_write(void *opaque, hwaddr addr,
1621                             uint64_t val, unsigned size)
1622 {
1623     check_watchpoint(addr & ~TARGET_PAGE_MASK, ~(size - 1), BP_MEM_WRITE);
1624     switch (size) {
1625     case 1:
1626         stb_phys(&address_space_memory, addr, val);
1627         break;
1628     case 2:
1629         stw_phys(&address_space_memory, addr, val);
1630         break;
1631     case 4:
1632         stl_phys(&address_space_memory, addr, val);
1633         break;
1634     default: abort();
1635     }
1636 }
1637
1638 static const MemoryRegionOps watch_mem_ops = {
1639     .read = watch_mem_read,
1640     .write = watch_mem_write,
1641     .endianness = DEVICE_NATIVE_ENDIAN,
1642 };
1643
1644 static uint64_t subpage_read(void *opaque, hwaddr addr,
1645                              unsigned len)
1646 {
1647     subpage_t *subpage = opaque;
1648     uint8_t buf[4];
1649
1650 #if defined(DEBUG_SUBPAGE)
1651     printf("%s: subpage %p len %u addr " TARGET_FMT_plx "\n", __func__,
1652            subpage, len, addr);
1653 #endif
1654     address_space_read(subpage->as, addr + subpage->base, buf, len);
1655     switch (len) {
1656     case 1:
1657         return ldub_p(buf);
1658     case 2:
1659         return lduw_p(buf);
1660     case 4:
1661         return ldl_p(buf);
1662     default:
1663         abort();
1664     }
1665 }
1666
1667 static void subpage_write(void *opaque, hwaddr addr,
1668                           uint64_t value, unsigned len)
1669 {
1670     subpage_t *subpage = opaque;
1671     uint8_t buf[4];
1672
1673 #if defined(DEBUG_SUBPAGE)
1674     printf("%s: subpage %p len %u addr " TARGET_FMT_plx
1675            " value %"PRIx64"\n",
1676            __func__, subpage, len, addr, value);
1677 #endif
1678     switch (len) {
1679     case 1:
1680         stb_p(buf, value);
1681         break;
1682     case 2:
1683         stw_p(buf, value);
1684         break;
1685     case 4:
1686         stl_p(buf, value);
1687         break;
1688     default:
1689         abort();
1690     }
1691     address_space_write(subpage->as, addr + subpage->base, buf, len);
1692 }
1693
1694 static bool subpage_accepts(void *opaque, hwaddr addr,
1695                             unsigned len, bool is_write)
1696 {
1697     subpage_t *subpage = opaque;
1698 #if defined(DEBUG_SUBPAGE)
1699     printf("%s: subpage %p %c len %u addr " TARGET_FMT_plx "\n",
1700            __func__, subpage, is_write ? 'w' : 'r', len, addr);
1701 #endif
1702
1703     return address_space_access_valid(subpage->as, addr + subpage->base,
1704                                       len, is_write);
1705 }
1706
1707 static const MemoryRegionOps subpage_ops = {
1708     .read = subpage_read,
1709     .write = subpage_write,
1710     .valid.accepts = subpage_accepts,
1711     .endianness = DEVICE_NATIVE_ENDIAN,
1712 };
1713
1714 static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
1715                              uint16_t section)
1716 {
1717     int idx, eidx;
1718
1719     if (start >= TARGET_PAGE_SIZE || end >= TARGET_PAGE_SIZE)
1720         return -1;
1721     idx = SUBPAGE_IDX(start);
1722     eidx = SUBPAGE_IDX(end);
1723 #if defined(DEBUG_SUBPAGE)
1724     printf("%s: %p start %08x end %08x idx %08x eidx %08x section %d\n",
1725            __func__, mmio, start, end, idx, eidx, section);
1726 #endif
1727     for (; idx <= eidx; idx++) {
1728         mmio->sub_section[idx] = section;
1729     }
1730
1731     return 0;
1732 }
1733
1734 static subpage_t *subpage_init(AddressSpace *as, hwaddr base)
1735 {
1736     subpage_t *mmio;
1737
1738     mmio = g_malloc0(sizeof(subpage_t));
1739
1740     mmio->as = as;
1741     mmio->base = base;
1742     memory_region_init_io(&mmio->iomem, NULL, &subpage_ops, mmio,
1743                           "subpage", TARGET_PAGE_SIZE);
1744     mmio->iomem.subpage = true;
1745 #if defined(DEBUG_SUBPAGE)
1746     printf("%s: %p base " TARGET_FMT_plx " len %08x\n", __func__,
1747            mmio, base, TARGET_PAGE_SIZE);
1748 #endif
1749     subpage_register(mmio, 0, TARGET_PAGE_SIZE-1, PHYS_SECTION_UNASSIGNED);
1750
1751     return mmio;
1752 }
1753
1754 static uint16_t dummy_section(PhysPageMap *map, MemoryRegion *mr)
1755 {
1756     MemoryRegionSection section = {
1757         .address_space = &address_space_memory,
1758         .mr = mr,
1759         .offset_within_address_space = 0,
1760         .offset_within_region = 0,
1761         .size = int128_2_64(),
1762     };
1763
1764     return phys_section_add(map, &section);
1765 }
1766
1767 MemoryRegion *iotlb_to_region(AddressSpace *as, hwaddr index)
1768 {
1769     return as->dispatch->map.sections[index & ~TARGET_PAGE_MASK].mr;
1770 }
1771
1772 static void io_mem_init(void)
1773 {
1774     memory_region_init_io(&io_mem_rom, NULL, &unassigned_mem_ops, NULL, "rom", UINT64_MAX);
1775     memory_region_init_io(&io_mem_unassigned, NULL, &unassigned_mem_ops, NULL,
1776                           "unassigned", UINT64_MAX);
1777     memory_region_init_io(&io_mem_notdirty, NULL, &notdirty_mem_ops, NULL,
1778                           "notdirty", UINT64_MAX);
1779     memory_region_init_io(&io_mem_watch, NULL, &watch_mem_ops, NULL,
1780                           "watch", UINT64_MAX);
1781 }
1782
1783 static void mem_begin(MemoryListener *listener)
1784 {
1785     AddressSpace *as = container_of(listener, AddressSpace, dispatch_listener);
1786     AddressSpaceDispatch *d = g_new0(AddressSpaceDispatch, 1);
1787     uint16_t n;
1788
1789     n = dummy_section(&d->map, &io_mem_unassigned);
1790     assert(n == PHYS_SECTION_UNASSIGNED);
1791     n = dummy_section(&d->map, &io_mem_notdirty);
1792     assert(n == PHYS_SECTION_NOTDIRTY);
1793     n = dummy_section(&d->map, &io_mem_rom);
1794     assert(n == PHYS_SECTION_ROM);
1795     n = dummy_section(&d->map, &io_mem_watch);
1796     assert(n == PHYS_SECTION_WATCH);
1797
1798     d->phys_map  = (PhysPageEntry) { .ptr = PHYS_MAP_NODE_NIL, .skip = 1 };
1799     d->as = as;
1800     as->next_dispatch = d;
1801 }
1802
1803 static void mem_commit(MemoryListener *listener)
1804 {
1805     AddressSpace *as = container_of(listener, AddressSpace, dispatch_listener);
1806     AddressSpaceDispatch *cur = as->dispatch;
1807     AddressSpaceDispatch *next = as->next_dispatch;
1808
1809     phys_page_compact_all(next, next->map.nodes_nb);
1810
1811     as->dispatch = next;
1812
1813     if (cur) {
1814         phys_sections_free(&cur->map);
1815         g_free(cur);
1816     }
1817 }
1818
1819 static void tcg_commit(MemoryListener *listener)
1820 {
1821     CPUState *cpu;
1822
1823     /* since each CPU stores ram addresses in its TLB cache, we must
1824        reset the modified entries */
1825     /* XXX: slow ! */
1826     CPU_FOREACH(cpu) {
1827         CPUArchState *env = cpu->env_ptr;
1828
1829         /* FIXME: Disentangle the cpu.h circular files deps so we can
1830            directly get the right CPU from listener.  */
1831         if (cpu->tcg_as_listener != listener) {
1832             continue;
1833         }
1834         tlb_flush(env, 1);
1835     }
1836 }
1837
1838 static void core_log_global_start(MemoryListener *listener)
1839 {
1840     cpu_physical_memory_set_dirty_tracking(true);
1841 }
1842
1843 static void core_log_global_stop(MemoryListener *listener)
1844 {
1845     cpu_physical_memory_set_dirty_tracking(false);
1846 }
1847
1848 static MemoryListener core_memory_listener = {
1849     .log_global_start = core_log_global_start,
1850     .log_global_stop = core_log_global_stop,
1851     .priority = 1,
1852 };
1853
1854 void address_space_init_dispatch(AddressSpace *as)
1855 {
1856     as->dispatch = NULL;
1857     as->dispatch_listener = (MemoryListener) {
1858         .begin = mem_begin,
1859         .commit = mem_commit,
1860         .region_add = mem_add,
1861         .region_nop = mem_add,
1862         .priority = 0,
1863     };
1864     memory_listener_register(&as->dispatch_listener, as);
1865 }
1866
1867 void address_space_destroy_dispatch(AddressSpace *as)
1868 {
1869     AddressSpaceDispatch *d = as->dispatch;
1870
1871     memory_listener_unregister(&as->dispatch_listener);
1872     g_free(d);
1873     as->dispatch = NULL;
1874 }
1875
1876 static void memory_map_init(void)
1877 {
1878     system_memory = g_malloc(sizeof(*system_memory));
1879
1880     memory_region_init(system_memory, NULL, "system", UINT64_MAX);
1881     address_space_init(&address_space_memory, system_memory, "memory");
1882
1883     system_io = g_malloc(sizeof(*system_io));
1884     memory_region_init_io(system_io, NULL, &unassigned_io_ops, NULL, "io",
1885                           65536);
1886     address_space_init(&address_space_io, system_io, "I/O");
1887
1888     memory_listener_register(&core_memory_listener, &address_space_memory);
1889 }
1890
1891 MemoryRegion *get_system_memory(void)
1892 {
1893     return system_memory;
1894 }
1895
1896 MemoryRegion *get_system_io(void)
1897 {
1898     return system_io;
1899 }
1900
1901 #endif /* !defined(CONFIG_USER_ONLY) */
1902
1903 /* physical memory access (slow version, mainly for debug) */
1904 #if defined(CONFIG_USER_ONLY)
1905 int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
1906                         uint8_t *buf, int len, int is_write)
1907 {
1908     int l, flags;
1909     target_ulong page;
1910     void * p;
1911
1912     while (len > 0) {
1913         page = addr & TARGET_PAGE_MASK;
1914         l = (page + TARGET_PAGE_SIZE) - addr;
1915         if (l > len)
1916             l = len;
1917         flags = page_get_flags(page);
1918         if (!(flags & PAGE_VALID))
1919             return -1;
1920         if (is_write) {
1921             if (!(flags & PAGE_WRITE))
1922                 return -1;
1923             /* XXX: this code should not depend on lock_user */
1924             if (!(p = lock_user(VERIFY_WRITE, addr, l, 0)))
1925                 return -1;
1926             memcpy(p, buf, l);
1927             unlock_user(p, addr, l);
1928         } else {
1929             if (!(flags & PAGE_READ))
1930                 return -1;
1931             /* XXX: this code should not depend on lock_user */
1932             if (!(p = lock_user(VERIFY_READ, addr, l, 1)))
1933                 return -1;
1934             memcpy(buf, p, l);
1935             unlock_user(p, addr, 0);
1936         }
1937         len -= l;
1938         buf += l;
1939         addr += l;
1940     }
1941     return 0;
1942 }
1943
1944 #else
1945
1946 static void invalidate_and_set_dirty(hwaddr addr,
1947                                      hwaddr length)
1948 {
1949     if (cpu_physical_memory_is_clean(addr)) {
1950         /* invalidate code */
1951         tb_invalidate_phys_page_range(addr, addr + length, 0);
1952         /* set dirty bit */
1953         cpu_physical_memory_set_dirty_flag(addr, DIRTY_MEMORY_VGA);
1954         cpu_physical_memory_set_dirty_flag(addr, DIRTY_MEMORY_MIGRATION);
1955     }
1956     xen_modified_memory(addr, length);
1957 }
1958
1959 static int memory_access_size(MemoryRegion *mr, unsigned l, hwaddr addr)
1960 {
1961     unsigned access_size_max = mr->ops->valid.max_access_size;
1962
1963     /* Regions are assumed to support 1-4 byte accesses unless
1964        otherwise specified.  */
1965     if (access_size_max == 0) {
1966         access_size_max = 4;
1967     }
1968
1969     /* Bound the maximum access by the alignment of the address.  */
1970     if (!mr->ops->impl.unaligned) {
1971         unsigned align_size_max = addr & -addr;
1972         if (align_size_max != 0 && align_size_max < access_size_max) {
1973             access_size_max = align_size_max;
1974         }
1975     }
1976
1977     /* Don't attempt accesses larger than the maximum.  */
1978     if (l > access_size_max) {
1979         l = access_size_max;
1980     }
1981     if (l & (l - 1)) {
1982         l = 1 << (qemu_fls(l) - 1);
1983     }
1984
1985     return l;
1986 }
1987
1988 bool address_space_rw(AddressSpace *as, hwaddr addr, uint8_t *buf,
1989                       int len, bool is_write)
1990 {
1991     hwaddr l;
1992     uint8_t *ptr;
1993     uint64_t val;
1994     hwaddr addr1;
1995     MemoryRegion *mr;
1996     bool error = false;
1997
1998     while (len > 0) {
1999         l = len;
2000         mr = address_space_translate(as, addr, &addr1, &l, is_write);
2001
2002         if (is_write) {
2003             if (!memory_access_is_direct(mr, is_write)) {
2004                 l = memory_access_size(mr, l, addr1);
2005                 /* XXX: could force current_cpu to NULL to avoid
2006                    potential bugs */
2007                 switch (l) {
2008                 case 8:
2009                     /* 64 bit write access */
2010                     val = ldq_p(buf);
2011                     error |= io_mem_write(mr, addr1, val, 8);
2012                     break;
2013                 case 4:
2014                     /* 32 bit write access */
2015                     val = ldl_p(buf);
2016                     error |= io_mem_write(mr, addr1, val, 4);
2017                     break;
2018                 case 2:
2019                     /* 16 bit write access */
2020                     val = lduw_p(buf);
2021                     error |= io_mem_write(mr, addr1, val, 2);
2022                     break;
2023                 case 1:
2024                     /* 8 bit write access */
2025                     val = ldub_p(buf);
2026                     error |= io_mem_write(mr, addr1, val, 1);
2027                     break;
2028                 default:
2029                     abort();
2030                 }
2031             } else {
2032                 addr1 += memory_region_get_ram_addr(mr);
2033                 /* RAM case */
2034                 ptr = qemu_get_ram_ptr(addr1);
2035                 memcpy(ptr, buf, l);
2036                 invalidate_and_set_dirty(addr1, l);
2037             }
2038         } else {
2039             if (!memory_access_is_direct(mr, is_write)) {
2040                 /* I/O case */
2041                 l = memory_access_size(mr, l, addr1);
2042                 switch (l) {
2043                 case 8:
2044                     /* 64 bit read access */
2045                     error |= io_mem_read(mr, addr1, &val, 8);
2046                     stq_p(buf, val);
2047                     break;
2048                 case 4:
2049                     /* 32 bit read access */
2050                     error |= io_mem_read(mr, addr1, &val, 4);
2051                     stl_p(buf, val);
2052                     break;
2053                 case 2:
2054                     /* 16 bit read access */
2055                     error |= io_mem_read(mr, addr1, &val, 2);
2056                     stw_p(buf, val);
2057                     break;
2058                 case 1:
2059                     /* 8 bit read access */
2060                     error |= io_mem_read(mr, addr1, &val, 1);
2061                     stb_p(buf, val);
2062                     break;
2063                 default:
2064                     abort();
2065                 }
2066             } else {
2067                 /* RAM case */
2068                 ptr = qemu_get_ram_ptr(mr->ram_addr + addr1);
2069                 memcpy(buf, ptr, l);
2070             }
2071         }
2072         len -= l;
2073         buf += l;
2074         addr += l;
2075     }
2076
2077     return error;
2078 }
2079
2080 bool address_space_write(AddressSpace *as, hwaddr addr,
2081                          const uint8_t *buf, int len)
2082 {
2083     return address_space_rw(as, addr, (uint8_t *)buf, len, true);
2084 }
2085
2086 bool address_space_read(AddressSpace *as, hwaddr addr, uint8_t *buf, int len)
2087 {
2088     return address_space_rw(as, addr, buf, len, false);
2089 }
2090
2091
2092 void cpu_physical_memory_rw(hwaddr addr, uint8_t *buf,
2093                             int len, int is_write)
2094 {
2095     address_space_rw(&address_space_memory, addr, buf, len, is_write);
2096 }
2097
2098 enum write_rom_type {
2099     WRITE_DATA,
2100     FLUSH_CACHE,
2101 };
2102
2103 static inline void cpu_physical_memory_write_rom_internal(AddressSpace *as,
2104     hwaddr addr, const uint8_t *buf, int len, enum write_rom_type type)
2105 {
2106     hwaddr l;
2107     uint8_t *ptr;
2108     hwaddr addr1;
2109     MemoryRegion *mr;
2110
2111     while (len > 0) {
2112         l = len;
2113         mr = address_space_translate(as, addr, &addr1, &l, true);
2114
2115         if (!(memory_region_is_ram(mr) ||
2116               memory_region_is_romd(mr))) {
2117             /* do nothing */
2118         } else {
2119             addr1 += memory_region_get_ram_addr(mr);
2120             /* ROM/RAM case */
2121             ptr = qemu_get_ram_ptr(addr1);
2122             switch (type) {
2123             case WRITE_DATA:
2124                 memcpy(ptr, buf, l);
2125                 invalidate_and_set_dirty(addr1, l);
2126                 break;
2127             case FLUSH_CACHE:
2128                 flush_icache_range((uintptr_t)ptr, (uintptr_t)ptr + l);
2129                 break;
2130             }
2131         }
2132         len -= l;
2133         buf += l;
2134         addr += l;
2135     }
2136 }
2137
2138 /* used for ROM loading : can write in RAM and ROM */
2139 void cpu_physical_memory_write_rom(AddressSpace *as, hwaddr addr,
2140                                    const uint8_t *buf, int len)
2141 {
2142     cpu_physical_memory_write_rom_internal(as, addr, buf, len, WRITE_DATA);
2143 }
2144
2145 void cpu_flush_icache_range(hwaddr start, int len)
2146 {
2147     /*
2148      * This function should do the same thing as an icache flush that was
2149      * triggered from within the guest. For TCG we are always cache coherent,
2150      * so there is no need to flush anything. For KVM / Xen we need to flush
2151      * the host's instruction cache at least.
2152      */
2153     if (tcg_enabled()) {
2154         return;
2155     }
2156
2157     cpu_physical_memory_write_rom_internal(&address_space_memory,
2158                                            start, NULL, len, FLUSH_CACHE);
2159 }
2160
2161 typedef struct {
2162     MemoryRegion *mr;
2163     void *buffer;
2164     hwaddr addr;
2165     hwaddr len;
2166 } BounceBuffer;
2167
2168 static BounceBuffer bounce;
2169
2170 typedef struct MapClient {
2171     void *opaque;
2172     void (*callback)(void *opaque);
2173     QLIST_ENTRY(MapClient) link;
2174 } MapClient;
2175
2176 static QLIST_HEAD(map_client_list, MapClient) map_client_list
2177     = QLIST_HEAD_INITIALIZER(map_client_list);
2178
2179 void *cpu_register_map_client(void *opaque, void (*callback)(void *opaque))
2180 {
2181     MapClient *client = g_malloc(sizeof(*client));
2182
2183     client->opaque = opaque;
2184     client->callback = callback;
2185     QLIST_INSERT_HEAD(&map_client_list, client, link);
2186     return client;
2187 }
2188
2189 static void cpu_unregister_map_client(void *_client)
2190 {
2191     MapClient *client = (MapClient *)_client;
2192
2193     QLIST_REMOVE(client, link);
2194     g_free(client);
2195 }
2196
2197 static void cpu_notify_map_clients(void)
2198 {
2199     MapClient *client;
2200
2201     while (!QLIST_EMPTY(&map_client_list)) {
2202         client = QLIST_FIRST(&map_client_list);
2203         client->callback(client->opaque);
2204         cpu_unregister_map_client(client);
2205     }
2206 }
2207
2208 bool address_space_access_valid(AddressSpace *as, hwaddr addr, int len, bool is_write)
2209 {
2210     MemoryRegion *mr;
2211     hwaddr l, xlat;
2212
2213     while (len > 0) {
2214         l = len;
2215         mr = address_space_translate(as, addr, &xlat, &l, is_write);
2216         if (!memory_access_is_direct(mr, is_write)) {
2217             l = memory_access_size(mr, l, addr);
2218             if (!memory_region_access_valid(mr, xlat, l, is_write)) {
2219                 return false;
2220             }
2221         }
2222
2223         len -= l;
2224         addr += l;
2225     }
2226     return true;
2227 }
2228
2229 /* Map a physical memory region into a host virtual address.
2230  * May map a subset of the requested range, given by and returned in *plen.
2231  * May return NULL if resources needed to perform the mapping are exhausted.
2232  * Use only for reads OR writes - not for read-modify-write operations.
2233  * Use cpu_register_map_client() to know when retrying the map operation is
2234  * likely to succeed.
2235  */
2236 void *address_space_map(AddressSpace *as,
2237                         hwaddr addr,
2238                         hwaddr *plen,
2239                         bool is_write)
2240 {
2241     hwaddr len = *plen;
2242     hwaddr done = 0;
2243     hwaddr l, xlat, base;
2244     MemoryRegion *mr, *this_mr;
2245     ram_addr_t raddr;
2246
2247     if (len == 0) {
2248         return NULL;
2249     }
2250
2251     l = len;
2252     mr = address_space_translate(as, addr, &xlat, &l, is_write);
2253     if (!memory_access_is_direct(mr, is_write)) {
2254         if (bounce.buffer) {
2255             return NULL;
2256         }
2257         /* Avoid unbounded allocations */
2258         l = MIN(l, TARGET_PAGE_SIZE);
2259         bounce.buffer = qemu_memalign(TARGET_PAGE_SIZE, l);
2260         bounce.addr = addr;
2261         bounce.len = l;
2262
2263         memory_region_ref(mr);
2264         bounce.mr = mr;
2265         if (!is_write) {
2266             address_space_read(as, addr, bounce.buffer, l);
2267         }
2268
2269         *plen = l;
2270         return bounce.buffer;
2271     }
2272
2273     base = xlat;
2274     raddr = memory_region_get_ram_addr(mr);
2275
2276     for (;;) {
2277         len -= l;
2278         addr += l;
2279         done += l;
2280         if (len == 0) {
2281             break;
2282         }
2283
2284         l = len;
2285         this_mr = address_space_translate(as, addr, &xlat, &l, is_write);
2286         if (this_mr != mr || xlat != base + done) {
2287             break;
2288         }
2289     }
2290
2291     memory_region_ref(mr);
2292     *plen = done;
2293     return qemu_ram_ptr_length(raddr + base, plen);
2294 }
2295
2296 /* Unmaps a memory region previously mapped by address_space_map().
2297  * Will also mark the memory as dirty if is_write == 1.  access_len gives
2298  * the amount of memory that was actually read or written by the caller.
2299  */
2300 void address_space_unmap(AddressSpace *as, void *buffer, hwaddr len,
2301                          int is_write, hwaddr access_len)
2302 {
2303     if (buffer != bounce.buffer) {
2304         MemoryRegion *mr;
2305         ram_addr_t addr1;
2306
2307         mr = qemu_ram_addr_from_host(buffer, &addr1);
2308         assert(mr != NULL);
2309         if (is_write) {
2310             while (access_len) {
2311                 unsigned l;
2312                 l = TARGET_PAGE_SIZE;
2313                 if (l > access_len)
2314                     l = access_len;
2315                 invalidate_and_set_dirty(addr1, l);
2316                 addr1 += l;
2317                 access_len -= l;
2318             }
2319         }
2320         if (xen_enabled()) {
2321             xen_invalidate_map_cache_entry(buffer);
2322         }
2323         memory_region_unref(mr);
2324         return;
2325     }
2326     if (is_write) {
2327         address_space_write(as, bounce.addr, bounce.buffer, access_len);
2328     }
2329     qemu_vfree(bounce.buffer);
2330     bounce.buffer = NULL;
2331     memory_region_unref(bounce.mr);
2332     cpu_notify_map_clients();
2333 }
2334
2335 void *cpu_physical_memory_map(hwaddr addr,
2336                               hwaddr *plen,
2337                               int is_write)
2338 {
2339     return address_space_map(&address_space_memory, addr, plen, is_write);
2340 }
2341
2342 void cpu_physical_memory_unmap(void *buffer, hwaddr len,
2343                                int is_write, hwaddr access_len)
2344 {
2345     return address_space_unmap(&address_space_memory, buffer, len, is_write, access_len);
2346 }
2347
2348 /* warning: addr must be aligned */
2349 static inline uint32_t ldl_phys_internal(AddressSpace *as, hwaddr addr,
2350                                          enum device_endian endian)
2351 {
2352     uint8_t *ptr;
2353     uint64_t val;
2354     MemoryRegion *mr;
2355     hwaddr l = 4;
2356     hwaddr addr1;
2357
2358     mr = address_space_translate(as, addr, &addr1, &l, false);
2359     if (l < 4 || !memory_access_is_direct(mr, false)) {
2360         /* I/O case */
2361         io_mem_read(mr, addr1, &val, 4);
2362 #if defined(TARGET_WORDS_BIGENDIAN)
2363         if (endian == DEVICE_LITTLE_ENDIAN) {
2364             val = bswap32(val);
2365         }
2366 #else
2367         if (endian == DEVICE_BIG_ENDIAN) {
2368             val = bswap32(val);
2369         }
2370 #endif
2371     } else {
2372         /* RAM case */
2373         ptr = qemu_get_ram_ptr((memory_region_get_ram_addr(mr)
2374                                 & TARGET_PAGE_MASK)
2375                                + addr1);
2376         switch (endian) {
2377         case DEVICE_LITTLE_ENDIAN:
2378             val = ldl_le_p(ptr);
2379             break;
2380         case DEVICE_BIG_ENDIAN:
2381             val = ldl_be_p(ptr);
2382             break;
2383         default:
2384             val = ldl_p(ptr);
2385             break;
2386         }
2387     }
2388     return val;
2389 }
2390
2391 uint32_t ldl_phys(AddressSpace *as, hwaddr addr)
2392 {
2393     return ldl_phys_internal(as, addr, DEVICE_NATIVE_ENDIAN);
2394 }
2395
2396 uint32_t ldl_le_phys(AddressSpace *as, hwaddr addr)
2397 {
2398     return ldl_phys_internal(as, addr, DEVICE_LITTLE_ENDIAN);
2399 }
2400
2401 uint32_t ldl_be_phys(AddressSpace *as, hwaddr addr)
2402 {
2403     return ldl_phys_internal(as, addr, DEVICE_BIG_ENDIAN);
2404 }
2405
2406 /* warning: addr must be aligned */
2407 static inline uint64_t ldq_phys_internal(AddressSpace *as, hwaddr addr,
2408                                          enum device_endian endian)
2409 {
2410     uint8_t *ptr;
2411     uint64_t val;
2412     MemoryRegion *mr;
2413     hwaddr l = 8;
2414     hwaddr addr1;
2415
2416     mr = address_space_translate(as, addr, &addr1, &l,
2417                                  false);
2418     if (l < 8 || !memory_access_is_direct(mr, false)) {
2419         /* I/O case */
2420         io_mem_read(mr, addr1, &val, 8);
2421 #if defined(TARGET_WORDS_BIGENDIAN)
2422         if (endian == DEVICE_LITTLE_ENDIAN) {
2423             val = bswap64(val);
2424         }
2425 #else
2426         if (endian == DEVICE_BIG_ENDIAN) {
2427             val = bswap64(val);
2428         }
2429 #endif
2430     } else {
2431         /* RAM case */
2432         ptr = qemu_get_ram_ptr((memory_region_get_ram_addr(mr)
2433                                 & TARGET_PAGE_MASK)
2434                                + addr1);
2435         switch (endian) {
2436         case DEVICE_LITTLE_ENDIAN:
2437             val = ldq_le_p(ptr);
2438             break;
2439         case DEVICE_BIG_ENDIAN:
2440             val = ldq_be_p(ptr);
2441             break;
2442         default:
2443             val = ldq_p(ptr);
2444             break;
2445         }
2446     }
2447     return val;
2448 }
2449
2450 uint64_t ldq_phys(AddressSpace *as, hwaddr addr)
2451 {
2452     return ldq_phys_internal(as, addr, DEVICE_NATIVE_ENDIAN);
2453 }
2454
2455 uint64_t ldq_le_phys(AddressSpace *as, hwaddr addr)
2456 {
2457     return ldq_phys_internal(as, addr, DEVICE_LITTLE_ENDIAN);
2458 }
2459
2460 uint64_t ldq_be_phys(AddressSpace *as, hwaddr addr)
2461 {
2462     return ldq_phys_internal(as, addr, DEVICE_BIG_ENDIAN);
2463 }
2464
2465 /* XXX: optimize */
2466 uint32_t ldub_phys(AddressSpace *as, hwaddr addr)
2467 {
2468     uint8_t val;
2469     address_space_rw(as, addr, &val, 1, 0);
2470     return val;
2471 }
2472
2473 /* warning: addr must be aligned */
2474 static inline uint32_t lduw_phys_internal(AddressSpace *as, hwaddr addr,
2475                                           enum device_endian endian)
2476 {
2477     uint8_t *ptr;
2478     uint64_t val;
2479     MemoryRegion *mr;
2480     hwaddr l = 2;
2481     hwaddr addr1;
2482
2483     mr = address_space_translate(as, addr, &addr1, &l,
2484                                  false);
2485     if (l < 2 || !memory_access_is_direct(mr, false)) {
2486         /* I/O case */
2487         io_mem_read(mr, addr1, &val, 2);
2488 #if defined(TARGET_WORDS_BIGENDIAN)
2489         if (endian == DEVICE_LITTLE_ENDIAN) {
2490             val = bswap16(val);
2491         }
2492 #else
2493         if (endian == DEVICE_BIG_ENDIAN) {
2494             val = bswap16(val);
2495         }
2496 #endif
2497     } else {
2498         /* RAM case */
2499         ptr = qemu_get_ram_ptr((memory_region_get_ram_addr(mr)
2500                                 & TARGET_PAGE_MASK)
2501                                + addr1);
2502         switch (endian) {
2503         case DEVICE_LITTLE_ENDIAN:
2504             val = lduw_le_p(ptr);
2505             break;
2506         case DEVICE_BIG_ENDIAN:
2507             val = lduw_be_p(ptr);
2508             break;
2509         default:
2510             val = lduw_p(ptr);
2511             break;
2512         }
2513     }
2514     return val;
2515 }
2516
2517 uint32_t lduw_phys(AddressSpace *as, hwaddr addr)
2518 {
2519     return lduw_phys_internal(as, addr, DEVICE_NATIVE_ENDIAN);
2520 }
2521
2522 uint32_t lduw_le_phys(AddressSpace *as, hwaddr addr)
2523 {
2524     return lduw_phys_internal(as, addr, DEVICE_LITTLE_ENDIAN);
2525 }
2526
2527 uint32_t lduw_be_phys(AddressSpace *as, hwaddr addr)
2528 {
2529     return lduw_phys_internal(as, addr, DEVICE_BIG_ENDIAN);
2530 }
2531
2532 /* warning: addr must be aligned. The ram page is not masked as dirty
2533    and the code inside is not invalidated. It is useful if the dirty
2534    bits are used to track modified PTEs */
2535 void stl_phys_notdirty(AddressSpace *as, hwaddr addr, uint32_t val)
2536 {
2537     uint8_t *ptr;
2538     MemoryRegion *mr;
2539     hwaddr l = 4;
2540     hwaddr addr1;
2541
2542     mr = address_space_translate(as, addr, &addr1, &l,
2543                                  true);
2544     if (l < 4 || !memory_access_is_direct(mr, true)) {
2545         io_mem_write(mr, addr1, val, 4);
2546     } else {
2547         addr1 += memory_region_get_ram_addr(mr) & TARGET_PAGE_MASK;
2548         ptr = qemu_get_ram_ptr(addr1);
2549         stl_p(ptr, val);
2550
2551         if (unlikely(in_migration)) {
2552             if (cpu_physical_memory_is_clean(addr1)) {
2553                 /* invalidate code */
2554                 tb_invalidate_phys_page_range(addr1, addr1 + 4, 0);
2555                 /* set dirty bit */
2556                 cpu_physical_memory_set_dirty_flag(addr1,
2557                                                    DIRTY_MEMORY_MIGRATION);
2558                 cpu_physical_memory_set_dirty_flag(addr1, DIRTY_MEMORY_VGA);
2559             }
2560         }
2561     }
2562 }
2563
2564 /* warning: addr must be aligned */
2565 static inline void stl_phys_internal(AddressSpace *as,
2566                                      hwaddr addr, uint32_t val,
2567                                      enum device_endian endian)
2568 {
2569     uint8_t *ptr;
2570     MemoryRegion *mr;
2571     hwaddr l = 4;
2572     hwaddr addr1;
2573
2574     mr = address_space_translate(as, addr, &addr1, &l,
2575                                  true);
2576     if (l < 4 || !memory_access_is_direct(mr, true)) {
2577 #if defined(TARGET_WORDS_BIGENDIAN)
2578         if (endian == DEVICE_LITTLE_ENDIAN) {
2579             val = bswap32(val);
2580         }
2581 #else
2582         if (endian == DEVICE_BIG_ENDIAN) {
2583             val = bswap32(val);
2584         }
2585 #endif
2586         io_mem_write(mr, addr1, val, 4);
2587     } else {
2588         /* RAM case */
2589         addr1 += memory_region_get_ram_addr(mr) & TARGET_PAGE_MASK;
2590         ptr = qemu_get_ram_ptr(addr1);
2591         switch (endian) {
2592         case DEVICE_LITTLE_ENDIAN:
2593             stl_le_p(ptr, val);
2594             break;
2595         case DEVICE_BIG_ENDIAN:
2596             stl_be_p(ptr, val);
2597             break;
2598         default:
2599             stl_p(ptr, val);
2600             break;
2601         }
2602         invalidate_and_set_dirty(addr1, 4);
2603     }
2604 }
2605
2606 void stl_phys(AddressSpace *as, hwaddr addr, uint32_t val)
2607 {
2608     stl_phys_internal(as, addr, val, DEVICE_NATIVE_ENDIAN);
2609 }
2610
2611 void stl_le_phys(AddressSpace *as, hwaddr addr, uint32_t val)
2612 {
2613     stl_phys_internal(as, addr, val, DEVICE_LITTLE_ENDIAN);
2614 }
2615
2616 void stl_be_phys(AddressSpace *as, hwaddr addr, uint32_t val)
2617 {
2618     stl_phys_internal(as, addr, val, DEVICE_BIG_ENDIAN);
2619 }
2620
2621 /* XXX: optimize */
2622 void stb_phys(AddressSpace *as, hwaddr addr, uint32_t val)
2623 {
2624     uint8_t v = val;
2625     address_space_rw(as, addr, &v, 1, 1);
2626 }
2627
2628 /* warning: addr must be aligned */
2629 static inline void stw_phys_internal(AddressSpace *as,
2630                                      hwaddr addr, uint32_t val,
2631                                      enum device_endian endian)
2632 {
2633     uint8_t *ptr;
2634     MemoryRegion *mr;
2635     hwaddr l = 2;
2636     hwaddr addr1;
2637
2638     mr = address_space_translate(as, addr, &addr1, &l, true);
2639     if (l < 2 || !memory_access_is_direct(mr, true)) {
2640 #if defined(TARGET_WORDS_BIGENDIAN)
2641         if (endian == DEVICE_LITTLE_ENDIAN) {
2642             val = bswap16(val);
2643         }
2644 #else
2645         if (endian == DEVICE_BIG_ENDIAN) {
2646             val = bswap16(val);
2647         }
2648 #endif
2649         io_mem_write(mr, addr1, val, 2);
2650     } else {
2651         /* RAM case */
2652         addr1 += memory_region_get_ram_addr(mr) & TARGET_PAGE_MASK;
2653         ptr = qemu_get_ram_ptr(addr1);
2654         switch (endian) {
2655         case DEVICE_LITTLE_ENDIAN:
2656             stw_le_p(ptr, val);
2657             break;
2658         case DEVICE_BIG_ENDIAN:
2659             stw_be_p(ptr, val);
2660             break;
2661         default:
2662             stw_p(ptr, val);
2663             break;
2664         }
2665         invalidate_and_set_dirty(addr1, 2);
2666     }
2667 }
2668
2669 void stw_phys(AddressSpace *as, hwaddr addr, uint32_t val)
2670 {
2671     stw_phys_internal(as, addr, val, DEVICE_NATIVE_ENDIAN);
2672 }
2673
2674 void stw_le_phys(AddressSpace *as, hwaddr addr, uint32_t val)
2675 {
2676     stw_phys_internal(as, addr, val, DEVICE_LITTLE_ENDIAN);
2677 }
2678
2679 void stw_be_phys(AddressSpace *as, hwaddr addr, uint32_t val)
2680 {
2681     stw_phys_internal(as, addr, val, DEVICE_BIG_ENDIAN);
2682 }
2683
2684 /* XXX: optimize */
2685 void stq_phys(AddressSpace *as, hwaddr addr, uint64_t val)
2686 {
2687     val = tswap64(val);
2688     address_space_rw(as, addr, (void *) &val, 8, 1);
2689 }
2690
2691 void stq_le_phys(AddressSpace *as, hwaddr addr, uint64_t val)
2692 {
2693     val = cpu_to_le64(val);
2694     address_space_rw(as, addr, (void *) &val, 8, 1);
2695 }
2696
2697 void stq_be_phys(AddressSpace *as, hwaddr addr, uint64_t val)
2698 {
2699     val = cpu_to_be64(val);
2700     address_space_rw(as, addr, (void *) &val, 8, 1);
2701 }
2702
2703 /* virtual memory access for debug (includes writing to ROM) */
2704 int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
2705                         uint8_t *buf, int len, int is_write)
2706 {
2707     int l;
2708     hwaddr phys_addr;
2709     target_ulong page;
2710
2711     while (len > 0) {
2712         page = addr & TARGET_PAGE_MASK;
2713         phys_addr = cpu_get_phys_page_debug(cpu, page);
2714         /* if no physical page mapped, return an error */
2715         if (phys_addr == -1)
2716             return -1;
2717         l = (page + TARGET_PAGE_SIZE) - addr;
2718         if (l > len)
2719             l = len;
2720         phys_addr += (addr & ~TARGET_PAGE_MASK);
2721         if (is_write) {
2722             cpu_physical_memory_write_rom(cpu->as, phys_addr, buf, l);
2723         } else {
2724             address_space_rw(cpu->as, phys_addr, buf, l, 0);
2725         }
2726         len -= l;
2727         buf += l;
2728         addr += l;
2729     }
2730     return 0;
2731 }
2732 #endif
2733
2734 #if !defined(CONFIG_USER_ONLY)
2735
2736 /*
2737  * A helper function for the _utterly broken_ virtio device model to find out if
2738  * it's running on a big endian machine. Don't do this at home kids!
2739  */
2740 bool virtio_is_big_endian(void);
2741 bool virtio_is_big_endian(void)
2742 {
2743 #if defined(TARGET_WORDS_BIGENDIAN)
2744     return true;
2745 #else
2746     return false;
2747 #endif
2748 }
2749
2750 #endif
2751
2752 #ifndef CONFIG_USER_ONLY
2753 bool cpu_physical_memory_is_io(hwaddr phys_addr)
2754 {
2755     MemoryRegion*mr;
2756     hwaddr l = 1;
2757
2758     mr = address_space_translate(&address_space_memory,
2759                                  phys_addr, &phys_addr, &l, false);
2760
2761     return !(memory_region_is_ram(mr) ||
2762              memory_region_is_romd(mr));
2763 }
2764
2765 void qemu_ram_foreach_block(RAMBlockIterFunc func, void *opaque)
2766 {
2767     RAMBlock *block;
2768
2769     QTAILQ_FOREACH(block, &ram_list.blocks, next) {
2770         func(block->host, block->offset, block->length, opaque);
2771     }
2772 }
2773 #endif