]> Git Repo - qemu.git/blob - kvm-all.c
CPUPhysMemoryClient: Fix typo in phys memory client registration
[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     ram_addr_t phys_offset;
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     int broken_set_mem_region;
68     int migration_log;
69     int vcpu_events;
70     int robust_singlestep;
71     int debugregs;
72 #ifdef KVM_CAP_SET_GUEST_DEBUG
73     struct kvm_sw_breakpoint_head kvm_sw_breakpoints;
74 #endif
75     int irqchip_in_kernel;
76     int pit_in_kernel;
77     int xsave, xcrs;
78     int many_ioeventfds;
79 };
80
81 KVMState *kvm_state;
82
83 static const KVMCapabilityInfo kvm_required_capabilites[] = {
84     KVM_CAP_INFO(USER_MEMORY),
85     KVM_CAP_INFO(DESTROY_MEMORY_REGION_WORKS),
86     KVM_CAP_LAST_INFO
87 };
88
89 static KVMSlot *kvm_alloc_slot(KVMState *s)
90 {
91     int i;
92
93     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
94         if (s->slots[i].memory_size == 0) {
95             return &s->slots[i];
96         }
97     }
98
99     fprintf(stderr, "%s: no free slot available\n", __func__);
100     abort();
101 }
102
103 static KVMSlot *kvm_lookup_matching_slot(KVMState *s,
104                                          target_phys_addr_t start_addr,
105                                          target_phys_addr_t end_addr)
106 {
107     int i;
108
109     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
110         KVMSlot *mem = &s->slots[i];
111
112         if (start_addr == mem->start_addr &&
113             end_addr == mem->start_addr + mem->memory_size) {
114             return mem;
115         }
116     }
117
118     return NULL;
119 }
120
121 /*
122  * Find overlapping slot with lowest start address
123  */
124 static KVMSlot *kvm_lookup_overlapping_slot(KVMState *s,
125                                             target_phys_addr_t start_addr,
126                                             target_phys_addr_t end_addr)
127 {
128     KVMSlot *found = NULL;
129     int i;
130
131     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
132         KVMSlot *mem = &s->slots[i];
133
134         if (mem->memory_size == 0 ||
135             (found && found->start_addr < mem->start_addr)) {
136             continue;
137         }
138
139         if (end_addr > mem->start_addr &&
140             start_addr < mem->start_addr + mem->memory_size) {
141             found = mem;
142         }
143     }
144
145     return found;
146 }
147
148 int kvm_physical_memory_addr_from_ram(KVMState *s, ram_addr_t ram_addr,
149                                       target_phys_addr_t *phys_addr)
150 {
151     int i;
152
153     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
154         KVMSlot *mem = &s->slots[i];
155
156         if (ram_addr >= mem->phys_offset &&
157             ram_addr < mem->phys_offset + mem->memory_size) {
158             *phys_addr = mem->start_addr + (ram_addr - mem->phys_offset);
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)qemu_safe_ram_ptr(slot->phys_offset);
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         size = ALIGN(((mem->memory_size) >> TARGET_PAGE_BITS), HOST_LONG_BITS) / 8;
389         if (!d.dirty_bitmap) {
390             d.dirty_bitmap = qemu_malloc(size);
391         } else if (size > allocated_size) {
392             d.dirty_bitmap = qemu_realloc(d.dirty_bitmap, size);
393         }
394         allocated_size = size;
395         memset(d.dirty_bitmap, 0, allocated_size);
396
397         d.slot = mem->slot;
398
399         if (kvm_vm_ioctl(s, KVM_GET_DIRTY_LOG, &d) == -1) {
400             DPRINTF("ioctl failed %d\n", errno);
401             ret = -1;
402             break;
403         }
404
405         kvm_get_dirty_pages_log_range(mem->start_addr, d.dirty_bitmap,
406                                       mem->start_addr, mem->memory_size);
407         start_addr = mem->start_addr + mem->memory_size;
408     }
409     qemu_free(d.dirty_bitmap);
410
411     return ret;
412 }
413
414 int kvm_coalesce_mmio_region(target_phys_addr_t start, ram_addr_t size)
415 {
416     int ret = -ENOSYS;
417     KVMState *s = kvm_state;
418
419     if (s->coalesced_mmio) {
420         struct kvm_coalesced_mmio_zone zone;
421
422         zone.addr = start;
423         zone.size = size;
424
425         ret = kvm_vm_ioctl(s, KVM_REGISTER_COALESCED_MMIO, &zone);
426     }
427
428     return ret;
429 }
430
431 int kvm_uncoalesce_mmio_region(target_phys_addr_t start, ram_addr_t size)
432 {
433     int ret = -ENOSYS;
434     KVMState *s = kvm_state;
435
436     if (s->coalesced_mmio) {
437         struct kvm_coalesced_mmio_zone zone;
438
439         zone.addr = start;
440         zone.size = size;
441
442         ret = kvm_vm_ioctl(s, KVM_UNREGISTER_COALESCED_MMIO, &zone);
443     }
444
445     return ret;
446 }
447
448 int kvm_check_extension(KVMState *s, unsigned int extension)
449 {
450     int ret;
451
452     ret = kvm_ioctl(s, KVM_CHECK_EXTENSION, extension);
453     if (ret < 0) {
454         ret = 0;
455     }
456
457     return ret;
458 }
459
460 static int kvm_check_many_ioeventfds(void)
461 {
462     /* Userspace can use ioeventfd for io notification.  This requires a host
463      * that supports eventfd(2) and an I/O thread; since eventfd does not
464      * support SIGIO it cannot interrupt the vcpu.
465      *
466      * Older kernels have a 6 device limit on the KVM io bus.  Find out so we
467      * can avoid creating too many ioeventfds.
468      */
469 #if defined(CONFIG_EVENTFD) && defined(CONFIG_IOTHREAD)
470     int ioeventfds[7];
471     int i, ret = 0;
472     for (i = 0; i < ARRAY_SIZE(ioeventfds); i++) {
473         ioeventfds[i] = eventfd(0, EFD_CLOEXEC);
474         if (ioeventfds[i] < 0) {
475             break;
476         }
477         ret = kvm_set_ioeventfd_pio_word(ioeventfds[i], 0, i, true);
478         if (ret < 0) {
479             close(ioeventfds[i]);
480             break;
481         }
482     }
483
484     /* Decide whether many devices are supported or not */
485     ret = i == ARRAY_SIZE(ioeventfds);
486
487     while (i-- > 0) {
488         kvm_set_ioeventfd_pio_word(ioeventfds[i], 0, i, false);
489         close(ioeventfds[i]);
490     }
491     return ret;
492 #else
493     return 0;
494 #endif
495 }
496
497 static const KVMCapabilityInfo *
498 kvm_check_extension_list(KVMState *s, const KVMCapabilityInfo *list)
499 {
500     while (list->name) {
501         if (!kvm_check_extension(s, list->value)) {
502             return list;
503         }
504         list++;
505     }
506     return NULL;
507 }
508
509 static void kvm_set_phys_mem(target_phys_addr_t start_addr, ram_addr_t size,
510                              ram_addr_t phys_offset, bool log_dirty)
511 {
512     KVMState *s = kvm_state;
513     ram_addr_t flags = phys_offset & ~TARGET_PAGE_MASK;
514     KVMSlot *mem, old;
515     int err;
516
517     /* kvm works in page size chunks, but the function may be called
518        with sub-page size and unaligned start address. */
519     size = TARGET_PAGE_ALIGN(size);
520     start_addr = TARGET_PAGE_ALIGN(start_addr);
521
522     /* KVM does not support read-only slots */
523     phys_offset &= ~IO_MEM_ROM;
524
525     while (1) {
526         mem = kvm_lookup_overlapping_slot(s, start_addr, start_addr + size);
527         if (!mem) {
528             break;
529         }
530
531         if (flags < IO_MEM_UNASSIGNED && start_addr >= mem->start_addr &&
532             (start_addr + size <= mem->start_addr + mem->memory_size) &&
533             (phys_offset - start_addr == mem->phys_offset - mem->start_addr)) {
534             /* The new slot fits into the existing one and comes with
535              * identical parameters - update flags and done. */
536             kvm_slot_dirty_pages_log_change(mem, log_dirty);
537             return;
538         }
539
540         old = *mem;
541
542         /* unregister the overlapping slot */
543         mem->memory_size = 0;
544         err = kvm_set_user_memory_region(s, mem);
545         if (err) {
546             fprintf(stderr, "%s: error unregistering overlapping slot: %s\n",
547                     __func__, strerror(-err));
548             abort();
549         }
550
551         /* Workaround for older KVM versions: we can't join slots, even not by
552          * unregistering the previous ones and then registering the larger
553          * slot. We have to maintain the existing fragmentation. Sigh.
554          *
555          * This workaround assumes that the new slot starts at the same
556          * address as the first existing one. If not or if some overlapping
557          * slot comes around later, we will fail (not seen in practice so far)
558          * - and actually require a recent KVM version. */
559         if (s->broken_set_mem_region &&
560             old.start_addr == start_addr && old.memory_size < size &&
561             flags < IO_MEM_UNASSIGNED) {
562             mem = kvm_alloc_slot(s);
563             mem->memory_size = old.memory_size;
564             mem->start_addr = old.start_addr;
565             mem->phys_offset = old.phys_offset;
566             mem->flags = kvm_mem_flags(s, log_dirty);
567
568             err = kvm_set_user_memory_region(s, mem);
569             if (err) {
570                 fprintf(stderr, "%s: error updating slot: %s\n", __func__,
571                         strerror(-err));
572                 abort();
573             }
574
575             start_addr += old.memory_size;
576             phys_offset += old.memory_size;
577             size -= old.memory_size;
578             continue;
579         }
580
581         /* register prefix slot */
582         if (old.start_addr < start_addr) {
583             mem = kvm_alloc_slot(s);
584             mem->memory_size = start_addr - old.start_addr;
585             mem->start_addr = old.start_addr;
586             mem->phys_offset = old.phys_offset;
587             mem->flags =  kvm_mem_flags(s, log_dirty);
588
589             err = kvm_set_user_memory_region(s, mem);
590             if (err) {
591                 fprintf(stderr, "%s: error registering prefix slot: %s\n",
592                         __func__, strerror(-err));
593                 abort();
594             }
595         }
596
597         /* register suffix slot */
598         if (old.start_addr + old.memory_size > start_addr + size) {
599             ram_addr_t size_delta;
600
601             mem = kvm_alloc_slot(s);
602             mem->start_addr = start_addr + size;
603             size_delta = mem->start_addr - old.start_addr;
604             mem->memory_size = old.memory_size - size_delta;
605             mem->phys_offset = old.phys_offset + size_delta;
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 suffix slot: %s\n",
611                         __func__, strerror(-err));
612                 abort();
613             }
614         }
615     }
616
617     /* in case the KVM bug workaround already "consumed" the new slot */
618     if (!size) {
619         return;
620     }
621     /* KVM does not need to know about this memory */
622     if (flags >= IO_MEM_UNASSIGNED) {
623         return;
624     }
625     mem = kvm_alloc_slot(s);
626     mem->memory_size = size;
627     mem->start_addr = start_addr;
628     mem->phys_offset = phys_offset;
629     mem->flags = kvm_mem_flags(s, log_dirty);
630
631     err = kvm_set_user_memory_region(s, mem);
632     if (err) {
633         fprintf(stderr, "%s: error registering slot: %s\n", __func__,
634                 strerror(-err));
635         abort();
636     }
637 }
638
639 static void kvm_client_set_memory(struct CPUPhysMemoryClient *client,
640                                   target_phys_addr_t start_addr,
641                                   ram_addr_t size, ram_addr_t phys_offset,
642                                   bool log_dirty)
643 {
644     kvm_set_phys_mem(start_addr, size, phys_offset, log_dirty);
645 }
646
647 static int kvm_client_sync_dirty_bitmap(struct CPUPhysMemoryClient *client,
648                                         target_phys_addr_t start_addr,
649                                         target_phys_addr_t end_addr)
650 {
651     return kvm_physical_sync_dirty_bitmap(start_addr, end_addr);
652 }
653
654 static int kvm_client_migration_log(struct CPUPhysMemoryClient *client,
655                                     int enable)
656 {
657     return kvm_set_migration_log(enable);
658 }
659
660 static CPUPhysMemoryClient kvm_cpu_phys_memory_client = {
661     .set_memory = kvm_client_set_memory,
662     .sync_dirty_bitmap = kvm_client_sync_dirty_bitmap,
663     .migration_log = kvm_client_migration_log,
664     .log_start = kvm_log_start,
665     .log_stop = kvm_log_stop,
666 };
667
668 int kvm_init(void)
669 {
670     static const char upgrade_note[] =
671         "Please upgrade to at least kernel 2.6.29 or recent kvm-kmod\n"
672         "(see http://sourceforge.net/projects/kvm).\n";
673     KVMState *s;
674     const KVMCapabilityInfo *missing_cap;
675     int ret;
676     int i;
677
678     s = qemu_mallocz(sizeof(KVMState));
679
680 #ifdef KVM_CAP_SET_GUEST_DEBUG
681     QTAILQ_INIT(&s->kvm_sw_breakpoints);
682 #endif
683     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
684         s->slots[i].slot = i;
685     }
686     s->vmfd = -1;
687     s->fd = qemu_open("/dev/kvm", O_RDWR);
688     if (s->fd == -1) {
689         fprintf(stderr, "Could not access KVM kernel module: %m\n");
690         ret = -errno;
691         goto err;
692     }
693
694     ret = kvm_ioctl(s, KVM_GET_API_VERSION, 0);
695     if (ret < KVM_API_VERSION) {
696         if (ret > 0) {
697             ret = -EINVAL;
698         }
699         fprintf(stderr, "kvm version too old\n");
700         goto err;
701     }
702
703     if (ret > KVM_API_VERSION) {
704         ret = -EINVAL;
705         fprintf(stderr, "kvm version not supported\n");
706         goto err;
707     }
708
709     s->vmfd = kvm_ioctl(s, KVM_CREATE_VM, 0);
710     if (s->vmfd < 0) {
711 #ifdef TARGET_S390X
712         fprintf(stderr, "Please add the 'switch_amode' kernel parameter to "
713                         "your host kernel command line\n");
714 #endif
715         goto err;
716     }
717
718     missing_cap = kvm_check_extension_list(s, kvm_required_capabilites);
719     if (!missing_cap) {
720         missing_cap =
721             kvm_check_extension_list(s, kvm_arch_required_capabilities);
722     }
723     if (missing_cap) {
724         ret = -EINVAL;
725         fprintf(stderr, "kvm does not support %s\n%s",
726                 missing_cap->name, upgrade_note);
727         goto err;
728     }
729
730     s->coalesced_mmio = kvm_check_extension(s, KVM_CAP_COALESCED_MMIO);
731
732     s->broken_set_mem_region = 1;
733 #ifdef KVM_CAP_JOIN_MEMORY_REGIONS_WORKS
734     ret = kvm_check_extension(s, KVM_CAP_JOIN_MEMORY_REGIONS_WORKS);
735     if (ret > 0) {
736         s->broken_set_mem_region = 0;
737     }
738 #endif
739
740     s->vcpu_events = 0;
741 #ifdef KVM_CAP_VCPU_EVENTS
742     s->vcpu_events = kvm_check_extension(s, KVM_CAP_VCPU_EVENTS);
743 #endif
744
745     s->robust_singlestep = 0;
746 #ifdef KVM_CAP_X86_ROBUST_SINGLESTEP
747     s->robust_singlestep =
748         kvm_check_extension(s, KVM_CAP_X86_ROBUST_SINGLESTEP);
749 #endif
750
751     s->debugregs = 0;
752 #ifdef KVM_CAP_DEBUGREGS
753     s->debugregs = kvm_check_extension(s, KVM_CAP_DEBUGREGS);
754 #endif
755
756     s->xsave = 0;
757 #ifdef KVM_CAP_XSAVE
758     s->xsave = kvm_check_extension(s, KVM_CAP_XSAVE);
759 #endif
760
761     s->xcrs = 0;
762 #ifdef KVM_CAP_XCRS
763     s->xcrs = kvm_check_extension(s, KVM_CAP_XCRS);
764 #endif
765
766     ret = kvm_arch_init(s);
767     if (ret < 0) {
768         goto err;
769     }
770
771     kvm_state = s;
772     cpu_register_phys_memory_client(&kvm_cpu_phys_memory_client);
773
774     s->many_ioeventfds = kvm_check_many_ioeventfds();
775
776     return 0;
777
778 err:
779     if (s) {
780         if (s->vmfd != -1) {
781             close(s->vmfd);
782         }
783         if (s->fd != -1) {
784             close(s->fd);
785         }
786     }
787     qemu_free(s);
788
789     return ret;
790 }
791
792 static void kvm_handle_io(uint16_t port, void *data, int direction, int size,
793                           uint32_t count)
794 {
795     int i;
796     uint8_t *ptr = data;
797
798     for (i = 0; i < count; i++) {
799         if (direction == KVM_EXIT_IO_IN) {
800             switch (size) {
801             case 1:
802                 stb_p(ptr, cpu_inb(port));
803                 break;
804             case 2:
805                 stw_p(ptr, cpu_inw(port));
806                 break;
807             case 4:
808                 stl_p(ptr, cpu_inl(port));
809                 break;
810             }
811         } else {
812             switch (size) {
813             case 1:
814                 cpu_outb(port, ldub_p(ptr));
815                 break;
816             case 2:
817                 cpu_outw(port, lduw_p(ptr));
818                 break;
819             case 4:
820                 cpu_outl(port, ldl_p(ptr));
821                 break;
822             }
823         }
824
825         ptr += size;
826     }
827 }
828
829 #ifdef KVM_CAP_INTERNAL_ERROR_DATA
830 static int kvm_handle_internal_error(CPUState *env, struct kvm_run *run)
831 {
832     fprintf(stderr, "KVM internal error.");
833     if (kvm_check_extension(kvm_state, KVM_CAP_INTERNAL_ERROR_DATA)) {
834         int i;
835
836         fprintf(stderr, " Suberror: %d\n", run->internal.suberror);
837         for (i = 0; i < run->internal.ndata; ++i) {
838             fprintf(stderr, "extra data[%d]: %"PRIx64"\n",
839                     i, (uint64_t)run->internal.data[i]);
840         }
841     } else {
842         fprintf(stderr, "\n");
843     }
844     if (run->internal.suberror == KVM_INTERNAL_ERROR_EMULATION) {
845         fprintf(stderr, "emulation failure\n");
846         if (!kvm_arch_stop_on_emulation_error(env)) {
847             cpu_dump_state(env, stderr, fprintf, CPU_DUMP_CODE);
848             return EXCP_INTERRUPT;
849         }
850     }
851     /* FIXME: Should trigger a qmp message to let management know
852      * something went wrong.
853      */
854     return -1;
855 }
856 #endif
857
858 void kvm_flush_coalesced_mmio_buffer(void)
859 {
860     KVMState *s = kvm_state;
861     if (s->coalesced_mmio_ring) {
862         struct kvm_coalesced_mmio_ring *ring = s->coalesced_mmio_ring;
863         while (ring->first != ring->last) {
864             struct kvm_coalesced_mmio *ent;
865
866             ent = &ring->coalesced_mmio[ring->first];
867
868             cpu_physical_memory_write(ent->phys_addr, ent->data, ent->len);
869             smp_wmb();
870             ring->first = (ring->first + 1) % KVM_COALESCED_MMIO_MAX;
871         }
872     }
873 }
874
875 static void do_kvm_cpu_synchronize_state(void *_env)
876 {
877     CPUState *env = _env;
878
879     if (!env->kvm_vcpu_dirty) {
880         kvm_arch_get_registers(env);
881         env->kvm_vcpu_dirty = 1;
882     }
883 }
884
885 void kvm_cpu_synchronize_state(CPUState *env)
886 {
887     if (!env->kvm_vcpu_dirty) {
888         run_on_cpu(env, do_kvm_cpu_synchronize_state, env);
889     }
890 }
891
892 void kvm_cpu_synchronize_post_reset(CPUState *env)
893 {
894     kvm_arch_put_registers(env, KVM_PUT_RESET_STATE);
895     env->kvm_vcpu_dirty = 0;
896 }
897
898 void kvm_cpu_synchronize_post_init(CPUState *env)
899 {
900     kvm_arch_put_registers(env, KVM_PUT_FULL_STATE);
901     env->kvm_vcpu_dirty = 0;
902 }
903
904 int kvm_cpu_exec(CPUState *env)
905 {
906     struct kvm_run *run = env->kvm_run;
907     int ret, run_ret;
908
909     DPRINTF("kvm_cpu_exec()\n");
910
911     if (kvm_arch_process_async_events(env)) {
912         env->exit_request = 0;
913         return EXCP_HLT;
914     }
915
916     cpu_single_env = env;
917
918     do {
919         if (env->kvm_vcpu_dirty) {
920             kvm_arch_put_registers(env, KVM_PUT_RUNTIME_STATE);
921             env->kvm_vcpu_dirty = 0;
922         }
923
924         kvm_arch_pre_run(env, run);
925         if (env->exit_request) {
926             DPRINTF("interrupt exit requested\n");
927             /*
928              * KVM requires us to reenter the kernel after IO exits to complete
929              * instruction emulation. This self-signal will ensure that we
930              * leave ASAP again.
931              */
932             qemu_cpu_kick_self();
933         }
934         cpu_single_env = NULL;
935         qemu_mutex_unlock_iothread();
936
937         run_ret = kvm_vcpu_ioctl(env, KVM_RUN, 0);
938
939         qemu_mutex_lock_iothread();
940         cpu_single_env = env;
941         kvm_arch_post_run(env, run);
942
943         kvm_flush_coalesced_mmio_buffer();
944
945         if (run_ret < 0) {
946             if (run_ret == -EINTR || run_ret == -EAGAIN) {
947                 DPRINTF("io window exit\n");
948                 ret = EXCP_INTERRUPT;
949                 break;
950             }
951             DPRINTF("kvm run failed %s\n", strerror(-run_ret));
952             abort();
953         }
954
955         switch (run->exit_reason) {
956         case KVM_EXIT_IO:
957             DPRINTF("handle_io\n");
958             kvm_handle_io(run->io.port,
959                           (uint8_t *)run + run->io.data_offset,
960                           run->io.direction,
961                           run->io.size,
962                           run->io.count);
963             ret = 0;
964             break;
965         case KVM_EXIT_MMIO:
966             DPRINTF("handle_mmio\n");
967             cpu_physical_memory_rw(run->mmio.phys_addr,
968                                    run->mmio.data,
969                                    run->mmio.len,
970                                    run->mmio.is_write);
971             ret = 0;
972             break;
973         case KVM_EXIT_IRQ_WINDOW_OPEN:
974             DPRINTF("irq_window_open\n");
975             ret = EXCP_INTERRUPT;
976             break;
977         case KVM_EXIT_SHUTDOWN:
978             DPRINTF("shutdown\n");
979             qemu_system_reset_request();
980             ret = EXCP_INTERRUPT;
981             break;
982         case KVM_EXIT_UNKNOWN:
983             fprintf(stderr, "KVM: unknown exit, hardware reason %" PRIx64 "\n",
984                     (uint64_t)run->hw.hardware_exit_reason);
985             ret = -1;
986             break;
987 #ifdef KVM_CAP_INTERNAL_ERROR_DATA
988         case KVM_EXIT_INTERNAL_ERROR:
989             ret = kvm_handle_internal_error(env, run);
990             break;
991 #endif
992         default:
993             DPRINTF("kvm_arch_handle_exit\n");
994             ret = kvm_arch_handle_exit(env, run);
995             break;
996         }
997     } while (ret == 0);
998
999     if (ret < 0) {
1000         cpu_dump_state(env, stderr, fprintf, CPU_DUMP_CODE);
1001         vm_stop(VMSTOP_PANIC);
1002     }
1003
1004     env->exit_request = 0;
1005     cpu_single_env = NULL;
1006     return ret;
1007 }
1008
1009 int kvm_ioctl(KVMState *s, int type, ...)
1010 {
1011     int ret;
1012     void *arg;
1013     va_list ap;
1014
1015     va_start(ap, type);
1016     arg = va_arg(ap, void *);
1017     va_end(ap);
1018
1019     ret = ioctl(s->fd, type, arg);
1020     if (ret == -1) {
1021         ret = -errno;
1022     }
1023     return ret;
1024 }
1025
1026 int kvm_vm_ioctl(KVMState *s, int type, ...)
1027 {
1028     int ret;
1029     void *arg;
1030     va_list ap;
1031
1032     va_start(ap, type);
1033     arg = va_arg(ap, void *);
1034     va_end(ap);
1035
1036     ret = ioctl(s->vmfd, type, arg);
1037     if (ret == -1) {
1038         ret = -errno;
1039     }
1040     return ret;
1041 }
1042
1043 int kvm_vcpu_ioctl(CPUState *env, int type, ...)
1044 {
1045     int ret;
1046     void *arg;
1047     va_list ap;
1048
1049     va_start(ap, type);
1050     arg = va_arg(ap, void *);
1051     va_end(ap);
1052
1053     ret = ioctl(env->kvm_fd, type, arg);
1054     if (ret == -1) {
1055         ret = -errno;
1056     }
1057     return ret;
1058 }
1059
1060 int kvm_has_sync_mmu(void)
1061 {
1062     return kvm_check_extension(kvm_state, KVM_CAP_SYNC_MMU);
1063 }
1064
1065 int kvm_has_vcpu_events(void)
1066 {
1067     return kvm_state->vcpu_events;
1068 }
1069
1070 int kvm_has_robust_singlestep(void)
1071 {
1072     return kvm_state->robust_singlestep;
1073 }
1074
1075 int kvm_has_debugregs(void)
1076 {
1077     return kvm_state->debugregs;
1078 }
1079
1080 int kvm_has_xsave(void)
1081 {
1082     return kvm_state->xsave;
1083 }
1084
1085 int kvm_has_xcrs(void)
1086 {
1087     return kvm_state->xcrs;
1088 }
1089
1090 int kvm_has_many_ioeventfds(void)
1091 {
1092     if (!kvm_enabled()) {
1093         return 0;
1094     }
1095     return kvm_state->many_ioeventfds;
1096 }
1097
1098 void kvm_setup_guest_memory(void *start, size_t size)
1099 {
1100     if (!kvm_has_sync_mmu()) {
1101         int ret = qemu_madvise(start, size, QEMU_MADV_DONTFORK);
1102
1103         if (ret) {
1104             perror("qemu_madvise");
1105             fprintf(stderr,
1106                     "Need MADV_DONTFORK in absence of synchronous KVM MMU\n");
1107             exit(1);
1108         }
1109     }
1110 }
1111
1112 #ifdef KVM_CAP_SET_GUEST_DEBUG
1113 struct kvm_sw_breakpoint *kvm_find_sw_breakpoint(CPUState *env,
1114                                                  target_ulong pc)
1115 {
1116     struct kvm_sw_breakpoint *bp;
1117
1118     QTAILQ_FOREACH(bp, &env->kvm_state->kvm_sw_breakpoints, entry) {
1119         if (bp->pc == pc) {
1120             return bp;
1121         }
1122     }
1123     return NULL;
1124 }
1125
1126 int kvm_sw_breakpoints_active(CPUState *env)
1127 {
1128     return !QTAILQ_EMPTY(&env->kvm_state->kvm_sw_breakpoints);
1129 }
1130
1131 struct kvm_set_guest_debug_data {
1132     struct kvm_guest_debug dbg;
1133     CPUState *env;
1134     int err;
1135 };
1136
1137 static void kvm_invoke_set_guest_debug(void *data)
1138 {
1139     struct kvm_set_guest_debug_data *dbg_data = data;
1140     CPUState *env = dbg_data->env;
1141
1142     dbg_data->err = kvm_vcpu_ioctl(env, KVM_SET_GUEST_DEBUG, &dbg_data->dbg);
1143 }
1144
1145 int kvm_update_guest_debug(CPUState *env, unsigned long reinject_trap)
1146 {
1147     struct kvm_set_guest_debug_data data;
1148
1149     data.dbg.control = reinject_trap;
1150
1151     if (env->singlestep_enabled) {
1152         data.dbg.control |= KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_SINGLESTEP;
1153     }
1154     kvm_arch_update_guest_debug(env, &data.dbg);
1155     data.env = env;
1156
1157     run_on_cpu(env, kvm_invoke_set_guest_debug, &data);
1158     return data.err;
1159 }
1160
1161 int kvm_insert_breakpoint(CPUState *current_env, target_ulong addr,
1162                           target_ulong len, int type)
1163 {
1164     struct kvm_sw_breakpoint *bp;
1165     CPUState *env;
1166     int err;
1167
1168     if (type == GDB_BREAKPOINT_SW) {
1169         bp = kvm_find_sw_breakpoint(current_env, addr);
1170         if (bp) {
1171             bp->use_count++;
1172             return 0;
1173         }
1174
1175         bp = qemu_malloc(sizeof(struct kvm_sw_breakpoint));
1176         if (!bp) {
1177             return -ENOMEM;
1178         }
1179
1180         bp->pc = addr;
1181         bp->use_count = 1;
1182         err = kvm_arch_insert_sw_breakpoint(current_env, bp);
1183         if (err) {
1184             free(bp);
1185             return err;
1186         }
1187
1188         QTAILQ_INSERT_HEAD(&current_env->kvm_state->kvm_sw_breakpoints,
1189                           bp, entry);
1190     } else {
1191         err = kvm_arch_insert_hw_breakpoint(addr, len, type);
1192         if (err) {
1193             return err;
1194         }
1195     }
1196
1197     for (env = first_cpu; env != NULL; env = env->next_cpu) {
1198         err = kvm_update_guest_debug(env, 0);
1199         if (err) {
1200             return err;
1201         }
1202     }
1203     return 0;
1204 }
1205
1206 int kvm_remove_breakpoint(CPUState *current_env, target_ulong addr,
1207                           target_ulong len, int type)
1208 {
1209     struct kvm_sw_breakpoint *bp;
1210     CPUState *env;
1211     int err;
1212
1213     if (type == GDB_BREAKPOINT_SW) {
1214         bp = kvm_find_sw_breakpoint(current_env, addr);
1215         if (!bp) {
1216             return -ENOENT;
1217         }
1218
1219         if (bp->use_count > 1) {
1220             bp->use_count--;
1221             return 0;
1222         }
1223
1224         err = kvm_arch_remove_sw_breakpoint(current_env, bp);
1225         if (err) {
1226             return err;
1227         }
1228
1229         QTAILQ_REMOVE(&current_env->kvm_state->kvm_sw_breakpoints, bp, entry);
1230         qemu_free(bp);
1231     } else {
1232         err = kvm_arch_remove_hw_breakpoint(addr, len, type);
1233         if (err) {
1234             return err;
1235         }
1236     }
1237
1238     for (env = first_cpu; env != NULL; env = env->next_cpu) {
1239         err = kvm_update_guest_debug(env, 0);
1240         if (err) {
1241             return err;
1242         }
1243     }
1244     return 0;
1245 }
1246
1247 void kvm_remove_all_breakpoints(CPUState *current_env)
1248 {
1249     struct kvm_sw_breakpoint *bp, *next;
1250     KVMState *s = current_env->kvm_state;
1251     CPUState *env;
1252
1253     QTAILQ_FOREACH_SAFE(bp, &s->kvm_sw_breakpoints, entry, next) {
1254         if (kvm_arch_remove_sw_breakpoint(current_env, bp) != 0) {
1255             /* Try harder to find a CPU that currently sees the breakpoint. */
1256             for (env = first_cpu; env != NULL; env = env->next_cpu) {
1257                 if (kvm_arch_remove_sw_breakpoint(env, bp) == 0) {
1258                     break;
1259                 }
1260             }
1261         }
1262     }
1263     kvm_arch_remove_all_hw_breakpoints();
1264
1265     for (env = first_cpu; env != NULL; env = env->next_cpu) {
1266         kvm_update_guest_debug(env, 0);
1267     }
1268 }
1269
1270 #else /* !KVM_CAP_SET_GUEST_DEBUG */
1271
1272 int kvm_update_guest_debug(CPUState *env, unsigned long reinject_trap)
1273 {
1274     return -EINVAL;
1275 }
1276
1277 int kvm_insert_breakpoint(CPUState *current_env, target_ulong addr,
1278                           target_ulong len, int type)
1279 {
1280     return -EINVAL;
1281 }
1282
1283 int kvm_remove_breakpoint(CPUState *current_env, target_ulong addr,
1284                           target_ulong len, int type)
1285 {
1286     return -EINVAL;
1287 }
1288
1289 void kvm_remove_all_breakpoints(CPUState *current_env)
1290 {
1291 }
1292 #endif /* !KVM_CAP_SET_GUEST_DEBUG */
1293
1294 int kvm_set_signal_mask(CPUState *env, const sigset_t *sigset)
1295 {
1296     struct kvm_signal_mask *sigmask;
1297     int r;
1298
1299     if (!sigset) {
1300         return kvm_vcpu_ioctl(env, KVM_SET_SIGNAL_MASK, NULL);
1301     }
1302
1303     sigmask = qemu_malloc(sizeof(*sigmask) + sizeof(*sigset));
1304
1305     sigmask->len = 8;
1306     memcpy(sigmask->sigset, sigset, sizeof(*sigset));
1307     r = kvm_vcpu_ioctl(env, KVM_SET_SIGNAL_MASK, sigmask);
1308     free(sigmask);
1309
1310     return r;
1311 }
1312
1313 int kvm_set_ioeventfd_mmio_long(int fd, uint32_t addr, uint32_t val, bool assign)
1314 {
1315 #ifdef KVM_IOEVENTFD
1316     int ret;
1317     struct kvm_ioeventfd iofd;
1318
1319     iofd.datamatch = val;
1320     iofd.addr = addr;
1321     iofd.len = 4;
1322     iofd.flags = KVM_IOEVENTFD_FLAG_DATAMATCH;
1323     iofd.fd = fd;
1324
1325     if (!kvm_enabled()) {
1326         return -ENOSYS;
1327     }
1328
1329     if (!assign) {
1330         iofd.flags |= KVM_IOEVENTFD_FLAG_DEASSIGN;
1331     }
1332
1333     ret = kvm_vm_ioctl(kvm_state, KVM_IOEVENTFD, &iofd);
1334
1335     if (ret < 0) {
1336         return -errno;
1337     }
1338
1339     return 0;
1340 #else
1341     return -ENOSYS;
1342 #endif
1343 }
1344
1345 int kvm_set_ioeventfd_pio_word(int fd, uint16_t addr, uint16_t val, bool assign)
1346 {
1347 #ifdef KVM_IOEVENTFD
1348     struct kvm_ioeventfd kick = {
1349         .datamatch = val,
1350         .addr = addr,
1351         .len = 2,
1352         .flags = KVM_IOEVENTFD_FLAG_DATAMATCH | KVM_IOEVENTFD_FLAG_PIO,
1353         .fd = fd,
1354     };
1355     int r;
1356     if (!kvm_enabled()) {
1357         return -ENOSYS;
1358     }
1359     if (!assign) {
1360         kick.flags |= KVM_IOEVENTFD_FLAG_DEASSIGN;
1361     }
1362     r = kvm_vm_ioctl(kvm_state, KVM_IOEVENTFD, &kick);
1363     if (r < 0) {
1364         return r;
1365     }
1366     return 0;
1367 #else
1368     return -ENOSYS;
1369 #endif
1370 }
1371
1372 int kvm_on_sigbus_vcpu(CPUState *env, int code, void *addr)
1373 {
1374     return kvm_arch_on_sigbus_vcpu(env, code, addr);
1375 }
1376
1377 int kvm_on_sigbus(int code, void *addr)
1378 {
1379     return kvm_arch_on_sigbus(code, addr);
1380 }
This page took 0.098581 seconds and 4 git commands to generate.