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