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