qdev/prop: convert slavio_timer.c to helper macros.
[qemu] / kvm-all.c
1 /*
2  * QEMU KVM support
3  *
4  * Copyright IBM, Corp. 2008
5  *           Red Hat, Inc. 2008
6  *
7  * Authors:
8  *  Anthony Liguori   <aliguori@us.ibm.com>
9  *  Glauber Costa     <gcosta@redhat.com>
10  *
11  * This work is licensed under the terms of the GNU GPL, version 2 or later.
12  * See the COPYING file in the top-level directory.
13  *
14  */
15
16 #include <sys/types.h>
17 #include <sys/ioctl.h>
18 #include <sys/mman.h>
19 #include <stdarg.h>
20
21 #include <linux/kvm.h>
22
23 #include "qemu-common.h"
24 #include "sysemu.h"
25 #include "hw/hw.h"
26 #include "gdbstub.h"
27 #include "kvm.h"
28
29 /* KVM uses PAGE_SIZE in it's definition of COALESCED_MMIO_MAX */
30 #define PAGE_SIZE TARGET_PAGE_SIZE
31
32 //#define DEBUG_KVM
33
34 #ifdef DEBUG_KVM
35 #define dprintf(fmt, ...) \
36     do { fprintf(stderr, fmt, ## __VA_ARGS__); } while (0)
37 #else
38 #define dprintf(fmt, ...) \
39     do { } while (0)
40 #endif
41
42 typedef struct KVMSlot
43 {
44     target_phys_addr_t start_addr;
45     ram_addr_t memory_size;
46     ram_addr_t phys_offset;
47     int slot;
48     int flags;
49 } KVMSlot;
50
51 typedef struct kvm_dirty_log KVMDirtyLog;
52
53 int kvm_allowed = 0;
54
55 struct KVMState
56 {
57     KVMSlot slots[32];
58     int fd;
59     int vmfd;
60     int coalesced_mmio;
61     int broken_set_mem_region;
62     int migration_log;
63 #ifdef KVM_CAP_SET_GUEST_DEBUG
64     struct kvm_sw_breakpoint_head kvm_sw_breakpoints;
65 #endif
66     int irqchip_in_kernel;
67     int pit_in_kernel;
68 };
69
70 static KVMState *kvm_state;
71
72 static KVMSlot *kvm_alloc_slot(KVMState *s)
73 {
74     int i;
75
76     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
77         /* KVM private memory slots */
78         if (i >= 8 && i < 12)
79             continue;
80         if (s->slots[i].memory_size == 0)
81             return &s->slots[i];
82     }
83
84     fprintf(stderr, "%s: no free slot available\n", __func__);
85     abort();
86 }
87
88 static KVMSlot *kvm_lookup_matching_slot(KVMState *s,
89                                          target_phys_addr_t start_addr,
90                                          target_phys_addr_t end_addr)
91 {
92     int i;
93
94     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
95         KVMSlot *mem = &s->slots[i];
96
97         if (start_addr == mem->start_addr &&
98             end_addr == mem->start_addr + mem->memory_size) {
99             return mem;
100         }
101     }
102
103     return NULL;
104 }
105
106 /*
107  * Find overlapping slot with lowest start address
108  */
109 static KVMSlot *kvm_lookup_overlapping_slot(KVMState *s,
110                                             target_phys_addr_t start_addr,
111                                             target_phys_addr_t end_addr)
112 {
113     KVMSlot *found = NULL;
114     int i;
115
116     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
117         KVMSlot *mem = &s->slots[i];
118
119         if (mem->memory_size == 0 ||
120             (found && found->start_addr < mem->start_addr)) {
121             continue;
122         }
123
124         if (end_addr > mem->start_addr &&
125             start_addr < mem->start_addr + mem->memory_size) {
126             found = mem;
127         }
128     }
129
130     return found;
131 }
132
133 static int kvm_set_user_memory_region(KVMState *s, KVMSlot *slot)
134 {
135     struct kvm_userspace_memory_region mem;
136
137     mem.slot = slot->slot;
138     mem.guest_phys_addr = slot->start_addr;
139     mem.memory_size = slot->memory_size;
140     mem.userspace_addr = (unsigned long)qemu_get_ram_ptr(slot->phys_offset);
141     mem.flags = slot->flags;
142     if (s->migration_log) {
143         mem.flags |= KVM_MEM_LOG_DIRTY_PAGES;
144     }
145     return kvm_vm_ioctl(s, KVM_SET_USER_MEMORY_REGION, &mem);
146 }
147
148 static void kvm_reset_vcpu(void *opaque)
149 {
150     CPUState *env = opaque;
151
152     if (kvm_arch_put_registers(env)) {
153         fprintf(stderr, "Fatal: kvm vcpu reset failed\n");
154         abort();
155     }
156 }
157
158 int kvm_irqchip_in_kernel(void)
159 {
160     return kvm_state->irqchip_in_kernel;
161 }
162
163 int kvm_pit_in_kernel(void)
164 {
165     return kvm_state->pit_in_kernel;
166 }
167
168
169 int kvm_init_vcpu(CPUState *env)
170 {
171     KVMState *s = kvm_state;
172     long mmap_size;
173     int ret;
174
175     dprintf("kvm_init_vcpu\n");
176
177     ret = kvm_vm_ioctl(s, KVM_CREATE_VCPU, env->cpu_index);
178     if (ret < 0) {
179         dprintf("kvm_create_vcpu failed\n");
180         goto err;
181     }
182
183     env->kvm_fd = ret;
184     env->kvm_state = s;
185
186     mmap_size = kvm_ioctl(s, KVM_GET_VCPU_MMAP_SIZE, 0);
187     if (mmap_size < 0) {
188         dprintf("KVM_GET_VCPU_MMAP_SIZE failed\n");
189         goto err;
190     }
191
192     env->kvm_run = mmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_SHARED,
193                         env->kvm_fd, 0);
194     if (env->kvm_run == MAP_FAILED) {
195         ret = -errno;
196         dprintf("mmap'ing vcpu state failed\n");
197         goto err;
198     }
199
200     ret = kvm_arch_init_vcpu(env);
201     if (ret == 0) {
202         qemu_register_reset(kvm_reset_vcpu, env);
203         ret = kvm_arch_put_registers(env);
204     }
205 err:
206     return ret;
207 }
208
209 int kvm_put_mp_state(CPUState *env)
210 {
211     struct kvm_mp_state mp_state = { .mp_state = env->mp_state };
212
213     return kvm_vcpu_ioctl(env, KVM_SET_MP_STATE, &mp_state);
214 }
215
216 int kvm_get_mp_state(CPUState *env)
217 {
218     struct kvm_mp_state mp_state;
219     int ret;
220
221     ret = kvm_vcpu_ioctl(env, KVM_GET_MP_STATE, &mp_state);
222     if (ret < 0) {
223         return ret;
224     }
225     env->mp_state = mp_state.mp_state;
226     return 0;
227 }
228
229 /*
230  * dirty pages logging control
231  */
232 static int kvm_dirty_pages_log_change(target_phys_addr_t phys_addr,
233                                       ram_addr_t size, int flags, int mask)
234 {
235     KVMState *s = kvm_state;
236     KVMSlot *mem = kvm_lookup_matching_slot(s, phys_addr, phys_addr + size);
237     int old_flags;
238
239     if (mem == NULL)  {
240             fprintf(stderr, "BUG: %s: invalid parameters " TARGET_FMT_plx "-"
241                     TARGET_FMT_plx "\n", __func__, phys_addr,
242                     (target_phys_addr_t)(phys_addr + size - 1));
243             return -EINVAL;
244     }
245
246     old_flags = mem->flags;
247
248     flags = (mem->flags & ~mask) | flags;
249     mem->flags = flags;
250
251     /* If nothing changed effectively, no need to issue ioctl */
252     if (s->migration_log) {
253         flags |= KVM_MEM_LOG_DIRTY_PAGES;
254     }
255     if (flags == old_flags) {
256             return 0;
257     }
258
259     return kvm_set_user_memory_region(s, mem);
260 }
261
262 int kvm_log_start(target_phys_addr_t phys_addr, ram_addr_t size)
263 {
264         return kvm_dirty_pages_log_change(phys_addr, size,
265                                           KVM_MEM_LOG_DIRTY_PAGES,
266                                           KVM_MEM_LOG_DIRTY_PAGES);
267 }
268
269 int kvm_log_stop(target_phys_addr_t phys_addr, ram_addr_t size)
270 {
271         return kvm_dirty_pages_log_change(phys_addr, size,
272                                           0,
273                                           KVM_MEM_LOG_DIRTY_PAGES);
274 }
275
276 int kvm_set_migration_log(int enable)
277 {
278     KVMState *s = kvm_state;
279     KVMSlot *mem;
280     int i, err;
281
282     s->migration_log = enable;
283
284     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
285         mem = &s->slots[i];
286
287         if (!!(mem->flags & KVM_MEM_LOG_DIRTY_PAGES) == enable) {
288             continue;
289         }
290         err = kvm_set_user_memory_region(s, mem);
291         if (err) {
292             return err;
293         }
294     }
295     return 0;
296 }
297
298 static int test_le_bit(unsigned long nr, unsigned char *addr)
299 {
300     return (addr[nr >> 3] >> (nr & 7)) & 1;
301 }
302
303 /**
304  * kvm_physical_sync_dirty_bitmap - Grab dirty bitmap from kernel space
305  * This function updates qemu's dirty bitmap using cpu_physical_memory_set_dirty().
306  * This means all bits are set to dirty.
307  *
308  * @start_add: start of logged region.
309  * @end_addr: end of logged region.
310  */
311 int kvm_physical_sync_dirty_bitmap(target_phys_addr_t start_addr,
312                                    target_phys_addr_t end_addr)
313 {
314     KVMState *s = kvm_state;
315     unsigned long size, allocated_size = 0;
316     target_phys_addr_t phys_addr;
317     ram_addr_t addr;
318     KVMDirtyLog d;
319     KVMSlot *mem;
320     int ret = 0;
321
322     d.dirty_bitmap = NULL;
323     while (start_addr < end_addr) {
324         mem = kvm_lookup_overlapping_slot(s, start_addr, end_addr);
325         if (mem == NULL) {
326             break;
327         }
328
329         size = ((mem->memory_size >> TARGET_PAGE_BITS) + 7) / 8;
330         if (!d.dirty_bitmap) {
331             d.dirty_bitmap = qemu_malloc(size);
332         } else if (size > allocated_size) {
333             d.dirty_bitmap = qemu_realloc(d.dirty_bitmap, size);
334         }
335         allocated_size = size;
336         memset(d.dirty_bitmap, 0, allocated_size);
337
338         d.slot = mem->slot;
339
340         if (kvm_vm_ioctl(s, KVM_GET_DIRTY_LOG, &d) == -1) {
341             dprintf("ioctl failed %d\n", errno);
342             ret = -1;
343             break;
344         }
345
346         for (phys_addr = mem->start_addr, addr = mem->phys_offset;
347              phys_addr < mem->start_addr + mem->memory_size;
348              phys_addr += TARGET_PAGE_SIZE, addr += TARGET_PAGE_SIZE) {
349             unsigned char *bitmap = (unsigned char *)d.dirty_bitmap;
350             unsigned nr = (phys_addr - mem->start_addr) >> TARGET_PAGE_BITS;
351
352             if (test_le_bit(nr, bitmap)) {
353                 cpu_physical_memory_set_dirty(addr);
354             }
355         }
356         start_addr = phys_addr;
357     }
358     qemu_free(d.dirty_bitmap);
359
360     return ret;
361 }
362
363 int kvm_coalesce_mmio_region(target_phys_addr_t start, ram_addr_t size)
364 {
365     int ret = -ENOSYS;
366 #ifdef KVM_CAP_COALESCED_MMIO
367     KVMState *s = kvm_state;
368
369     if (s->coalesced_mmio) {
370         struct kvm_coalesced_mmio_zone zone;
371
372         zone.addr = start;
373         zone.size = size;
374
375         ret = kvm_vm_ioctl(s, KVM_REGISTER_COALESCED_MMIO, &zone);
376     }
377 #endif
378
379     return ret;
380 }
381
382 int kvm_uncoalesce_mmio_region(target_phys_addr_t start, ram_addr_t size)
383 {
384     int ret = -ENOSYS;
385 #ifdef KVM_CAP_COALESCED_MMIO
386     KVMState *s = kvm_state;
387
388     if (s->coalesced_mmio) {
389         struct kvm_coalesced_mmio_zone zone;
390
391         zone.addr = start;
392         zone.size = size;
393
394         ret = kvm_vm_ioctl(s, KVM_UNREGISTER_COALESCED_MMIO, &zone);
395     }
396 #endif
397
398     return ret;
399 }
400
401 int kvm_check_extension(KVMState *s, unsigned int extension)
402 {
403     int ret;
404
405     ret = kvm_ioctl(s, KVM_CHECK_EXTENSION, extension);
406     if (ret < 0) {
407         ret = 0;
408     }
409
410     return ret;
411 }
412
413 int kvm_init(int smp_cpus)
414 {
415     static const char upgrade_note[] =
416         "Please upgrade to at least kernel 2.6.29 or recent kvm-kmod\n"
417         "(see http://sourceforge.net/projects/kvm).\n";
418     KVMState *s;
419     int ret;
420     int i;
421
422     if (smp_cpus > 1) {
423         fprintf(stderr, "No SMP KVM support, use '-smp 1'\n");
424         return -EINVAL;
425     }
426
427     s = qemu_mallocz(sizeof(KVMState));
428
429 #ifdef KVM_CAP_SET_GUEST_DEBUG
430     TAILQ_INIT(&s->kvm_sw_breakpoints);
431 #endif
432     for (i = 0; i < ARRAY_SIZE(s->slots); i++)
433         s->slots[i].slot = i;
434
435     s->vmfd = -1;
436     s->fd = open("/dev/kvm", O_RDWR);
437     if (s->fd == -1) {
438         fprintf(stderr, "Could not access KVM kernel module: %m\n");
439         ret = -errno;
440         goto err;
441     }
442
443     ret = kvm_ioctl(s, KVM_GET_API_VERSION, 0);
444     if (ret < KVM_API_VERSION) {
445         if (ret > 0)
446             ret = -EINVAL;
447         fprintf(stderr, "kvm version too old\n");
448         goto err;
449     }
450
451     if (ret > KVM_API_VERSION) {
452         ret = -EINVAL;
453         fprintf(stderr, "kvm version not supported\n");
454         goto err;
455     }
456
457     s->vmfd = kvm_ioctl(s, KVM_CREATE_VM, 0);
458     if (s->vmfd < 0)
459         goto err;
460
461     /* initially, KVM allocated its own memory and we had to jump through
462      * hooks to make phys_ram_base point to this.  Modern versions of KVM
463      * just use a user allocated buffer so we can use regular pages
464      * unmodified.  Make sure we have a sufficiently modern version of KVM.
465      */
466     if (!kvm_check_extension(s, KVM_CAP_USER_MEMORY)) {
467         ret = -EINVAL;
468         fprintf(stderr, "kvm does not support KVM_CAP_USER_MEMORY\n%s",
469                 upgrade_note);
470         goto err;
471     }
472
473     /* There was a nasty bug in < kvm-80 that prevents memory slots from being
474      * destroyed properly.  Since we rely on this capability, refuse to work
475      * with any kernel without this capability. */
476     if (!kvm_check_extension(s, KVM_CAP_DESTROY_MEMORY_REGION_WORKS)) {
477         ret = -EINVAL;
478
479         fprintf(stderr,
480                 "KVM kernel module broken (DESTROY_MEMORY_REGION).\n%s",
481                 upgrade_note);
482         goto err;
483     }
484
485 #ifdef KVM_CAP_COALESCED_MMIO
486     s->coalesced_mmio = kvm_check_extension(s, KVM_CAP_COALESCED_MMIO);
487 #else
488     s->coalesced_mmio = 0;
489 #endif
490
491     s->broken_set_mem_region = 1;
492 #ifdef KVM_CAP_JOIN_MEMORY_REGIONS_WORKS
493     ret = kvm_ioctl(s, KVM_CHECK_EXTENSION, KVM_CAP_JOIN_MEMORY_REGIONS_WORKS);
494     if (ret > 0) {
495         s->broken_set_mem_region = 0;
496     }
497 #endif
498
499     ret = kvm_arch_init(s, smp_cpus);
500     if (ret < 0)
501         goto err;
502
503     kvm_state = s;
504
505     return 0;
506
507 err:
508     if (s) {
509         if (s->vmfd != -1)
510             close(s->vmfd);
511         if (s->fd != -1)
512             close(s->fd);
513     }
514     qemu_free(s);
515
516     return ret;
517 }
518
519 static int kvm_handle_io(CPUState *env, uint16_t port, void *data,
520                          int direction, int size, uint32_t count)
521 {
522     int i;
523     uint8_t *ptr = data;
524
525     for (i = 0; i < count; i++) {
526         if (direction == KVM_EXIT_IO_IN) {
527             switch (size) {
528             case 1:
529                 stb_p(ptr, cpu_inb(env, port));
530                 break;
531             case 2:
532                 stw_p(ptr, cpu_inw(env, port));
533                 break;
534             case 4:
535                 stl_p(ptr, cpu_inl(env, port));
536                 break;
537             }
538         } else {
539             switch (size) {
540             case 1:
541                 cpu_outb(env, port, ldub_p(ptr));
542                 break;
543             case 2:
544                 cpu_outw(env, port, lduw_p(ptr));
545                 break;
546             case 4:
547                 cpu_outl(env, port, ldl_p(ptr));
548                 break;
549             }
550         }
551
552         ptr += size;
553     }
554
555     return 1;
556 }
557
558 static void kvm_run_coalesced_mmio(CPUState *env, struct kvm_run *run)
559 {
560 #ifdef KVM_CAP_COALESCED_MMIO
561     KVMState *s = kvm_state;
562     if (s->coalesced_mmio) {
563         struct kvm_coalesced_mmio_ring *ring;
564
565         ring = (void *)run + (s->coalesced_mmio * TARGET_PAGE_SIZE);
566         while (ring->first != ring->last) {
567             struct kvm_coalesced_mmio *ent;
568
569             ent = &ring->coalesced_mmio[ring->first];
570
571             cpu_physical_memory_write(ent->phys_addr, ent->data, ent->len);
572             /* FIXME smp_wmb() */
573             ring->first = (ring->first + 1) % KVM_COALESCED_MMIO_MAX;
574         }
575     }
576 #endif
577 }
578
579 int kvm_cpu_exec(CPUState *env)
580 {
581     struct kvm_run *run = env->kvm_run;
582     int ret;
583
584     dprintf("kvm_cpu_exec()\n");
585
586     do {
587         if (env->exit_request) {
588             dprintf("interrupt exit requested\n");
589             ret = 0;
590             break;
591         }
592
593         kvm_arch_pre_run(env, run);
594         ret = kvm_vcpu_ioctl(env, KVM_RUN, 0);
595         kvm_arch_post_run(env, run);
596
597         if (ret == -EINTR || ret == -EAGAIN) {
598             dprintf("io window exit\n");
599             ret = 0;
600             break;
601         }
602
603         if (ret < 0) {
604             dprintf("kvm run failed %s\n", strerror(-ret));
605             abort();
606         }
607
608         kvm_run_coalesced_mmio(env, run);
609
610         ret = 0; /* exit loop */
611         switch (run->exit_reason) {
612         case KVM_EXIT_IO:
613             dprintf("handle_io\n");
614             ret = kvm_handle_io(env, run->io.port,
615                                 (uint8_t *)run + run->io.data_offset,
616                                 run->io.direction,
617                                 run->io.size,
618                                 run->io.count);
619             break;
620         case KVM_EXIT_MMIO:
621             dprintf("handle_mmio\n");
622             cpu_physical_memory_rw(run->mmio.phys_addr,
623                                    run->mmio.data,
624                                    run->mmio.len,
625                                    run->mmio.is_write);
626             ret = 1;
627             break;
628         case KVM_EXIT_IRQ_WINDOW_OPEN:
629             dprintf("irq_window_open\n");
630             break;
631         case KVM_EXIT_SHUTDOWN:
632             dprintf("shutdown\n");
633             qemu_system_reset_request();
634             ret = 1;
635             break;
636         case KVM_EXIT_UNKNOWN:
637             dprintf("kvm_exit_unknown\n");
638             break;
639         case KVM_EXIT_FAIL_ENTRY:
640             dprintf("kvm_exit_fail_entry\n");
641             break;
642         case KVM_EXIT_EXCEPTION:
643             dprintf("kvm_exit_exception\n");
644             break;
645         case KVM_EXIT_DEBUG:
646             dprintf("kvm_exit_debug\n");
647 #ifdef KVM_CAP_SET_GUEST_DEBUG
648             if (kvm_arch_debug(&run->debug.arch)) {
649                 gdb_set_stop_cpu(env);
650                 vm_stop(EXCP_DEBUG);
651                 env->exception_index = EXCP_DEBUG;
652                 return 0;
653             }
654             /* re-enter, this exception was guest-internal */
655             ret = 1;
656 #endif /* KVM_CAP_SET_GUEST_DEBUG */
657             break;
658         default:
659             dprintf("kvm_arch_handle_exit\n");
660             ret = kvm_arch_handle_exit(env, run);
661             break;
662         }
663     } while (ret > 0);
664
665     if (env->exit_request) {
666         env->exit_request = 0;
667         env->exception_index = EXCP_INTERRUPT;
668     }
669
670     return ret;
671 }
672
673 void kvm_set_phys_mem(target_phys_addr_t start_addr,
674                       ram_addr_t size,
675                       ram_addr_t phys_offset)
676 {
677     KVMState *s = kvm_state;
678     ram_addr_t flags = phys_offset & ~TARGET_PAGE_MASK;
679     KVMSlot *mem, old;
680     int err;
681
682     if (start_addr & ~TARGET_PAGE_MASK) {
683         if (flags >= IO_MEM_UNASSIGNED) {
684             if (!kvm_lookup_overlapping_slot(s, start_addr,
685                                              start_addr + size)) {
686                 return;
687             }
688             fprintf(stderr, "Unaligned split of a KVM memory slot\n");
689         } else {
690             fprintf(stderr, "Only page-aligned memory slots supported\n");
691         }
692         abort();
693     }
694
695     /* KVM does not support read-only slots */
696     phys_offset &= ~IO_MEM_ROM;
697
698     while (1) {
699         mem = kvm_lookup_overlapping_slot(s, start_addr, start_addr + size);
700         if (!mem) {
701             break;
702         }
703
704         if (flags < IO_MEM_UNASSIGNED && start_addr >= mem->start_addr &&
705             (start_addr + size <= mem->start_addr + mem->memory_size) &&
706             (phys_offset - start_addr == mem->phys_offset - mem->start_addr)) {
707             /* The new slot fits into the existing one and comes with
708              * identical parameters - nothing to be done. */
709             return;
710         }
711
712         old = *mem;
713
714         /* unregister the overlapping slot */
715         mem->memory_size = 0;
716         err = kvm_set_user_memory_region(s, mem);
717         if (err) {
718             fprintf(stderr, "%s: error unregistering overlapping slot: %s\n",
719                     __func__, strerror(-err));
720             abort();
721         }
722
723         /* Workaround for older KVM versions: we can't join slots, even not by
724          * unregistering the previous ones and then registering the larger
725          * slot. We have to maintain the existing fragmentation. Sigh.
726          *
727          * This workaround assumes that the new slot starts at the same
728          * address as the first existing one. If not or if some overlapping
729          * slot comes around later, we will fail (not seen in practice so far)
730          * - and actually require a recent KVM version. */
731         if (s->broken_set_mem_region &&
732             old.start_addr == start_addr && old.memory_size < size &&
733             flags < IO_MEM_UNASSIGNED) {
734             mem = kvm_alloc_slot(s);
735             mem->memory_size = old.memory_size;
736             mem->start_addr = old.start_addr;
737             mem->phys_offset = old.phys_offset;
738             mem->flags = 0;
739
740             err = kvm_set_user_memory_region(s, mem);
741             if (err) {
742                 fprintf(stderr, "%s: error updating slot: %s\n", __func__,
743                         strerror(-err));
744                 abort();
745             }
746
747             start_addr += old.memory_size;
748             phys_offset += old.memory_size;
749             size -= old.memory_size;
750             continue;
751         }
752
753         /* register prefix slot */
754         if (old.start_addr < start_addr) {
755             mem = kvm_alloc_slot(s);
756             mem->memory_size = start_addr - old.start_addr;
757             mem->start_addr = old.start_addr;
758             mem->phys_offset = old.phys_offset;
759             mem->flags = 0;
760
761             err = kvm_set_user_memory_region(s, mem);
762             if (err) {
763                 fprintf(stderr, "%s: error registering prefix slot: %s\n",
764                         __func__, strerror(-err));
765                 abort();
766             }
767         }
768
769         /* register suffix slot */
770         if (old.start_addr + old.memory_size > start_addr + size) {
771             ram_addr_t size_delta;
772
773             mem = kvm_alloc_slot(s);
774             mem->start_addr = start_addr + size;
775             size_delta = mem->start_addr - old.start_addr;
776             mem->memory_size = old.memory_size - size_delta;
777             mem->phys_offset = old.phys_offset + size_delta;
778             mem->flags = 0;
779
780             err = kvm_set_user_memory_region(s, mem);
781             if (err) {
782                 fprintf(stderr, "%s: error registering suffix slot: %s\n",
783                         __func__, strerror(-err));
784                 abort();
785             }
786         }
787     }
788
789     /* in case the KVM bug workaround already "consumed" the new slot */
790     if (!size)
791         return;
792
793     /* KVM does not need to know about this memory */
794     if (flags >= IO_MEM_UNASSIGNED)
795         return;
796
797     mem = kvm_alloc_slot(s);
798     mem->memory_size = size;
799     mem->start_addr = start_addr;
800     mem->phys_offset = phys_offset;
801     mem->flags = 0;
802
803     err = kvm_set_user_memory_region(s, mem);
804     if (err) {
805         fprintf(stderr, "%s: error registering slot: %s\n", __func__,
806                 strerror(-err));
807         abort();
808     }
809 }
810
811 int kvm_ioctl(KVMState *s, int type, ...)
812 {
813     int ret;
814     void *arg;
815     va_list ap;
816
817     va_start(ap, type);
818     arg = va_arg(ap, void *);
819     va_end(ap);
820
821     ret = ioctl(s->fd, type, arg);
822     if (ret == -1)
823         ret = -errno;
824
825     return ret;
826 }
827
828 int kvm_vm_ioctl(KVMState *s, int type, ...)
829 {
830     int ret;
831     void *arg;
832     va_list ap;
833
834     va_start(ap, type);
835     arg = va_arg(ap, void *);
836     va_end(ap);
837
838     ret = ioctl(s->vmfd, type, arg);
839     if (ret == -1)
840         ret = -errno;
841
842     return ret;
843 }
844
845 int kvm_vcpu_ioctl(CPUState *env, int type, ...)
846 {
847     int ret;
848     void *arg;
849     va_list ap;
850
851     va_start(ap, type);
852     arg = va_arg(ap, void *);
853     va_end(ap);
854
855     ret = ioctl(env->kvm_fd, type, arg);
856     if (ret == -1)
857         ret = -errno;
858
859     return ret;
860 }
861
862 int kvm_has_sync_mmu(void)
863 {
864 #ifdef KVM_CAP_SYNC_MMU
865     KVMState *s = kvm_state;
866
867     return kvm_check_extension(s, KVM_CAP_SYNC_MMU);
868 #else
869     return 0;
870 #endif
871 }
872
873 void kvm_setup_guest_memory(void *start, size_t size)
874 {
875     if (!kvm_has_sync_mmu()) {
876 #ifdef MADV_DONTFORK
877         int ret = madvise(start, size, MADV_DONTFORK);
878
879         if (ret) {
880             perror("madvice");
881             exit(1);
882         }
883 #else
884         fprintf(stderr,
885                 "Need MADV_DONTFORK in absence of synchronous KVM MMU\n");
886         exit(1);
887 #endif
888     }
889 }
890
891 #ifdef KVM_CAP_SET_GUEST_DEBUG
892 static void on_vcpu(CPUState *env, void (*func)(void *data), void *data)
893 {
894     if (env == cpu_single_env) {
895         func(data);
896         return;
897     }
898     abort();
899 }
900
901 struct kvm_sw_breakpoint *kvm_find_sw_breakpoint(CPUState *env,
902                                                  target_ulong pc)
903 {
904     struct kvm_sw_breakpoint *bp;
905
906     TAILQ_FOREACH(bp, &env->kvm_state->kvm_sw_breakpoints, entry) {
907         if (bp->pc == pc)
908             return bp;
909     }
910     return NULL;
911 }
912
913 int kvm_sw_breakpoints_active(CPUState *env)
914 {
915     return !TAILQ_EMPTY(&env->kvm_state->kvm_sw_breakpoints);
916 }
917
918 struct kvm_set_guest_debug_data {
919     struct kvm_guest_debug dbg;
920     CPUState *env;
921     int err;
922 };
923
924 static void kvm_invoke_set_guest_debug(void *data)
925 {
926     struct kvm_set_guest_debug_data *dbg_data = data;
927     dbg_data->err = kvm_vcpu_ioctl(dbg_data->env, KVM_SET_GUEST_DEBUG, &dbg_data->dbg);
928 }
929
930 int kvm_update_guest_debug(CPUState *env, unsigned long reinject_trap)
931 {
932     struct kvm_set_guest_debug_data data;
933
934     data.dbg.control = 0;
935     if (env->singlestep_enabled)
936         data.dbg.control = KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_SINGLESTEP;
937
938     kvm_arch_update_guest_debug(env, &data.dbg);
939     data.dbg.control |= reinject_trap;
940     data.env = env;
941
942     on_vcpu(env, kvm_invoke_set_guest_debug, &data);
943     return data.err;
944 }
945
946 int kvm_insert_breakpoint(CPUState *current_env, target_ulong addr,
947                           target_ulong len, int type)
948 {
949     struct kvm_sw_breakpoint *bp;
950     CPUState *env;
951     int err;
952
953     if (type == GDB_BREAKPOINT_SW) {
954         bp = kvm_find_sw_breakpoint(current_env, addr);
955         if (bp) {
956             bp->use_count++;
957             return 0;
958         }
959
960         bp = qemu_malloc(sizeof(struct kvm_sw_breakpoint));
961         if (!bp)
962             return -ENOMEM;
963
964         bp->pc = addr;
965         bp->use_count = 1;
966         err = kvm_arch_insert_sw_breakpoint(current_env, bp);
967         if (err) {
968             free(bp);
969             return err;
970         }
971
972         TAILQ_INSERT_HEAD(&current_env->kvm_state->kvm_sw_breakpoints,
973                           bp, entry);
974     } else {
975         err = kvm_arch_insert_hw_breakpoint(addr, len, type);
976         if (err)
977             return err;
978     }
979
980     for (env = first_cpu; env != NULL; env = env->next_cpu) {
981         err = kvm_update_guest_debug(env, 0);
982         if (err)
983             return err;
984     }
985     return 0;
986 }
987
988 int kvm_remove_breakpoint(CPUState *current_env, target_ulong addr,
989                           target_ulong len, int type)
990 {
991     struct kvm_sw_breakpoint *bp;
992     CPUState *env;
993     int err;
994
995     if (type == GDB_BREAKPOINT_SW) {
996         bp = kvm_find_sw_breakpoint(current_env, addr);
997         if (!bp)
998             return -ENOENT;
999
1000         if (bp->use_count > 1) {
1001             bp->use_count--;
1002             return 0;
1003         }
1004
1005         err = kvm_arch_remove_sw_breakpoint(current_env, bp);
1006         if (err)
1007             return err;
1008
1009         TAILQ_REMOVE(&current_env->kvm_state->kvm_sw_breakpoints, bp, entry);
1010         qemu_free(bp);
1011     } else {
1012         err = kvm_arch_remove_hw_breakpoint(addr, len, type);
1013         if (err)
1014             return err;
1015     }
1016
1017     for (env = first_cpu; env != NULL; env = env->next_cpu) {
1018         err = kvm_update_guest_debug(env, 0);
1019         if (err)
1020             return err;
1021     }
1022     return 0;
1023 }
1024
1025 void kvm_remove_all_breakpoints(CPUState *current_env)
1026 {
1027     struct kvm_sw_breakpoint *bp, *next;
1028     KVMState *s = current_env->kvm_state;
1029     CPUState *env;
1030
1031     TAILQ_FOREACH_SAFE(bp, &s->kvm_sw_breakpoints, entry, next) {
1032         if (kvm_arch_remove_sw_breakpoint(current_env, bp) != 0) {
1033             /* Try harder to find a CPU that currently sees the breakpoint. */
1034             for (env = first_cpu; env != NULL; env = env->next_cpu) {
1035                 if (kvm_arch_remove_sw_breakpoint(env, bp) == 0)
1036                     break;
1037             }
1038         }
1039     }
1040     kvm_arch_remove_all_hw_breakpoints();
1041
1042     for (env = first_cpu; env != NULL; env = env->next_cpu)
1043         kvm_update_guest_debug(env, 0);
1044 }
1045
1046 #else /* !KVM_CAP_SET_GUEST_DEBUG */
1047
1048 int kvm_update_guest_debug(CPUState *env, unsigned long reinject_trap)
1049 {
1050     return -EINVAL;
1051 }
1052
1053 int kvm_insert_breakpoint(CPUState *current_env, target_ulong addr,
1054                           target_ulong len, int type)
1055 {
1056     return -EINVAL;
1057 }
1058
1059 int kvm_remove_breakpoint(CPUState *current_env, target_ulong addr,
1060                           target_ulong len, int type)
1061 {
1062     return -EINVAL;
1063 }
1064
1065 void kvm_remove_all_breakpoints(CPUState *current_env)
1066 {
1067 }
1068 #endif /* !KVM_CAP_SET_GUEST_DEBUG */