]> Git Repo - qemu.git/blob - kvm-all.c
kvm: convert to MemoryListener API
[qemu.git] / 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   <[email protected]>
9  *  Glauber Costa     <[email protected]>
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 "qemu-barrier.h"
25 #include "sysemu.h"
26 #include "hw/hw.h"
27 #include "gdbstub.h"
28 #include "kvm.h"
29 #include "bswap.h"
30 #include "memory.h"
31
32 /* This check must be after config-host.h is included */
33 #ifdef CONFIG_EVENTFD
34 #include <sys/eventfd.h>
35 #endif
36
37 /* KVM uses PAGE_SIZE in it's definition of COALESCED_MMIO_MAX */
38 #define PAGE_SIZE TARGET_PAGE_SIZE
39
40 //#define DEBUG_KVM
41
42 #ifdef DEBUG_KVM
43 #define DPRINTF(fmt, ...) \
44     do { fprintf(stderr, fmt, ## __VA_ARGS__); } while (0)
45 #else
46 #define DPRINTF(fmt, ...) \
47     do { } while (0)
48 #endif
49
50 typedef struct KVMSlot
51 {
52     target_phys_addr_t start_addr;
53     ram_addr_t memory_size;
54     void *ram;
55     int slot;
56     int flags;
57 } KVMSlot;
58
59 typedef struct kvm_dirty_log KVMDirtyLog;
60
61 struct KVMState
62 {
63     KVMSlot slots[32];
64     int fd;
65     int vmfd;
66     int coalesced_mmio;
67     struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
68     bool coalesced_flush_in_progress;
69     int broken_set_mem_region;
70     int migration_log;
71     int vcpu_events;
72     int robust_singlestep;
73     int debugregs;
74 #ifdef KVM_CAP_SET_GUEST_DEBUG
75     struct kvm_sw_breakpoint_head kvm_sw_breakpoints;
76 #endif
77     int irqchip_in_kernel;
78     int pit_in_kernel;
79     int xsave, xcrs;
80     int many_ioeventfds;
81 };
82
83 KVMState *kvm_state;
84
85 static const KVMCapabilityInfo kvm_required_capabilites[] = {
86     KVM_CAP_INFO(USER_MEMORY),
87     KVM_CAP_INFO(DESTROY_MEMORY_REGION_WORKS),
88     KVM_CAP_LAST_INFO
89 };
90
91 static KVMSlot *kvm_alloc_slot(KVMState *s)
92 {
93     int i;
94
95     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
96         if (s->slots[i].memory_size == 0) {
97             return &s->slots[i];
98         }
99     }
100
101     fprintf(stderr, "%s: no free slot available\n", __func__);
102     abort();
103 }
104
105 static KVMSlot *kvm_lookup_matching_slot(KVMState *s,
106                                          target_phys_addr_t start_addr,
107                                          target_phys_addr_t end_addr)
108 {
109     int i;
110
111     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
112         KVMSlot *mem = &s->slots[i];
113
114         if (start_addr == mem->start_addr &&
115             end_addr == mem->start_addr + mem->memory_size) {
116             return mem;
117         }
118     }
119
120     return NULL;
121 }
122
123 /*
124  * Find overlapping slot with lowest start address
125  */
126 static KVMSlot *kvm_lookup_overlapping_slot(KVMState *s,
127                                             target_phys_addr_t start_addr,
128                                             target_phys_addr_t end_addr)
129 {
130     KVMSlot *found = NULL;
131     int i;
132
133     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
134         KVMSlot *mem = &s->slots[i];
135
136         if (mem->memory_size == 0 ||
137             (found && found->start_addr < mem->start_addr)) {
138             continue;
139         }
140
141         if (end_addr > mem->start_addr &&
142             start_addr < mem->start_addr + mem->memory_size) {
143             found = mem;
144         }
145     }
146
147     return found;
148 }
149
150 int kvm_physical_memory_addr_from_host(KVMState *s, void *ram,
151                                        target_phys_addr_t *phys_addr)
152 {
153     int i;
154
155     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
156         KVMSlot *mem = &s->slots[i];
157
158         if (ram >= mem->ram && ram < mem->ram + mem->memory_size) {
159             *phys_addr = mem->start_addr + (ram - mem->ram);
160             return 1;
161         }
162     }
163
164     return 0;
165 }
166
167 static int kvm_set_user_memory_region(KVMState *s, KVMSlot *slot)
168 {
169     struct kvm_userspace_memory_region mem;
170
171     mem.slot = slot->slot;
172     mem.guest_phys_addr = slot->start_addr;
173     mem.memory_size = slot->memory_size;
174     mem.userspace_addr = (unsigned long)slot->ram;
175     mem.flags = slot->flags;
176     if (s->migration_log) {
177         mem.flags |= KVM_MEM_LOG_DIRTY_PAGES;
178     }
179     return kvm_vm_ioctl(s, KVM_SET_USER_MEMORY_REGION, &mem);
180 }
181
182 static void kvm_reset_vcpu(void *opaque)
183 {
184     CPUState *env = opaque;
185
186     kvm_arch_reset_vcpu(env);
187 }
188
189 int kvm_irqchip_in_kernel(void)
190 {
191     return kvm_state->irqchip_in_kernel;
192 }
193
194 int kvm_pit_in_kernel(void)
195 {
196     return kvm_state->pit_in_kernel;
197 }
198
199 int kvm_init_vcpu(CPUState *env)
200 {
201     KVMState *s = kvm_state;
202     long mmap_size;
203     int ret;
204
205     DPRINTF("kvm_init_vcpu\n");
206
207     ret = kvm_vm_ioctl(s, KVM_CREATE_VCPU, env->cpu_index);
208     if (ret < 0) {
209         DPRINTF("kvm_create_vcpu failed\n");
210         goto err;
211     }
212
213     env->kvm_fd = ret;
214     env->kvm_state = s;
215     env->kvm_vcpu_dirty = 1;
216
217     mmap_size = kvm_ioctl(s, KVM_GET_VCPU_MMAP_SIZE, 0);
218     if (mmap_size < 0) {
219         ret = mmap_size;
220         DPRINTF("KVM_GET_VCPU_MMAP_SIZE failed\n");
221         goto err;
222     }
223
224     env->kvm_run = mmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_SHARED,
225                         env->kvm_fd, 0);
226     if (env->kvm_run == MAP_FAILED) {
227         ret = -errno;
228         DPRINTF("mmap'ing vcpu state failed\n");
229         goto err;
230     }
231
232     if (s->coalesced_mmio && !s->coalesced_mmio_ring) {
233         s->coalesced_mmio_ring =
234             (void *)env->kvm_run + s->coalesced_mmio * PAGE_SIZE;
235     }
236
237     ret = kvm_arch_init_vcpu(env);
238     if (ret == 0) {
239         qemu_register_reset(kvm_reset_vcpu, env);
240         kvm_arch_reset_vcpu(env);
241     }
242 err:
243     return ret;
244 }
245
246 /*
247  * dirty pages logging control
248  */
249
250 static int kvm_mem_flags(KVMState *s, bool log_dirty)
251 {
252     return log_dirty ? KVM_MEM_LOG_DIRTY_PAGES : 0;
253 }
254
255 static int kvm_slot_dirty_pages_log_change(KVMSlot *mem, bool log_dirty)
256 {
257     KVMState *s = kvm_state;
258     int flags, mask = KVM_MEM_LOG_DIRTY_PAGES;
259     int old_flags;
260
261     old_flags = mem->flags;
262
263     flags = (mem->flags & ~mask) | kvm_mem_flags(s, log_dirty);
264     mem->flags = flags;
265
266     /* If nothing changed effectively, no need to issue ioctl */
267     if (s->migration_log) {
268         flags |= KVM_MEM_LOG_DIRTY_PAGES;
269     }
270
271     if (flags == old_flags) {
272         return 0;
273     }
274
275     return kvm_set_user_memory_region(s, mem);
276 }
277
278 static int kvm_dirty_pages_log_change(target_phys_addr_t phys_addr,
279                                       ram_addr_t size, bool log_dirty)
280 {
281     KVMState *s = kvm_state;
282     KVMSlot *mem = kvm_lookup_matching_slot(s, phys_addr, phys_addr + size);
283
284     if (mem == NULL)  {
285         fprintf(stderr, "BUG: %s: invalid parameters " TARGET_FMT_plx "-"
286                 TARGET_FMT_plx "\n", __func__, phys_addr,
287                 (target_phys_addr_t)(phys_addr + size - 1));
288         return -EINVAL;
289     }
290     return kvm_slot_dirty_pages_log_change(mem, log_dirty);
291 }
292
293 static void kvm_log_start(MemoryListener *listener,
294                           MemoryRegionSection *section)
295 {
296     int r;
297
298     r = kvm_dirty_pages_log_change(section->offset_within_address_space,
299                                    section->size, true);
300     if (r < 0) {
301         abort();
302     }
303 }
304
305 static void kvm_log_stop(MemoryListener *listener,
306                           MemoryRegionSection *section)
307 {
308     int r;
309
310     r = kvm_dirty_pages_log_change(section->offset_within_address_space,
311                                    section->size, false);
312     if (r < 0) {
313         abort();
314     }
315 }
316
317 static int kvm_set_migration_log(int enable)
318 {
319     KVMState *s = kvm_state;
320     KVMSlot *mem;
321     int i, err;
322
323     s->migration_log = enable;
324
325     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
326         mem = &s->slots[i];
327
328         if (!mem->memory_size) {
329             continue;
330         }
331         if (!!(mem->flags & KVM_MEM_LOG_DIRTY_PAGES) == enable) {
332             continue;
333         }
334         err = kvm_set_user_memory_region(s, mem);
335         if (err) {
336             return err;
337         }
338     }
339     return 0;
340 }
341
342 /* get kvm's dirty pages bitmap and update qemu's */
343 static int kvm_get_dirty_pages_log_range(unsigned long start_addr,
344                                          unsigned long *bitmap,
345                                          unsigned long offset,
346                                          unsigned long mem_size)
347 {
348     unsigned int i, j;
349     unsigned long page_number, addr, addr1, c;
350     ram_addr_t ram_addr;
351     unsigned int len = ((mem_size / TARGET_PAGE_SIZE) + HOST_LONG_BITS - 1) /
352         HOST_LONG_BITS;
353
354     /*
355      * bitmap-traveling is faster than memory-traveling (for addr...)
356      * especially when most of the memory is not dirty.
357      */
358     for (i = 0; i < len; i++) {
359         if (bitmap[i] != 0) {
360             c = leul_to_cpu(bitmap[i]);
361             do {
362                 j = ffsl(c) - 1;
363                 c &= ~(1ul << j);
364                 page_number = i * HOST_LONG_BITS + j;
365                 addr1 = page_number * TARGET_PAGE_SIZE;
366                 addr = offset + addr1;
367                 ram_addr = cpu_get_physical_page_desc(addr);
368                 cpu_physical_memory_set_dirty(ram_addr);
369             } while (c != 0);
370         }
371     }
372     return 0;
373 }
374
375 #define ALIGN(x, y)  (((x)+(y)-1) & ~((y)-1))
376
377 /**
378  * kvm_physical_sync_dirty_bitmap - Grab dirty bitmap from kernel space
379  * This function updates qemu's dirty bitmap using cpu_physical_memory_set_dirty().
380  * This means all bits are set to dirty.
381  *
382  * @start_add: start of logged region.
383  * @end_addr: end of logged region.
384  */
385 static int kvm_physical_sync_dirty_bitmap(target_phys_addr_t start_addr,
386                                           target_phys_addr_t end_addr)
387 {
388     KVMState *s = kvm_state;
389     unsigned long size, allocated_size = 0;
390     KVMDirtyLog d;
391     KVMSlot *mem;
392     int ret = 0;
393
394     d.dirty_bitmap = NULL;
395     while (start_addr < end_addr) {
396         mem = kvm_lookup_overlapping_slot(s, start_addr, end_addr);
397         if (mem == NULL) {
398             break;
399         }
400
401         /* XXX bad kernel interface alert
402          * For dirty bitmap, kernel allocates array of size aligned to
403          * bits-per-long.  But for case when the kernel is 64bits and
404          * the userspace is 32bits, userspace can't align to the same
405          * bits-per-long, since sizeof(long) is different between kernel
406          * and user space.  This way, userspace will provide buffer which
407          * may be 4 bytes less than the kernel will use, resulting in
408          * userspace memory corruption (which is not detectable by valgrind
409          * too, in most cases).
410          * So for now, let's align to 64 instead of HOST_LONG_BITS here, in
411          * a hope that sizeof(long) wont become >8 any time soon.
412          */
413         size = ALIGN(((mem->memory_size) >> TARGET_PAGE_BITS),
414                      /*HOST_LONG_BITS*/ 64) / 8;
415         if (!d.dirty_bitmap) {
416             d.dirty_bitmap = g_malloc(size);
417         } else if (size > allocated_size) {
418             d.dirty_bitmap = g_realloc(d.dirty_bitmap, size);
419         }
420         allocated_size = size;
421         memset(d.dirty_bitmap, 0, allocated_size);
422
423         d.slot = mem->slot;
424
425         if (kvm_vm_ioctl(s, KVM_GET_DIRTY_LOG, &d) == -1) {
426             DPRINTF("ioctl failed %d\n", errno);
427             ret = -1;
428             break;
429         }
430
431         kvm_get_dirty_pages_log_range(mem->start_addr, d.dirty_bitmap,
432                                       mem->start_addr, mem->memory_size);
433         start_addr = mem->start_addr + mem->memory_size;
434     }
435     g_free(d.dirty_bitmap);
436
437     return ret;
438 }
439
440 int kvm_coalesce_mmio_region(target_phys_addr_t start, ram_addr_t size)
441 {
442     int ret = -ENOSYS;
443     KVMState *s = kvm_state;
444
445     if (s->coalesced_mmio) {
446         struct kvm_coalesced_mmio_zone zone;
447
448         zone.addr = start;
449         zone.size = size;
450
451         ret = kvm_vm_ioctl(s, KVM_REGISTER_COALESCED_MMIO, &zone);
452     }
453
454     return ret;
455 }
456
457 int kvm_uncoalesce_mmio_region(target_phys_addr_t start, ram_addr_t size)
458 {
459     int ret = -ENOSYS;
460     KVMState *s = kvm_state;
461
462     if (s->coalesced_mmio) {
463         struct kvm_coalesced_mmio_zone zone;
464
465         zone.addr = start;
466         zone.size = size;
467
468         ret = kvm_vm_ioctl(s, KVM_UNREGISTER_COALESCED_MMIO, &zone);
469     }
470
471     return ret;
472 }
473
474 int kvm_check_extension(KVMState *s, unsigned int extension)
475 {
476     int ret;
477
478     ret = kvm_ioctl(s, KVM_CHECK_EXTENSION, extension);
479     if (ret < 0) {
480         ret = 0;
481     }
482
483     return ret;
484 }
485
486 static int kvm_check_many_ioeventfds(void)
487 {
488     /* Userspace can use ioeventfd for io notification.  This requires a host
489      * that supports eventfd(2) and an I/O thread; since eventfd does not
490      * support SIGIO it cannot interrupt the vcpu.
491      *
492      * Older kernels have a 6 device limit on the KVM io bus.  Find out so we
493      * can avoid creating too many ioeventfds.
494      */
495 #if defined(CONFIG_EVENTFD)
496     int ioeventfds[7];
497     int i, ret = 0;
498     for (i = 0; i < ARRAY_SIZE(ioeventfds); i++) {
499         ioeventfds[i] = eventfd(0, EFD_CLOEXEC);
500         if (ioeventfds[i] < 0) {
501             break;
502         }
503         ret = kvm_set_ioeventfd_pio_word(ioeventfds[i], 0, i, true);
504         if (ret < 0) {
505             close(ioeventfds[i]);
506             break;
507         }
508     }
509
510     /* Decide whether many devices are supported or not */
511     ret = i == ARRAY_SIZE(ioeventfds);
512
513     while (i-- > 0) {
514         kvm_set_ioeventfd_pio_word(ioeventfds[i], 0, i, false);
515         close(ioeventfds[i]);
516     }
517     return ret;
518 #else
519     return 0;
520 #endif
521 }
522
523 static const KVMCapabilityInfo *
524 kvm_check_extension_list(KVMState *s, const KVMCapabilityInfo *list)
525 {
526     while (list->name) {
527         if (!kvm_check_extension(s, list->value)) {
528             return list;
529         }
530         list++;
531     }
532     return NULL;
533 }
534
535 static void kvm_set_phys_mem(MemoryRegionSection *section, bool add)
536 {
537     KVMState *s = kvm_state;
538     KVMSlot *mem, old;
539     int err;
540     MemoryRegion *mr = section->mr;
541     bool log_dirty = memory_region_is_logging(mr);
542     target_phys_addr_t start_addr = section->offset_within_address_space;
543     ram_addr_t size = section->size;
544     void *ram = NULL;
545
546     /* kvm works in page size chunks, but the function may be called
547        with sub-page size and unaligned start address. */
548     size = TARGET_PAGE_ALIGN(size);
549     start_addr = TARGET_PAGE_ALIGN(start_addr);
550
551     if (!memory_region_is_ram(mr)) {
552         return;
553     }
554
555     ram = memory_region_get_ram_ptr(mr) + section->offset_within_region;
556
557     while (1) {
558         mem = kvm_lookup_overlapping_slot(s, start_addr, start_addr + size);
559         if (!mem) {
560             break;
561         }
562
563         if (add && start_addr >= mem->start_addr &&
564             (start_addr + size <= mem->start_addr + mem->memory_size) &&
565             (ram - start_addr == mem->ram - mem->start_addr)) {
566             /* The new slot fits into the existing one and comes with
567              * identical parameters - update flags and done. */
568             kvm_slot_dirty_pages_log_change(mem, log_dirty);
569             return;
570         }
571
572         old = *mem;
573
574         /* unregister the overlapping slot */
575         mem->memory_size = 0;
576         err = kvm_set_user_memory_region(s, mem);
577         if (err) {
578             fprintf(stderr, "%s: error unregistering overlapping slot: %s\n",
579                     __func__, strerror(-err));
580             abort();
581         }
582
583         /* Workaround for older KVM versions: we can't join slots, even not by
584          * unregistering the previous ones and then registering the larger
585          * slot. We have to maintain the existing fragmentation. Sigh.
586          *
587          * This workaround assumes that the new slot starts at the same
588          * address as the first existing one. If not or if some overlapping
589          * slot comes around later, we will fail (not seen in practice so far)
590          * - and actually require a recent KVM version. */
591         if (s->broken_set_mem_region &&
592             old.start_addr == start_addr && old.memory_size < size && add) {
593             mem = kvm_alloc_slot(s);
594             mem->memory_size = old.memory_size;
595             mem->start_addr = old.start_addr;
596             mem->ram = old.ram;
597             mem->flags = kvm_mem_flags(s, log_dirty);
598
599             err = kvm_set_user_memory_region(s, mem);
600             if (err) {
601                 fprintf(stderr, "%s: error updating slot: %s\n", __func__,
602                         strerror(-err));
603                 abort();
604             }
605
606             start_addr += old.memory_size;
607             ram += old.memory_size;
608             size -= old.memory_size;
609             continue;
610         }
611
612         /* register prefix slot */
613         if (old.start_addr < start_addr) {
614             mem = kvm_alloc_slot(s);
615             mem->memory_size = start_addr - old.start_addr;
616             mem->start_addr = old.start_addr;
617             mem->ram = old.ram;
618             mem->flags =  kvm_mem_flags(s, log_dirty);
619
620             err = kvm_set_user_memory_region(s, mem);
621             if (err) {
622                 fprintf(stderr, "%s: error registering prefix slot: %s\n",
623                         __func__, strerror(-err));
624 #ifdef TARGET_PPC
625                 fprintf(stderr, "%s: This is probably because your kernel's " \
626                                 "PAGE_SIZE is too big. Please try to use 4k " \
627                                 "PAGE_SIZE!\n", __func__);
628 #endif
629                 abort();
630             }
631         }
632
633         /* register suffix slot */
634         if (old.start_addr + old.memory_size > start_addr + size) {
635             ram_addr_t size_delta;
636
637             mem = kvm_alloc_slot(s);
638             mem->start_addr = start_addr + size;
639             size_delta = mem->start_addr - old.start_addr;
640             mem->memory_size = old.memory_size - size_delta;
641             mem->ram = old.ram + size_delta;
642             mem->flags = kvm_mem_flags(s, log_dirty);
643
644             err = kvm_set_user_memory_region(s, mem);
645             if (err) {
646                 fprintf(stderr, "%s: error registering suffix slot: %s\n",
647                         __func__, strerror(-err));
648                 abort();
649             }
650         }
651     }
652
653     /* in case the KVM bug workaround already "consumed" the new slot */
654     if (!size) {
655         return;
656     }
657     if (!add) {
658         return;
659     }
660     mem = kvm_alloc_slot(s);
661     mem->memory_size = size;
662     mem->start_addr = start_addr;
663     mem->ram = ram;
664     mem->flags = kvm_mem_flags(s, log_dirty);
665
666     err = kvm_set_user_memory_region(s, mem);
667     if (err) {
668         fprintf(stderr, "%s: error registering slot: %s\n", __func__,
669                 strerror(-err));
670         abort();
671     }
672 }
673
674 static void kvm_region_add(MemoryListener *listener,
675                            MemoryRegionSection *section)
676 {
677     kvm_set_phys_mem(section, true);
678 }
679
680 static void kvm_region_del(MemoryListener *listener,
681                            MemoryRegionSection *section)
682 {
683     kvm_set_phys_mem(section, false);
684 }
685
686 static void kvm_log_sync(MemoryListener *listener,
687                          MemoryRegionSection *section)
688 {
689     target_phys_addr_t start = section->offset_within_address_space;
690     target_phys_addr_t end = start + section->size;
691     int r;
692
693     r = kvm_physical_sync_dirty_bitmap(start, end);
694     if (r < 0) {
695         abort();
696     }
697 }
698
699 static void kvm_log_global_start(struct MemoryListener *listener)
700 {
701     int r;
702
703     r = kvm_set_migration_log(1);
704     assert(r >= 0);
705 }
706
707 static void kvm_log_global_stop(struct MemoryListener *listener)
708 {
709     int r;
710
711     r = kvm_set_migration_log(0);
712     assert(r >= 0);
713 }
714
715 static MemoryListener kvm_memory_listener = {
716     .region_add = kvm_region_add,
717     .region_del = kvm_region_del,
718     .log_start = kvm_log_start,
719     .log_stop = kvm_log_stop,
720     .log_sync = kvm_log_sync,
721     .log_global_start = kvm_log_global_start,
722     .log_global_stop = kvm_log_global_stop,
723 };
724
725 static void kvm_handle_interrupt(CPUState *env, int mask)
726 {
727     env->interrupt_request |= mask;
728
729     if (!qemu_cpu_is_self(env)) {
730         qemu_cpu_kick(env);
731     }
732 }
733
734 int kvm_init(void)
735 {
736     static const char upgrade_note[] =
737         "Please upgrade to at least kernel 2.6.29 or recent kvm-kmod\n"
738         "(see http://sourceforge.net/projects/kvm).\n";
739     KVMState *s;
740     const KVMCapabilityInfo *missing_cap;
741     int ret;
742     int i;
743
744     s = g_malloc0(sizeof(KVMState));
745
746 #ifdef KVM_CAP_SET_GUEST_DEBUG
747     QTAILQ_INIT(&s->kvm_sw_breakpoints);
748 #endif
749     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
750         s->slots[i].slot = i;
751     }
752     s->vmfd = -1;
753     s->fd = qemu_open("/dev/kvm", O_RDWR);
754     if (s->fd == -1) {
755         fprintf(stderr, "Could not access KVM kernel module: %m\n");
756         ret = -errno;
757         goto err;
758     }
759
760     ret = kvm_ioctl(s, KVM_GET_API_VERSION, 0);
761     if (ret < KVM_API_VERSION) {
762         if (ret > 0) {
763             ret = -EINVAL;
764         }
765         fprintf(stderr, "kvm version too old\n");
766         goto err;
767     }
768
769     if (ret > KVM_API_VERSION) {
770         ret = -EINVAL;
771         fprintf(stderr, "kvm version not supported\n");
772         goto err;
773     }
774
775     s->vmfd = kvm_ioctl(s, KVM_CREATE_VM, 0);
776     if (s->vmfd < 0) {
777 #ifdef TARGET_S390X
778         fprintf(stderr, "Please add the 'switch_amode' kernel parameter to "
779                         "your host kernel command line\n");
780 #endif
781         ret = s->vmfd;
782         goto err;
783     }
784
785     missing_cap = kvm_check_extension_list(s, kvm_required_capabilites);
786     if (!missing_cap) {
787         missing_cap =
788             kvm_check_extension_list(s, kvm_arch_required_capabilities);
789     }
790     if (missing_cap) {
791         ret = -EINVAL;
792         fprintf(stderr, "kvm does not support %s\n%s",
793                 missing_cap->name, upgrade_note);
794         goto err;
795     }
796
797     s->coalesced_mmio = kvm_check_extension(s, KVM_CAP_COALESCED_MMIO);
798
799     s->broken_set_mem_region = 1;
800     ret = kvm_check_extension(s, KVM_CAP_JOIN_MEMORY_REGIONS_WORKS);
801     if (ret > 0) {
802         s->broken_set_mem_region = 0;
803     }
804
805 #ifdef KVM_CAP_VCPU_EVENTS
806     s->vcpu_events = kvm_check_extension(s, KVM_CAP_VCPU_EVENTS);
807 #endif
808
809     s->robust_singlestep =
810         kvm_check_extension(s, KVM_CAP_X86_ROBUST_SINGLESTEP);
811
812 #ifdef KVM_CAP_DEBUGREGS
813     s->debugregs = kvm_check_extension(s, KVM_CAP_DEBUGREGS);
814 #endif
815
816 #ifdef KVM_CAP_XSAVE
817     s->xsave = kvm_check_extension(s, KVM_CAP_XSAVE);
818 #endif
819
820 #ifdef KVM_CAP_XCRS
821     s->xcrs = kvm_check_extension(s, KVM_CAP_XCRS);
822 #endif
823
824     ret = kvm_arch_init(s);
825     if (ret < 0) {
826         goto err;
827     }
828
829     kvm_state = s;
830     memory_listener_register(&kvm_memory_listener);
831
832     s->many_ioeventfds = kvm_check_many_ioeventfds();
833
834     cpu_interrupt_handler = kvm_handle_interrupt;
835
836     return 0;
837
838 err:
839     if (s) {
840         if (s->vmfd >= 0) {
841             close(s->vmfd);
842         }
843         if (s->fd != -1) {
844             close(s->fd);
845         }
846     }
847     g_free(s);
848
849     return ret;
850 }
851
852 static void kvm_handle_io(uint16_t port, void *data, int direction, int size,
853                           uint32_t count)
854 {
855     int i;
856     uint8_t *ptr = data;
857
858     for (i = 0; i < count; i++) {
859         if (direction == KVM_EXIT_IO_IN) {
860             switch (size) {
861             case 1:
862                 stb_p(ptr, cpu_inb(port));
863                 break;
864             case 2:
865                 stw_p(ptr, cpu_inw(port));
866                 break;
867             case 4:
868                 stl_p(ptr, cpu_inl(port));
869                 break;
870             }
871         } else {
872             switch (size) {
873             case 1:
874                 cpu_outb(port, ldub_p(ptr));
875                 break;
876             case 2:
877                 cpu_outw(port, lduw_p(ptr));
878                 break;
879             case 4:
880                 cpu_outl(port, ldl_p(ptr));
881                 break;
882             }
883         }
884
885         ptr += size;
886     }
887 }
888
889 static int kvm_handle_internal_error(CPUState *env, struct kvm_run *run)
890 {
891     fprintf(stderr, "KVM internal error.");
892     if (kvm_check_extension(kvm_state, KVM_CAP_INTERNAL_ERROR_DATA)) {
893         int i;
894
895         fprintf(stderr, " Suberror: %d\n", run->internal.suberror);
896         for (i = 0; i < run->internal.ndata; ++i) {
897             fprintf(stderr, "extra data[%d]: %"PRIx64"\n",
898                     i, (uint64_t)run->internal.data[i]);
899         }
900     } else {
901         fprintf(stderr, "\n");
902     }
903     if (run->internal.suberror == KVM_INTERNAL_ERROR_EMULATION) {
904         fprintf(stderr, "emulation failure\n");
905         if (!kvm_arch_stop_on_emulation_error(env)) {
906             cpu_dump_state(env, stderr, fprintf, CPU_DUMP_CODE);
907             return EXCP_INTERRUPT;
908         }
909     }
910     /* FIXME: Should trigger a qmp message to let management know
911      * something went wrong.
912      */
913     return -1;
914 }
915
916 void kvm_flush_coalesced_mmio_buffer(void)
917 {
918     KVMState *s = kvm_state;
919
920     if (s->coalesced_flush_in_progress) {
921         return;
922     }
923
924     s->coalesced_flush_in_progress = true;
925
926     if (s->coalesced_mmio_ring) {
927         struct kvm_coalesced_mmio_ring *ring = s->coalesced_mmio_ring;
928         while (ring->first != ring->last) {
929             struct kvm_coalesced_mmio *ent;
930
931             ent = &ring->coalesced_mmio[ring->first];
932
933             cpu_physical_memory_write(ent->phys_addr, ent->data, ent->len);
934             smp_wmb();
935             ring->first = (ring->first + 1) % KVM_COALESCED_MMIO_MAX;
936         }
937     }
938
939     s->coalesced_flush_in_progress = false;
940 }
941
942 static void do_kvm_cpu_synchronize_state(void *_env)
943 {
944     CPUState *env = _env;
945
946     if (!env->kvm_vcpu_dirty) {
947         kvm_arch_get_registers(env);
948         env->kvm_vcpu_dirty = 1;
949     }
950 }
951
952 void kvm_cpu_synchronize_state(CPUState *env)
953 {
954     if (!env->kvm_vcpu_dirty) {
955         run_on_cpu(env, do_kvm_cpu_synchronize_state, env);
956     }
957 }
958
959 void kvm_cpu_synchronize_post_reset(CPUState *env)
960 {
961     kvm_arch_put_registers(env, KVM_PUT_RESET_STATE);
962     env->kvm_vcpu_dirty = 0;
963 }
964
965 void kvm_cpu_synchronize_post_init(CPUState *env)
966 {
967     kvm_arch_put_registers(env, KVM_PUT_FULL_STATE);
968     env->kvm_vcpu_dirty = 0;
969 }
970
971 int kvm_cpu_exec(CPUState *env)
972 {
973     struct kvm_run *run = env->kvm_run;
974     int ret, run_ret;
975
976     DPRINTF("kvm_cpu_exec()\n");
977
978     if (kvm_arch_process_async_events(env)) {
979         env->exit_request = 0;
980         return EXCP_HLT;
981     }
982
983     cpu_single_env = env;
984
985     do {
986         if (env->kvm_vcpu_dirty) {
987             kvm_arch_put_registers(env, KVM_PUT_RUNTIME_STATE);
988             env->kvm_vcpu_dirty = 0;
989         }
990
991         kvm_arch_pre_run(env, run);
992         if (env->exit_request) {
993             DPRINTF("interrupt exit requested\n");
994             /*
995              * KVM requires us to reenter the kernel after IO exits to complete
996              * instruction emulation. This self-signal will ensure that we
997              * leave ASAP again.
998              */
999             qemu_cpu_kick_self();
1000         }
1001         cpu_single_env = NULL;
1002         qemu_mutex_unlock_iothread();
1003
1004         run_ret = kvm_vcpu_ioctl(env, KVM_RUN, 0);
1005
1006         qemu_mutex_lock_iothread();
1007         cpu_single_env = env;
1008         kvm_arch_post_run(env, run);
1009
1010         kvm_flush_coalesced_mmio_buffer();
1011
1012         if (run_ret < 0) {
1013             if (run_ret == -EINTR || run_ret == -EAGAIN) {
1014                 DPRINTF("io window exit\n");
1015                 ret = EXCP_INTERRUPT;
1016                 break;
1017             }
1018             fprintf(stderr, "error: kvm run failed %s\n",
1019                     strerror(-run_ret));
1020             abort();
1021         }
1022
1023         switch (run->exit_reason) {
1024         case KVM_EXIT_IO:
1025             DPRINTF("handle_io\n");
1026             kvm_handle_io(run->io.port,
1027                           (uint8_t *)run + run->io.data_offset,
1028                           run->io.direction,
1029                           run->io.size,
1030                           run->io.count);
1031             ret = 0;
1032             break;
1033         case KVM_EXIT_MMIO:
1034             DPRINTF("handle_mmio\n");
1035             cpu_physical_memory_rw(run->mmio.phys_addr,
1036                                    run->mmio.data,
1037                                    run->mmio.len,
1038                                    run->mmio.is_write);
1039             ret = 0;
1040             break;
1041         case KVM_EXIT_IRQ_WINDOW_OPEN:
1042             DPRINTF("irq_window_open\n");
1043             ret = EXCP_INTERRUPT;
1044             break;
1045         case KVM_EXIT_SHUTDOWN:
1046             DPRINTF("shutdown\n");
1047             qemu_system_reset_request();
1048             ret = EXCP_INTERRUPT;
1049             break;
1050         case KVM_EXIT_UNKNOWN:
1051             fprintf(stderr, "KVM: unknown exit, hardware reason %" PRIx64 "\n",
1052                     (uint64_t)run->hw.hardware_exit_reason);
1053             ret = -1;
1054             break;
1055         case KVM_EXIT_INTERNAL_ERROR:
1056             ret = kvm_handle_internal_error(env, run);
1057             break;
1058         default:
1059             DPRINTF("kvm_arch_handle_exit\n");
1060             ret = kvm_arch_handle_exit(env, run);
1061             break;
1062         }
1063     } while (ret == 0);
1064
1065     if (ret < 0) {
1066         cpu_dump_state(env, stderr, fprintf, CPU_DUMP_CODE);
1067         vm_stop(RUN_STATE_INTERNAL_ERROR);
1068     }
1069
1070     env->exit_request = 0;
1071     cpu_single_env = NULL;
1072     return ret;
1073 }
1074
1075 int kvm_ioctl(KVMState *s, int type, ...)
1076 {
1077     int ret;
1078     void *arg;
1079     va_list ap;
1080
1081     va_start(ap, type);
1082     arg = va_arg(ap, void *);
1083     va_end(ap);
1084
1085     ret = ioctl(s->fd, type, arg);
1086     if (ret == -1) {
1087         ret = -errno;
1088     }
1089     return ret;
1090 }
1091
1092 int kvm_vm_ioctl(KVMState *s, int type, ...)
1093 {
1094     int ret;
1095     void *arg;
1096     va_list ap;
1097
1098     va_start(ap, type);
1099     arg = va_arg(ap, void *);
1100     va_end(ap);
1101
1102     ret = ioctl(s->vmfd, type, arg);
1103     if (ret == -1) {
1104         ret = -errno;
1105     }
1106     return ret;
1107 }
1108
1109 int kvm_vcpu_ioctl(CPUState *env, int type, ...)
1110 {
1111     int ret;
1112     void *arg;
1113     va_list ap;
1114
1115     va_start(ap, type);
1116     arg = va_arg(ap, void *);
1117     va_end(ap);
1118
1119     ret = ioctl(env->kvm_fd, type, arg);
1120     if (ret == -1) {
1121         ret = -errno;
1122     }
1123     return ret;
1124 }
1125
1126 int kvm_has_sync_mmu(void)
1127 {
1128     return kvm_check_extension(kvm_state, KVM_CAP_SYNC_MMU);
1129 }
1130
1131 int kvm_has_vcpu_events(void)
1132 {
1133     return kvm_state->vcpu_events;
1134 }
1135
1136 int kvm_has_robust_singlestep(void)
1137 {
1138     return kvm_state->robust_singlestep;
1139 }
1140
1141 int kvm_has_debugregs(void)
1142 {
1143     return kvm_state->debugregs;
1144 }
1145
1146 int kvm_has_xsave(void)
1147 {
1148     return kvm_state->xsave;
1149 }
1150
1151 int kvm_has_xcrs(void)
1152 {
1153     return kvm_state->xcrs;
1154 }
1155
1156 int kvm_has_many_ioeventfds(void)
1157 {
1158     if (!kvm_enabled()) {
1159         return 0;
1160     }
1161     return kvm_state->many_ioeventfds;
1162 }
1163
1164 void kvm_setup_guest_memory(void *start, size_t size)
1165 {
1166     if (!kvm_has_sync_mmu()) {
1167         int ret = qemu_madvise(start, size, QEMU_MADV_DONTFORK);
1168
1169         if (ret) {
1170             perror("qemu_madvise");
1171             fprintf(stderr,
1172                     "Need MADV_DONTFORK in absence of synchronous KVM MMU\n");
1173             exit(1);
1174         }
1175     }
1176 }
1177
1178 #ifdef KVM_CAP_SET_GUEST_DEBUG
1179 struct kvm_sw_breakpoint *kvm_find_sw_breakpoint(CPUState *env,
1180                                                  target_ulong pc)
1181 {
1182     struct kvm_sw_breakpoint *bp;
1183
1184     QTAILQ_FOREACH(bp, &env->kvm_state->kvm_sw_breakpoints, entry) {
1185         if (bp->pc == pc) {
1186             return bp;
1187         }
1188     }
1189     return NULL;
1190 }
1191
1192 int kvm_sw_breakpoints_active(CPUState *env)
1193 {
1194     return !QTAILQ_EMPTY(&env->kvm_state->kvm_sw_breakpoints);
1195 }
1196
1197 struct kvm_set_guest_debug_data {
1198     struct kvm_guest_debug dbg;
1199     CPUState *env;
1200     int err;
1201 };
1202
1203 static void kvm_invoke_set_guest_debug(void *data)
1204 {
1205     struct kvm_set_guest_debug_data *dbg_data = data;
1206     CPUState *env = dbg_data->env;
1207
1208     dbg_data->err = kvm_vcpu_ioctl(env, KVM_SET_GUEST_DEBUG, &dbg_data->dbg);
1209 }
1210
1211 int kvm_update_guest_debug(CPUState *env, unsigned long reinject_trap)
1212 {
1213     struct kvm_set_guest_debug_data data;
1214
1215     data.dbg.control = reinject_trap;
1216
1217     if (env->singlestep_enabled) {
1218         data.dbg.control |= KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_SINGLESTEP;
1219     }
1220     kvm_arch_update_guest_debug(env, &data.dbg);
1221     data.env = env;
1222
1223     run_on_cpu(env, kvm_invoke_set_guest_debug, &data);
1224     return data.err;
1225 }
1226
1227 int kvm_insert_breakpoint(CPUState *current_env, target_ulong addr,
1228                           target_ulong len, int type)
1229 {
1230     struct kvm_sw_breakpoint *bp;
1231     CPUState *env;
1232     int err;
1233
1234     if (type == GDB_BREAKPOINT_SW) {
1235         bp = kvm_find_sw_breakpoint(current_env, addr);
1236         if (bp) {
1237             bp->use_count++;
1238             return 0;
1239         }
1240
1241         bp = g_malloc(sizeof(struct kvm_sw_breakpoint));
1242         if (!bp) {
1243             return -ENOMEM;
1244         }
1245
1246         bp->pc = addr;
1247         bp->use_count = 1;
1248         err = kvm_arch_insert_sw_breakpoint(current_env, bp);
1249         if (err) {
1250             g_free(bp);
1251             return err;
1252         }
1253
1254         QTAILQ_INSERT_HEAD(&current_env->kvm_state->kvm_sw_breakpoints,
1255                           bp, entry);
1256     } else {
1257         err = kvm_arch_insert_hw_breakpoint(addr, len, type);
1258         if (err) {
1259             return err;
1260         }
1261     }
1262
1263     for (env = first_cpu; env != NULL; env = env->next_cpu) {
1264         err = kvm_update_guest_debug(env, 0);
1265         if (err) {
1266             return err;
1267         }
1268     }
1269     return 0;
1270 }
1271
1272 int kvm_remove_breakpoint(CPUState *current_env, target_ulong addr,
1273                           target_ulong len, int type)
1274 {
1275     struct kvm_sw_breakpoint *bp;
1276     CPUState *env;
1277     int err;
1278
1279     if (type == GDB_BREAKPOINT_SW) {
1280         bp = kvm_find_sw_breakpoint(current_env, addr);
1281         if (!bp) {
1282             return -ENOENT;
1283         }
1284
1285         if (bp->use_count > 1) {
1286             bp->use_count--;
1287             return 0;
1288         }
1289
1290         err = kvm_arch_remove_sw_breakpoint(current_env, bp);
1291         if (err) {
1292             return err;
1293         }
1294
1295         QTAILQ_REMOVE(&current_env->kvm_state->kvm_sw_breakpoints, bp, entry);
1296         g_free(bp);
1297     } else {
1298         err = kvm_arch_remove_hw_breakpoint(addr, len, type);
1299         if (err) {
1300             return err;
1301         }
1302     }
1303
1304     for (env = first_cpu; env != NULL; env = env->next_cpu) {
1305         err = kvm_update_guest_debug(env, 0);
1306         if (err) {
1307             return err;
1308         }
1309     }
1310     return 0;
1311 }
1312
1313 void kvm_remove_all_breakpoints(CPUState *current_env)
1314 {
1315     struct kvm_sw_breakpoint *bp, *next;
1316     KVMState *s = current_env->kvm_state;
1317     CPUState *env;
1318
1319     QTAILQ_FOREACH_SAFE(bp, &s->kvm_sw_breakpoints, entry, next) {
1320         if (kvm_arch_remove_sw_breakpoint(current_env, bp) != 0) {
1321             /* Try harder to find a CPU that currently sees the breakpoint. */
1322             for (env = first_cpu; env != NULL; env = env->next_cpu) {
1323                 if (kvm_arch_remove_sw_breakpoint(env, bp) == 0) {
1324                     break;
1325                 }
1326             }
1327         }
1328     }
1329     kvm_arch_remove_all_hw_breakpoints();
1330
1331     for (env = first_cpu; env != NULL; env = env->next_cpu) {
1332         kvm_update_guest_debug(env, 0);
1333     }
1334 }
1335
1336 #else /* !KVM_CAP_SET_GUEST_DEBUG */
1337
1338 int kvm_update_guest_debug(CPUState *env, unsigned long reinject_trap)
1339 {
1340     return -EINVAL;
1341 }
1342
1343 int kvm_insert_breakpoint(CPUState *current_env, target_ulong addr,
1344                           target_ulong len, int type)
1345 {
1346     return -EINVAL;
1347 }
1348
1349 int kvm_remove_breakpoint(CPUState *current_env, target_ulong addr,
1350                           target_ulong len, int type)
1351 {
1352     return -EINVAL;
1353 }
1354
1355 void kvm_remove_all_breakpoints(CPUState *current_env)
1356 {
1357 }
1358 #endif /* !KVM_CAP_SET_GUEST_DEBUG */
1359
1360 int kvm_set_signal_mask(CPUState *env, const sigset_t *sigset)
1361 {
1362     struct kvm_signal_mask *sigmask;
1363     int r;
1364
1365     if (!sigset) {
1366         return kvm_vcpu_ioctl(env, KVM_SET_SIGNAL_MASK, NULL);
1367     }
1368
1369     sigmask = g_malloc(sizeof(*sigmask) + sizeof(*sigset));
1370
1371     sigmask->len = 8;
1372     memcpy(sigmask->sigset, sigset, sizeof(*sigset));
1373     r = kvm_vcpu_ioctl(env, KVM_SET_SIGNAL_MASK, sigmask);
1374     g_free(sigmask);
1375
1376     return r;
1377 }
1378
1379 int kvm_set_ioeventfd_mmio_long(int fd, uint32_t addr, uint32_t val, bool assign)
1380 {
1381     int ret;
1382     struct kvm_ioeventfd iofd;
1383
1384     iofd.datamatch = val;
1385     iofd.addr = addr;
1386     iofd.len = 4;
1387     iofd.flags = KVM_IOEVENTFD_FLAG_DATAMATCH;
1388     iofd.fd = fd;
1389
1390     if (!kvm_enabled()) {
1391         return -ENOSYS;
1392     }
1393
1394     if (!assign) {
1395         iofd.flags |= KVM_IOEVENTFD_FLAG_DEASSIGN;
1396     }
1397
1398     ret = kvm_vm_ioctl(kvm_state, KVM_IOEVENTFD, &iofd);
1399
1400     if (ret < 0) {
1401         return -errno;
1402     }
1403
1404     return 0;
1405 }
1406
1407 int kvm_set_ioeventfd_pio_word(int fd, uint16_t addr, uint16_t val, bool assign)
1408 {
1409     struct kvm_ioeventfd kick = {
1410         .datamatch = val,
1411         .addr = addr,
1412         .len = 2,
1413         .flags = KVM_IOEVENTFD_FLAG_DATAMATCH | KVM_IOEVENTFD_FLAG_PIO,
1414         .fd = fd,
1415     };
1416     int r;
1417     if (!kvm_enabled()) {
1418         return -ENOSYS;
1419     }
1420     if (!assign) {
1421         kick.flags |= KVM_IOEVENTFD_FLAG_DEASSIGN;
1422     }
1423     r = kvm_vm_ioctl(kvm_state, KVM_IOEVENTFD, &kick);
1424     if (r < 0) {
1425         return r;
1426     }
1427     return 0;
1428 }
1429
1430 int kvm_on_sigbus_vcpu(CPUState *env, int code, void *addr)
1431 {
1432     return kvm_arch_on_sigbus_vcpu(env, code, addr);
1433 }
1434
1435 int kvm_on_sigbus(int code, void *addr)
1436 {
1437     return kvm_arch_on_sigbus(code, addr);
1438 }
This page took 0.102898 seconds and 4 git commands to generate.