]> Git Repo - qemu.git/blob - kvm-all.c
kvm: Pass CPUState to kvm_arch_*
[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 "qemu-option.h"
26 #include "qemu-config.h"
27 #include "sysemu.h"
28 #include "hw/hw.h"
29 #include "hw/msi.h"
30 #include "gdbstub.h"
31 #include "kvm.h"
32 #include "bswap.h"
33 #include "memory.h"
34 #include "exec-memory.h"
35 #include "event_notifier.h"
36
37 /* This check must be after config-host.h is included */
38 #ifdef CONFIG_EVENTFD
39 #include <sys/eventfd.h>
40 #endif
41
42 #ifdef CONFIG_VALGRIND_H
43 #include <valgrind/memcheck.h>
44 #endif
45
46 /* KVM uses PAGE_SIZE in its definition of COALESCED_MMIO_MAX */
47 #define PAGE_SIZE TARGET_PAGE_SIZE
48
49 //#define DEBUG_KVM
50
51 #ifdef DEBUG_KVM
52 #define DPRINTF(fmt, ...) \
53     do { fprintf(stderr, fmt, ## __VA_ARGS__); } while (0)
54 #else
55 #define DPRINTF(fmt, ...) \
56     do { } while (0)
57 #endif
58
59 #define KVM_MSI_HASHTAB_SIZE    256
60
61 typedef struct KVMSlot
62 {
63     hwaddr start_addr;
64     ram_addr_t memory_size;
65     void *ram;
66     int slot;
67     int flags;
68 } KVMSlot;
69
70 typedef struct kvm_dirty_log KVMDirtyLog;
71
72 struct KVMState
73 {
74     KVMSlot slots[32];
75     int fd;
76     int vmfd;
77     int coalesced_mmio;
78     struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;
79     bool coalesced_flush_in_progress;
80     int broken_set_mem_region;
81     int migration_log;
82     int vcpu_events;
83     int robust_singlestep;
84     int debugregs;
85 #ifdef KVM_CAP_SET_GUEST_DEBUG
86     struct kvm_sw_breakpoint_head kvm_sw_breakpoints;
87 #endif
88     int pit_state2;
89     int xsave, xcrs;
90     int many_ioeventfds;
91     int intx_set_mask;
92     /* The man page (and posix) say ioctl numbers are signed int, but
93      * they're not.  Linux, glibc and *BSD all treat ioctl numbers as
94      * unsigned, and treating them as signed here can break things */
95     unsigned irq_set_ioctl;
96 #ifdef KVM_CAP_IRQ_ROUTING
97     struct kvm_irq_routing *irq_routes;
98     int nr_allocated_irq_routes;
99     uint32_t *used_gsi_bitmap;
100     unsigned int gsi_count;
101     QTAILQ_HEAD(msi_hashtab, KVMMSIRoute) msi_hashtab[KVM_MSI_HASHTAB_SIZE];
102     bool direct_msi;
103 #endif
104 };
105
106 KVMState *kvm_state;
107 bool kvm_kernel_irqchip;
108 bool kvm_async_interrupts_allowed;
109 bool kvm_irqfds_allowed;
110 bool kvm_msi_via_irqfd_allowed;
111 bool kvm_gsi_routing_allowed;
112
113 static const KVMCapabilityInfo kvm_required_capabilites[] = {
114     KVM_CAP_INFO(USER_MEMORY),
115     KVM_CAP_INFO(DESTROY_MEMORY_REGION_WORKS),
116     KVM_CAP_LAST_INFO
117 };
118
119 static KVMSlot *kvm_alloc_slot(KVMState *s)
120 {
121     int i;
122
123     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
124         if (s->slots[i].memory_size == 0) {
125             return &s->slots[i];
126         }
127     }
128
129     fprintf(stderr, "%s: no free slot available\n", __func__);
130     abort();
131 }
132
133 static KVMSlot *kvm_lookup_matching_slot(KVMState *s,
134                                          hwaddr start_addr,
135                                          hwaddr end_addr)
136 {
137     int i;
138
139     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
140         KVMSlot *mem = &s->slots[i];
141
142         if (start_addr == mem->start_addr &&
143             end_addr == mem->start_addr + mem->memory_size) {
144             return mem;
145         }
146     }
147
148     return NULL;
149 }
150
151 /*
152  * Find overlapping slot with lowest start address
153  */
154 static KVMSlot *kvm_lookup_overlapping_slot(KVMState *s,
155                                             hwaddr start_addr,
156                                             hwaddr end_addr)
157 {
158     KVMSlot *found = NULL;
159     int i;
160
161     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
162         KVMSlot *mem = &s->slots[i];
163
164         if (mem->memory_size == 0 ||
165             (found && found->start_addr < mem->start_addr)) {
166             continue;
167         }
168
169         if (end_addr > mem->start_addr &&
170             start_addr < mem->start_addr + mem->memory_size) {
171             found = mem;
172         }
173     }
174
175     return found;
176 }
177
178 int kvm_physical_memory_addr_from_host(KVMState *s, void *ram,
179                                        hwaddr *phys_addr)
180 {
181     int i;
182
183     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
184         KVMSlot *mem = &s->slots[i];
185
186         if (ram >= mem->ram && ram < mem->ram + mem->memory_size) {
187             *phys_addr = mem->start_addr + (ram - mem->ram);
188             return 1;
189         }
190     }
191
192     return 0;
193 }
194
195 static int kvm_set_user_memory_region(KVMState *s, KVMSlot *slot)
196 {
197     struct kvm_userspace_memory_region mem;
198
199     mem.slot = slot->slot;
200     mem.guest_phys_addr = slot->start_addr;
201     mem.memory_size = slot->memory_size;
202     mem.userspace_addr = (unsigned long)slot->ram;
203     mem.flags = slot->flags;
204     if (s->migration_log) {
205         mem.flags |= KVM_MEM_LOG_DIRTY_PAGES;
206     }
207     return kvm_vm_ioctl(s, KVM_SET_USER_MEMORY_REGION, &mem);
208 }
209
210 static void kvm_reset_vcpu(void *opaque)
211 {
212     CPUState *cpu = opaque;
213
214     kvm_arch_reset_vcpu(cpu);
215 }
216
217 int kvm_init_vcpu(CPUArchState *env)
218 {
219     CPUState *cpu = ENV_GET_CPU(env);
220     KVMState *s = kvm_state;
221     long mmap_size;
222     int ret;
223
224     DPRINTF("kvm_init_vcpu\n");
225
226     ret = kvm_vm_ioctl(s, KVM_CREATE_VCPU, env->cpu_index);
227     if (ret < 0) {
228         DPRINTF("kvm_create_vcpu failed\n");
229         goto err;
230     }
231
232     cpu->kvm_fd = ret;
233     env->kvm_state = s;
234     cpu->kvm_vcpu_dirty = true;
235
236     mmap_size = kvm_ioctl(s, KVM_GET_VCPU_MMAP_SIZE, 0);
237     if (mmap_size < 0) {
238         ret = mmap_size;
239         DPRINTF("KVM_GET_VCPU_MMAP_SIZE failed\n");
240         goto err;
241     }
242
243     env->kvm_run = mmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_SHARED,
244                         cpu->kvm_fd, 0);
245     if (env->kvm_run == MAP_FAILED) {
246         ret = -errno;
247         DPRINTF("mmap'ing vcpu state failed\n");
248         goto err;
249     }
250
251     if (s->coalesced_mmio && !s->coalesced_mmio_ring) {
252         s->coalesced_mmio_ring =
253             (void *)env->kvm_run + s->coalesced_mmio * PAGE_SIZE;
254     }
255
256     ret = kvm_arch_init_vcpu(cpu);
257     if (ret == 0) {
258         qemu_register_reset(kvm_reset_vcpu, cpu);
259         kvm_arch_reset_vcpu(cpu);
260     }
261 err:
262     return ret;
263 }
264
265 /*
266  * dirty pages logging control
267  */
268
269 static int kvm_mem_flags(KVMState *s, bool log_dirty)
270 {
271     return log_dirty ? KVM_MEM_LOG_DIRTY_PAGES : 0;
272 }
273
274 static int kvm_slot_dirty_pages_log_change(KVMSlot *mem, bool log_dirty)
275 {
276     KVMState *s = kvm_state;
277     int flags, mask = KVM_MEM_LOG_DIRTY_PAGES;
278     int old_flags;
279
280     old_flags = mem->flags;
281
282     flags = (mem->flags & ~mask) | kvm_mem_flags(s, log_dirty);
283     mem->flags = flags;
284
285     /* If nothing changed effectively, no need to issue ioctl */
286     if (s->migration_log) {
287         flags |= KVM_MEM_LOG_DIRTY_PAGES;
288     }
289
290     if (flags == old_flags) {
291         return 0;
292     }
293
294     return kvm_set_user_memory_region(s, mem);
295 }
296
297 static int kvm_dirty_pages_log_change(hwaddr phys_addr,
298                                       ram_addr_t size, bool log_dirty)
299 {
300     KVMState *s = kvm_state;
301     KVMSlot *mem = kvm_lookup_matching_slot(s, phys_addr, phys_addr + size);
302
303     if (mem == NULL)  {
304         fprintf(stderr, "BUG: %s: invalid parameters " TARGET_FMT_plx "-"
305                 TARGET_FMT_plx "\n", __func__, phys_addr,
306                 (hwaddr)(phys_addr + size - 1));
307         return -EINVAL;
308     }
309     return kvm_slot_dirty_pages_log_change(mem, log_dirty);
310 }
311
312 static void kvm_log_start(MemoryListener *listener,
313                           MemoryRegionSection *section)
314 {
315     int r;
316
317     r = kvm_dirty_pages_log_change(section->offset_within_address_space,
318                                    section->size, true);
319     if (r < 0) {
320         abort();
321     }
322 }
323
324 static void kvm_log_stop(MemoryListener *listener,
325                           MemoryRegionSection *section)
326 {
327     int r;
328
329     r = kvm_dirty_pages_log_change(section->offset_within_address_space,
330                                    section->size, false);
331     if (r < 0) {
332         abort();
333     }
334 }
335
336 static int kvm_set_migration_log(int enable)
337 {
338     KVMState *s = kvm_state;
339     KVMSlot *mem;
340     int i, err;
341
342     s->migration_log = enable;
343
344     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
345         mem = &s->slots[i];
346
347         if (!mem->memory_size) {
348             continue;
349         }
350         if (!!(mem->flags & KVM_MEM_LOG_DIRTY_PAGES) == enable) {
351             continue;
352         }
353         err = kvm_set_user_memory_region(s, mem);
354         if (err) {
355             return err;
356         }
357     }
358     return 0;
359 }
360
361 /* get kvm's dirty pages bitmap and update qemu's */
362 static int kvm_get_dirty_pages_log_range(MemoryRegionSection *section,
363                                          unsigned long *bitmap)
364 {
365     unsigned int i, j;
366     unsigned long page_number, c;
367     hwaddr addr, addr1;
368     unsigned int len = ((section->size / getpagesize()) + HOST_LONG_BITS - 1) / HOST_LONG_BITS;
369     unsigned long hpratio = getpagesize() / TARGET_PAGE_SIZE;
370
371     /*
372      * bitmap-traveling is faster than memory-traveling (for addr...)
373      * especially when most of the memory is not dirty.
374      */
375     for (i = 0; i < len; i++) {
376         if (bitmap[i] != 0) {
377             c = leul_to_cpu(bitmap[i]);
378             do {
379                 j = ffsl(c) - 1;
380                 c &= ~(1ul << j);
381                 page_number = (i * HOST_LONG_BITS + j) * hpratio;
382                 addr1 = page_number * TARGET_PAGE_SIZE;
383                 addr = section->offset_within_region + addr1;
384                 memory_region_set_dirty(section->mr, addr,
385                                         TARGET_PAGE_SIZE * hpratio);
386             } while (c != 0);
387         }
388     }
389     return 0;
390 }
391
392 #define ALIGN(x, y)  (((x)+(y)-1) & ~((y)-1))
393
394 /**
395  * kvm_physical_sync_dirty_bitmap - Grab dirty bitmap from kernel space
396  * This function updates qemu's dirty bitmap using
397  * memory_region_set_dirty().  This means all bits are set
398  * to dirty.
399  *
400  * @start_add: start of logged region.
401  * @end_addr: end of logged region.
402  */
403 static int kvm_physical_sync_dirty_bitmap(MemoryRegionSection *section)
404 {
405     KVMState *s = kvm_state;
406     unsigned long size, allocated_size = 0;
407     KVMDirtyLog d;
408     KVMSlot *mem;
409     int ret = 0;
410     hwaddr start_addr = section->offset_within_address_space;
411     hwaddr end_addr = start_addr + section->size;
412
413     d.dirty_bitmap = NULL;
414     while (start_addr < end_addr) {
415         mem = kvm_lookup_overlapping_slot(s, start_addr, end_addr);
416         if (mem == NULL) {
417             break;
418         }
419
420         /* XXX bad kernel interface alert
421          * For dirty bitmap, kernel allocates array of size aligned to
422          * bits-per-long.  But for case when the kernel is 64bits and
423          * the userspace is 32bits, userspace can't align to the same
424          * bits-per-long, since sizeof(long) is different between kernel
425          * and user space.  This way, userspace will provide buffer which
426          * may be 4 bytes less than the kernel will use, resulting in
427          * userspace memory corruption (which is not detectable by valgrind
428          * too, in most cases).
429          * So for now, let's align to 64 instead of HOST_LONG_BITS here, in
430          * a hope that sizeof(long) wont become >8 any time soon.
431          */
432         size = ALIGN(((mem->memory_size) >> TARGET_PAGE_BITS),
433                      /*HOST_LONG_BITS*/ 64) / 8;
434         if (!d.dirty_bitmap) {
435             d.dirty_bitmap = g_malloc(size);
436         } else if (size > allocated_size) {
437             d.dirty_bitmap = g_realloc(d.dirty_bitmap, size);
438         }
439         allocated_size = size;
440         memset(d.dirty_bitmap, 0, allocated_size);
441
442         d.slot = mem->slot;
443
444         if (kvm_vm_ioctl(s, KVM_GET_DIRTY_LOG, &d) == -1) {
445             DPRINTF("ioctl failed %d\n", errno);
446             ret = -1;
447             break;
448         }
449
450         kvm_get_dirty_pages_log_range(section, d.dirty_bitmap);
451         start_addr = mem->start_addr + mem->memory_size;
452     }
453     g_free(d.dirty_bitmap);
454
455     return ret;
456 }
457
458 static void kvm_coalesce_mmio_region(MemoryListener *listener,
459                                      MemoryRegionSection *secion,
460                                      hwaddr start, hwaddr size)
461 {
462     KVMState *s = kvm_state;
463
464     if (s->coalesced_mmio) {
465         struct kvm_coalesced_mmio_zone zone;
466
467         zone.addr = start;
468         zone.size = size;
469         zone.pad = 0;
470
471         (void)kvm_vm_ioctl(s, KVM_REGISTER_COALESCED_MMIO, &zone);
472     }
473 }
474
475 static void kvm_uncoalesce_mmio_region(MemoryListener *listener,
476                                        MemoryRegionSection *secion,
477                                        hwaddr start, hwaddr size)
478 {
479     KVMState *s = kvm_state;
480
481     if (s->coalesced_mmio) {
482         struct kvm_coalesced_mmio_zone zone;
483
484         zone.addr = start;
485         zone.size = size;
486         zone.pad = 0;
487
488         (void)kvm_vm_ioctl(s, KVM_UNREGISTER_COALESCED_MMIO, &zone);
489     }
490 }
491
492 int kvm_check_extension(KVMState *s, unsigned int extension)
493 {
494     int ret;
495
496     ret = kvm_ioctl(s, KVM_CHECK_EXTENSION, extension);
497     if (ret < 0) {
498         ret = 0;
499     }
500
501     return ret;
502 }
503
504 static int kvm_check_many_ioeventfds(void)
505 {
506     /* Userspace can use ioeventfd for io notification.  This requires a host
507      * that supports eventfd(2) and an I/O thread; since eventfd does not
508      * support SIGIO it cannot interrupt the vcpu.
509      *
510      * Older kernels have a 6 device limit on the KVM io bus.  Find out so we
511      * can avoid creating too many ioeventfds.
512      */
513 #if defined(CONFIG_EVENTFD)
514     int ioeventfds[7];
515     int i, ret = 0;
516     for (i = 0; i < ARRAY_SIZE(ioeventfds); i++) {
517         ioeventfds[i] = eventfd(0, EFD_CLOEXEC);
518         if (ioeventfds[i] < 0) {
519             break;
520         }
521         ret = kvm_set_ioeventfd_pio_word(ioeventfds[i], 0, i, true);
522         if (ret < 0) {
523             close(ioeventfds[i]);
524             break;
525         }
526     }
527
528     /* Decide whether many devices are supported or not */
529     ret = i == ARRAY_SIZE(ioeventfds);
530
531     while (i-- > 0) {
532         kvm_set_ioeventfd_pio_word(ioeventfds[i], 0, i, false);
533         close(ioeventfds[i]);
534     }
535     return ret;
536 #else
537     return 0;
538 #endif
539 }
540
541 static const KVMCapabilityInfo *
542 kvm_check_extension_list(KVMState *s, const KVMCapabilityInfo *list)
543 {
544     while (list->name) {
545         if (!kvm_check_extension(s, list->value)) {
546             return list;
547         }
548         list++;
549     }
550     return NULL;
551 }
552
553 static void kvm_set_phys_mem(MemoryRegionSection *section, bool add)
554 {
555     KVMState *s = kvm_state;
556     KVMSlot *mem, old;
557     int err;
558     MemoryRegion *mr = section->mr;
559     bool log_dirty = memory_region_is_logging(mr);
560     hwaddr start_addr = section->offset_within_address_space;
561     ram_addr_t size = section->size;
562     void *ram = NULL;
563     unsigned delta;
564
565     /* kvm works in page size chunks, but the function may be called
566        with sub-page size and unaligned start address. */
567     delta = TARGET_PAGE_ALIGN(size) - size;
568     if (delta > size) {
569         return;
570     }
571     start_addr += delta;
572     size -= delta;
573     size &= TARGET_PAGE_MASK;
574     if (!size || (start_addr & ~TARGET_PAGE_MASK)) {
575         return;
576     }
577
578     if (!memory_region_is_ram(mr)) {
579         return;
580     }
581
582     ram = memory_region_get_ram_ptr(mr) + section->offset_within_region + delta;
583
584     while (1) {
585         mem = kvm_lookup_overlapping_slot(s, start_addr, start_addr + size);
586         if (!mem) {
587             break;
588         }
589
590         if (add && start_addr >= mem->start_addr &&
591             (start_addr + size <= mem->start_addr + mem->memory_size) &&
592             (ram - start_addr == mem->ram - mem->start_addr)) {
593             /* The new slot fits into the existing one and comes with
594              * identical parameters - update flags and done. */
595             kvm_slot_dirty_pages_log_change(mem, log_dirty);
596             return;
597         }
598
599         old = *mem;
600
601         if (mem->flags & KVM_MEM_LOG_DIRTY_PAGES) {
602             kvm_physical_sync_dirty_bitmap(section);
603         }
604
605         /* unregister the overlapping slot */
606         mem->memory_size = 0;
607         err = kvm_set_user_memory_region(s, mem);
608         if (err) {
609             fprintf(stderr, "%s: error unregistering overlapping slot: %s\n",
610                     __func__, strerror(-err));
611             abort();
612         }
613
614         /* Workaround for older KVM versions: we can't join slots, even not by
615          * unregistering the previous ones and then registering the larger
616          * slot. We have to maintain the existing fragmentation. Sigh.
617          *
618          * This workaround assumes that the new slot starts at the same
619          * address as the first existing one. If not or if some overlapping
620          * slot comes around later, we will fail (not seen in practice so far)
621          * - and actually require a recent KVM version. */
622         if (s->broken_set_mem_region &&
623             old.start_addr == start_addr && old.memory_size < size && add) {
624             mem = kvm_alloc_slot(s);
625             mem->memory_size = old.memory_size;
626             mem->start_addr = old.start_addr;
627             mem->ram = old.ram;
628             mem->flags = kvm_mem_flags(s, log_dirty);
629
630             err = kvm_set_user_memory_region(s, mem);
631             if (err) {
632                 fprintf(stderr, "%s: error updating slot: %s\n", __func__,
633                         strerror(-err));
634                 abort();
635             }
636
637             start_addr += old.memory_size;
638             ram += old.memory_size;
639             size -= old.memory_size;
640             continue;
641         }
642
643         /* register prefix slot */
644         if (old.start_addr < start_addr) {
645             mem = kvm_alloc_slot(s);
646             mem->memory_size = start_addr - old.start_addr;
647             mem->start_addr = old.start_addr;
648             mem->ram = old.ram;
649             mem->flags =  kvm_mem_flags(s, log_dirty);
650
651             err = kvm_set_user_memory_region(s, mem);
652             if (err) {
653                 fprintf(stderr, "%s: error registering prefix slot: %s\n",
654                         __func__, strerror(-err));
655 #ifdef TARGET_PPC
656                 fprintf(stderr, "%s: This is probably because your kernel's " \
657                                 "PAGE_SIZE is too big. Please try to use 4k " \
658                                 "PAGE_SIZE!\n", __func__);
659 #endif
660                 abort();
661             }
662         }
663
664         /* register suffix slot */
665         if (old.start_addr + old.memory_size > start_addr + size) {
666             ram_addr_t size_delta;
667
668             mem = kvm_alloc_slot(s);
669             mem->start_addr = start_addr + size;
670             size_delta = mem->start_addr - old.start_addr;
671             mem->memory_size = old.memory_size - size_delta;
672             mem->ram = old.ram + size_delta;
673             mem->flags = kvm_mem_flags(s, log_dirty);
674
675             err = kvm_set_user_memory_region(s, mem);
676             if (err) {
677                 fprintf(stderr, "%s: error registering suffix slot: %s\n",
678                         __func__, strerror(-err));
679                 abort();
680             }
681         }
682     }
683
684     /* in case the KVM bug workaround already "consumed" the new slot */
685     if (!size) {
686         return;
687     }
688     if (!add) {
689         return;
690     }
691     mem = kvm_alloc_slot(s);
692     mem->memory_size = size;
693     mem->start_addr = start_addr;
694     mem->ram = ram;
695     mem->flags = kvm_mem_flags(s, log_dirty);
696
697     err = kvm_set_user_memory_region(s, mem);
698     if (err) {
699         fprintf(stderr, "%s: error registering slot: %s\n", __func__,
700                 strerror(-err));
701         abort();
702     }
703 }
704
705 static void kvm_region_add(MemoryListener *listener,
706                            MemoryRegionSection *section)
707 {
708     kvm_set_phys_mem(section, true);
709 }
710
711 static void kvm_region_del(MemoryListener *listener,
712                            MemoryRegionSection *section)
713 {
714     kvm_set_phys_mem(section, false);
715 }
716
717 static void kvm_log_sync(MemoryListener *listener,
718                          MemoryRegionSection *section)
719 {
720     int r;
721
722     r = kvm_physical_sync_dirty_bitmap(section);
723     if (r < 0) {
724         abort();
725     }
726 }
727
728 static void kvm_log_global_start(struct MemoryListener *listener)
729 {
730     int r;
731
732     r = kvm_set_migration_log(1);
733     assert(r >= 0);
734 }
735
736 static void kvm_log_global_stop(struct MemoryListener *listener)
737 {
738     int r;
739
740     r = kvm_set_migration_log(0);
741     assert(r >= 0);
742 }
743
744 static void kvm_mem_ioeventfd_add(MemoryListener *listener,
745                                   MemoryRegionSection *section,
746                                   bool match_data, uint64_t data,
747                                   EventNotifier *e)
748 {
749     int fd = event_notifier_get_fd(e);
750     int r;
751
752     assert(match_data && section->size <= 8);
753
754     r = kvm_set_ioeventfd_mmio(fd, section->offset_within_address_space,
755                                data, true, section->size);
756     if (r < 0) {
757         abort();
758     }
759 }
760
761 static void kvm_mem_ioeventfd_del(MemoryListener *listener,
762                                   MemoryRegionSection *section,
763                                   bool match_data, uint64_t data,
764                                   EventNotifier *e)
765 {
766     int fd = event_notifier_get_fd(e);
767     int r;
768
769     r = kvm_set_ioeventfd_mmio(fd, section->offset_within_address_space,
770                                data, false, section->size);
771     if (r < 0) {
772         abort();
773     }
774 }
775
776 static void kvm_io_ioeventfd_add(MemoryListener *listener,
777                                  MemoryRegionSection *section,
778                                  bool match_data, uint64_t data,
779                                  EventNotifier *e)
780 {
781     int fd = event_notifier_get_fd(e);
782     int r;
783
784     assert(match_data && section->size == 2);
785
786     r = kvm_set_ioeventfd_pio_word(fd, section->offset_within_address_space,
787                                    data, true);
788     if (r < 0) {
789         abort();
790     }
791 }
792
793 static void kvm_io_ioeventfd_del(MemoryListener *listener,
794                                  MemoryRegionSection *section,
795                                  bool match_data, uint64_t data,
796                                  EventNotifier *e)
797
798 {
799     int fd = event_notifier_get_fd(e);
800     int r;
801
802     r = kvm_set_ioeventfd_pio_word(fd, section->offset_within_address_space,
803                                    data, false);
804     if (r < 0) {
805         abort();
806     }
807 }
808
809 static MemoryListener kvm_memory_listener = {
810     .region_add = kvm_region_add,
811     .region_del = kvm_region_del,
812     .log_start = kvm_log_start,
813     .log_stop = kvm_log_stop,
814     .log_sync = kvm_log_sync,
815     .log_global_start = kvm_log_global_start,
816     .log_global_stop = kvm_log_global_stop,
817     .eventfd_add = kvm_mem_ioeventfd_add,
818     .eventfd_del = kvm_mem_ioeventfd_del,
819     .coalesced_mmio_add = kvm_coalesce_mmio_region,
820     .coalesced_mmio_del = kvm_uncoalesce_mmio_region,
821     .priority = 10,
822 };
823
824 static MemoryListener kvm_io_listener = {
825     .eventfd_add = kvm_io_ioeventfd_add,
826     .eventfd_del = kvm_io_ioeventfd_del,
827     .priority = 10,
828 };
829
830 static void kvm_handle_interrupt(CPUArchState *env, int mask)
831 {
832     CPUState *cpu = ENV_GET_CPU(env);
833
834     env->interrupt_request |= mask;
835
836     if (!qemu_cpu_is_self(cpu)) {
837         qemu_cpu_kick(cpu);
838     }
839 }
840
841 int kvm_set_irq(KVMState *s, int irq, int level)
842 {
843     struct kvm_irq_level event;
844     int ret;
845
846     assert(kvm_async_interrupts_enabled());
847
848     event.level = level;
849     event.irq = irq;
850     ret = kvm_vm_ioctl(s, s->irq_set_ioctl, &event);
851     if (ret < 0) {
852         perror("kvm_set_irq");
853         abort();
854     }
855
856     return (s->irq_set_ioctl == KVM_IRQ_LINE) ? 1 : event.status;
857 }
858
859 #ifdef KVM_CAP_IRQ_ROUTING
860 typedef struct KVMMSIRoute {
861     struct kvm_irq_routing_entry kroute;
862     QTAILQ_ENTRY(KVMMSIRoute) entry;
863 } KVMMSIRoute;
864
865 static void set_gsi(KVMState *s, unsigned int gsi)
866 {
867     s->used_gsi_bitmap[gsi / 32] |= 1U << (gsi % 32);
868 }
869
870 static void clear_gsi(KVMState *s, unsigned int gsi)
871 {
872     s->used_gsi_bitmap[gsi / 32] &= ~(1U << (gsi % 32));
873 }
874
875 static void kvm_init_irq_routing(KVMState *s)
876 {
877     int gsi_count, i;
878
879     gsi_count = kvm_check_extension(s, KVM_CAP_IRQ_ROUTING);
880     if (gsi_count > 0) {
881         unsigned int gsi_bits, i;
882
883         /* Round up so we can search ints using ffs */
884         gsi_bits = ALIGN(gsi_count, 32);
885         s->used_gsi_bitmap = g_malloc0(gsi_bits / 8);
886         s->gsi_count = gsi_count;
887
888         /* Mark any over-allocated bits as already in use */
889         for (i = gsi_count; i < gsi_bits; i++) {
890             set_gsi(s, i);
891         }
892     }
893
894     s->irq_routes = g_malloc0(sizeof(*s->irq_routes));
895     s->nr_allocated_irq_routes = 0;
896
897     if (!s->direct_msi) {
898         for (i = 0; i < KVM_MSI_HASHTAB_SIZE; i++) {
899             QTAILQ_INIT(&s->msi_hashtab[i]);
900         }
901     }
902
903     kvm_arch_init_irq_routing(s);
904 }
905
906 static void kvm_irqchip_commit_routes(KVMState *s)
907 {
908     int ret;
909
910     s->irq_routes->flags = 0;
911     ret = kvm_vm_ioctl(s, KVM_SET_GSI_ROUTING, s->irq_routes);
912     assert(ret == 0);
913 }
914
915 static void kvm_add_routing_entry(KVMState *s,
916                                   struct kvm_irq_routing_entry *entry)
917 {
918     struct kvm_irq_routing_entry *new;
919     int n, size;
920
921     if (s->irq_routes->nr == s->nr_allocated_irq_routes) {
922         n = s->nr_allocated_irq_routes * 2;
923         if (n < 64) {
924             n = 64;
925         }
926         size = sizeof(struct kvm_irq_routing);
927         size += n * sizeof(*new);
928         s->irq_routes = g_realloc(s->irq_routes, size);
929         s->nr_allocated_irq_routes = n;
930     }
931     n = s->irq_routes->nr++;
932     new = &s->irq_routes->entries[n];
933     memset(new, 0, sizeof(*new));
934     new->gsi = entry->gsi;
935     new->type = entry->type;
936     new->flags = entry->flags;
937     new->u = entry->u;
938
939     set_gsi(s, entry->gsi);
940
941     kvm_irqchip_commit_routes(s);
942 }
943
944 static int kvm_update_routing_entry(KVMState *s,
945                                     struct kvm_irq_routing_entry *new_entry)
946 {
947     struct kvm_irq_routing_entry *entry;
948     int n;
949
950     for (n = 0; n < s->irq_routes->nr; n++) {
951         entry = &s->irq_routes->entries[n];
952         if (entry->gsi != new_entry->gsi) {
953             continue;
954         }
955
956         entry->type = new_entry->type;
957         entry->flags = new_entry->flags;
958         entry->u = new_entry->u;
959
960         kvm_irqchip_commit_routes(s);
961
962         return 0;
963     }
964
965     return -ESRCH;
966 }
967
968 void kvm_irqchip_add_irq_route(KVMState *s, int irq, int irqchip, int pin)
969 {
970     struct kvm_irq_routing_entry e;
971
972     assert(pin < s->gsi_count);
973
974     e.gsi = irq;
975     e.type = KVM_IRQ_ROUTING_IRQCHIP;
976     e.flags = 0;
977     e.u.irqchip.irqchip = irqchip;
978     e.u.irqchip.pin = pin;
979     kvm_add_routing_entry(s, &e);
980 }
981
982 void kvm_irqchip_release_virq(KVMState *s, int virq)
983 {
984     struct kvm_irq_routing_entry *e;
985     int i;
986
987     for (i = 0; i < s->irq_routes->nr; i++) {
988         e = &s->irq_routes->entries[i];
989         if (e->gsi == virq) {
990             s->irq_routes->nr--;
991             *e = s->irq_routes->entries[s->irq_routes->nr];
992         }
993     }
994     clear_gsi(s, virq);
995
996     kvm_irqchip_commit_routes(s);
997 }
998
999 static unsigned int kvm_hash_msi(uint32_t data)
1000 {
1001     /* This is optimized for IA32 MSI layout. However, no other arch shall
1002      * repeat the mistake of not providing a direct MSI injection API. */
1003     return data & 0xff;
1004 }
1005
1006 static void kvm_flush_dynamic_msi_routes(KVMState *s)
1007 {
1008     KVMMSIRoute *route, *next;
1009     unsigned int hash;
1010
1011     for (hash = 0; hash < KVM_MSI_HASHTAB_SIZE; hash++) {
1012         QTAILQ_FOREACH_SAFE(route, &s->msi_hashtab[hash], entry, next) {
1013             kvm_irqchip_release_virq(s, route->kroute.gsi);
1014             QTAILQ_REMOVE(&s->msi_hashtab[hash], route, entry);
1015             g_free(route);
1016         }
1017     }
1018 }
1019
1020 static int kvm_irqchip_get_virq(KVMState *s)
1021 {
1022     uint32_t *word = s->used_gsi_bitmap;
1023     int max_words = ALIGN(s->gsi_count, 32) / 32;
1024     int i, bit;
1025     bool retry = true;
1026
1027 again:
1028     /* Return the lowest unused GSI in the bitmap */
1029     for (i = 0; i < max_words; i++) {
1030         bit = ffs(~word[i]);
1031         if (!bit) {
1032             continue;
1033         }
1034
1035         return bit - 1 + i * 32;
1036     }
1037     if (!s->direct_msi && retry) {
1038         retry = false;
1039         kvm_flush_dynamic_msi_routes(s);
1040         goto again;
1041     }
1042     return -ENOSPC;
1043
1044 }
1045
1046 static KVMMSIRoute *kvm_lookup_msi_route(KVMState *s, MSIMessage msg)
1047 {
1048     unsigned int hash = kvm_hash_msi(msg.data);
1049     KVMMSIRoute *route;
1050
1051     QTAILQ_FOREACH(route, &s->msi_hashtab[hash], entry) {
1052         if (route->kroute.u.msi.address_lo == (uint32_t)msg.address &&
1053             route->kroute.u.msi.address_hi == (msg.address >> 32) &&
1054             route->kroute.u.msi.data == msg.data) {
1055             return route;
1056         }
1057     }
1058     return NULL;
1059 }
1060
1061 int kvm_irqchip_send_msi(KVMState *s, MSIMessage msg)
1062 {
1063     struct kvm_msi msi;
1064     KVMMSIRoute *route;
1065
1066     if (s->direct_msi) {
1067         msi.address_lo = (uint32_t)msg.address;
1068         msi.address_hi = msg.address >> 32;
1069         msi.data = msg.data;
1070         msi.flags = 0;
1071         memset(msi.pad, 0, sizeof(msi.pad));
1072
1073         return kvm_vm_ioctl(s, KVM_SIGNAL_MSI, &msi);
1074     }
1075
1076     route = kvm_lookup_msi_route(s, msg);
1077     if (!route) {
1078         int virq;
1079
1080         virq = kvm_irqchip_get_virq(s);
1081         if (virq < 0) {
1082             return virq;
1083         }
1084
1085         route = g_malloc(sizeof(KVMMSIRoute));
1086         route->kroute.gsi = virq;
1087         route->kroute.type = KVM_IRQ_ROUTING_MSI;
1088         route->kroute.flags = 0;
1089         route->kroute.u.msi.address_lo = (uint32_t)msg.address;
1090         route->kroute.u.msi.address_hi = msg.address >> 32;
1091         route->kroute.u.msi.data = msg.data;
1092
1093         kvm_add_routing_entry(s, &route->kroute);
1094
1095         QTAILQ_INSERT_TAIL(&s->msi_hashtab[kvm_hash_msi(msg.data)], route,
1096                            entry);
1097     }
1098
1099     assert(route->kroute.type == KVM_IRQ_ROUTING_MSI);
1100
1101     return kvm_set_irq(s, route->kroute.gsi, 1);
1102 }
1103
1104 int kvm_irqchip_add_msi_route(KVMState *s, MSIMessage msg)
1105 {
1106     struct kvm_irq_routing_entry kroute;
1107     int virq;
1108
1109     if (!kvm_gsi_routing_enabled()) {
1110         return -ENOSYS;
1111     }
1112
1113     virq = kvm_irqchip_get_virq(s);
1114     if (virq < 0) {
1115         return virq;
1116     }
1117
1118     kroute.gsi = virq;
1119     kroute.type = KVM_IRQ_ROUTING_MSI;
1120     kroute.flags = 0;
1121     kroute.u.msi.address_lo = (uint32_t)msg.address;
1122     kroute.u.msi.address_hi = msg.address >> 32;
1123     kroute.u.msi.data = msg.data;
1124
1125     kvm_add_routing_entry(s, &kroute);
1126
1127     return virq;
1128 }
1129
1130 int kvm_irqchip_update_msi_route(KVMState *s, int virq, MSIMessage msg)
1131 {
1132     struct kvm_irq_routing_entry kroute;
1133
1134     if (!kvm_irqchip_in_kernel()) {
1135         return -ENOSYS;
1136     }
1137
1138     kroute.gsi = virq;
1139     kroute.type = KVM_IRQ_ROUTING_MSI;
1140     kroute.flags = 0;
1141     kroute.u.msi.address_lo = (uint32_t)msg.address;
1142     kroute.u.msi.address_hi = msg.address >> 32;
1143     kroute.u.msi.data = msg.data;
1144
1145     return kvm_update_routing_entry(s, &kroute);
1146 }
1147
1148 static int kvm_irqchip_assign_irqfd(KVMState *s, int fd, int virq, bool assign)
1149 {
1150     struct kvm_irqfd irqfd = {
1151         .fd = fd,
1152         .gsi = virq,
1153         .flags = assign ? 0 : KVM_IRQFD_FLAG_DEASSIGN,
1154     };
1155
1156     if (!kvm_irqfds_enabled()) {
1157         return -ENOSYS;
1158     }
1159
1160     return kvm_vm_ioctl(s, KVM_IRQFD, &irqfd);
1161 }
1162
1163 #else /* !KVM_CAP_IRQ_ROUTING */
1164
1165 static void kvm_init_irq_routing(KVMState *s)
1166 {
1167 }
1168
1169 void kvm_irqchip_release_virq(KVMState *s, int virq)
1170 {
1171 }
1172
1173 int kvm_irqchip_send_msi(KVMState *s, MSIMessage msg)
1174 {
1175     abort();
1176 }
1177
1178 int kvm_irqchip_add_msi_route(KVMState *s, MSIMessage msg)
1179 {
1180     return -ENOSYS;
1181 }
1182
1183 static int kvm_irqchip_assign_irqfd(KVMState *s, int fd, int virq, bool assign)
1184 {
1185     abort();
1186 }
1187 #endif /* !KVM_CAP_IRQ_ROUTING */
1188
1189 int kvm_irqchip_add_irqfd_notifier(KVMState *s, EventNotifier *n, int virq)
1190 {
1191     return kvm_irqchip_assign_irqfd(s, event_notifier_get_fd(n), virq, true);
1192 }
1193
1194 int kvm_irqchip_remove_irqfd_notifier(KVMState *s, EventNotifier *n, int virq)
1195 {
1196     return kvm_irqchip_assign_irqfd(s, event_notifier_get_fd(n), virq, false);
1197 }
1198
1199 static int kvm_irqchip_create(KVMState *s)
1200 {
1201     QemuOptsList *list = qemu_find_opts("machine");
1202     int ret;
1203
1204     if (QTAILQ_EMPTY(&list->head) ||
1205         !qemu_opt_get_bool(QTAILQ_FIRST(&list->head),
1206                            "kernel_irqchip", true) ||
1207         !kvm_check_extension(s, KVM_CAP_IRQCHIP)) {
1208         return 0;
1209     }
1210
1211     ret = kvm_vm_ioctl(s, KVM_CREATE_IRQCHIP);
1212     if (ret < 0) {
1213         fprintf(stderr, "Create kernel irqchip failed\n");
1214         return ret;
1215     }
1216
1217     kvm_kernel_irqchip = true;
1218     /* If we have an in-kernel IRQ chip then we must have asynchronous
1219      * interrupt delivery (though the reverse is not necessarily true)
1220      */
1221     kvm_async_interrupts_allowed = true;
1222
1223     kvm_init_irq_routing(s);
1224
1225     return 0;
1226 }
1227
1228 static int kvm_max_vcpus(KVMState *s)
1229 {
1230     int ret;
1231
1232     /* Find number of supported CPUs using the recommended
1233      * procedure from the kernel API documentation to cope with
1234      * older kernels that may be missing capabilities.
1235      */
1236     ret = kvm_check_extension(s, KVM_CAP_MAX_VCPUS);
1237     if (ret) {
1238         return ret;
1239     }
1240     ret = kvm_check_extension(s, KVM_CAP_NR_VCPUS);
1241     if (ret) {
1242         return ret;
1243     }
1244
1245     return 4;
1246 }
1247
1248 int kvm_init(void)
1249 {
1250     static const char upgrade_note[] =
1251         "Please upgrade to at least kernel 2.6.29 or recent kvm-kmod\n"
1252         "(see http://sourceforge.net/projects/kvm).\n";
1253     KVMState *s;
1254     const KVMCapabilityInfo *missing_cap;
1255     int ret;
1256     int i;
1257     int max_vcpus;
1258
1259     s = g_malloc0(sizeof(KVMState));
1260
1261     /*
1262      * On systems where the kernel can support different base page
1263      * sizes, host page size may be different from TARGET_PAGE_SIZE,
1264      * even with KVM.  TARGET_PAGE_SIZE is assumed to be the minimum
1265      * page size for the system though.
1266      */
1267     assert(TARGET_PAGE_SIZE <= getpagesize());
1268
1269 #ifdef KVM_CAP_SET_GUEST_DEBUG
1270     QTAILQ_INIT(&s->kvm_sw_breakpoints);
1271 #endif
1272     for (i = 0; i < ARRAY_SIZE(s->slots); i++) {
1273         s->slots[i].slot = i;
1274     }
1275     s->vmfd = -1;
1276     s->fd = qemu_open("/dev/kvm", O_RDWR);
1277     if (s->fd == -1) {
1278         fprintf(stderr, "Could not access KVM kernel module: %m\n");
1279         ret = -errno;
1280         goto err;
1281     }
1282
1283     ret = kvm_ioctl(s, KVM_GET_API_VERSION, 0);
1284     if (ret < KVM_API_VERSION) {
1285         if (ret > 0) {
1286             ret = -EINVAL;
1287         }
1288         fprintf(stderr, "kvm version too old\n");
1289         goto err;
1290     }
1291
1292     if (ret > KVM_API_VERSION) {
1293         ret = -EINVAL;
1294         fprintf(stderr, "kvm version not supported\n");
1295         goto err;
1296     }
1297
1298     max_vcpus = kvm_max_vcpus(s);
1299     if (smp_cpus > max_vcpus) {
1300         ret = -EINVAL;
1301         fprintf(stderr, "Number of SMP cpus requested (%d) exceeds max cpus "
1302                 "supported by KVM (%d)\n", smp_cpus, max_vcpus);
1303         goto err;
1304     }
1305
1306     s->vmfd = kvm_ioctl(s, KVM_CREATE_VM, 0);
1307     if (s->vmfd < 0) {
1308 #ifdef TARGET_S390X
1309         fprintf(stderr, "Please add the 'switch_amode' kernel parameter to "
1310                         "your host kernel command line\n");
1311 #endif
1312         ret = s->vmfd;
1313         goto err;
1314     }
1315
1316     missing_cap = kvm_check_extension_list(s, kvm_required_capabilites);
1317     if (!missing_cap) {
1318         missing_cap =
1319             kvm_check_extension_list(s, kvm_arch_required_capabilities);
1320     }
1321     if (missing_cap) {
1322         ret = -EINVAL;
1323         fprintf(stderr, "kvm does not support %s\n%s",
1324                 missing_cap->name, upgrade_note);
1325         goto err;
1326     }
1327
1328     s->coalesced_mmio = kvm_check_extension(s, KVM_CAP_COALESCED_MMIO);
1329
1330     s->broken_set_mem_region = 1;
1331     ret = kvm_check_extension(s, KVM_CAP_JOIN_MEMORY_REGIONS_WORKS);
1332     if (ret > 0) {
1333         s->broken_set_mem_region = 0;
1334     }
1335
1336 #ifdef KVM_CAP_VCPU_EVENTS
1337     s->vcpu_events = kvm_check_extension(s, KVM_CAP_VCPU_EVENTS);
1338 #endif
1339
1340     s->robust_singlestep =
1341         kvm_check_extension(s, KVM_CAP_X86_ROBUST_SINGLESTEP);
1342
1343 #ifdef KVM_CAP_DEBUGREGS
1344     s->debugregs = kvm_check_extension(s, KVM_CAP_DEBUGREGS);
1345 #endif
1346
1347 #ifdef KVM_CAP_XSAVE
1348     s->xsave = kvm_check_extension(s, KVM_CAP_XSAVE);
1349 #endif
1350
1351 #ifdef KVM_CAP_XCRS
1352     s->xcrs = kvm_check_extension(s, KVM_CAP_XCRS);
1353 #endif
1354
1355 #ifdef KVM_CAP_PIT_STATE2
1356     s->pit_state2 = kvm_check_extension(s, KVM_CAP_PIT_STATE2);
1357 #endif
1358
1359 #ifdef KVM_CAP_IRQ_ROUTING
1360     s->direct_msi = (kvm_check_extension(s, KVM_CAP_SIGNAL_MSI) > 0);
1361 #endif
1362
1363     s->intx_set_mask = kvm_check_extension(s, KVM_CAP_PCI_2_3);
1364
1365     s->irq_set_ioctl = KVM_IRQ_LINE;
1366     if (kvm_check_extension(s, KVM_CAP_IRQ_INJECT_STATUS)) {
1367         s->irq_set_ioctl = KVM_IRQ_LINE_STATUS;
1368     }
1369
1370     ret = kvm_arch_init(s);
1371     if (ret < 0) {
1372         goto err;
1373     }
1374
1375     ret = kvm_irqchip_create(s);
1376     if (ret < 0) {
1377         goto err;
1378     }
1379
1380     kvm_state = s;
1381     memory_listener_register(&kvm_memory_listener, &address_space_memory);
1382     memory_listener_register(&kvm_io_listener, &address_space_io);
1383
1384     s->many_ioeventfds = kvm_check_many_ioeventfds();
1385
1386     cpu_interrupt_handler = kvm_handle_interrupt;
1387
1388     return 0;
1389
1390 err:
1391     if (s->vmfd >= 0) {
1392         close(s->vmfd);
1393     }
1394     if (s->fd != -1) {
1395         close(s->fd);
1396     }
1397     g_free(s);
1398
1399     return ret;
1400 }
1401
1402 static void kvm_handle_io(uint16_t port, void *data, int direction, int size,
1403                           uint32_t count)
1404 {
1405     int i;
1406     uint8_t *ptr = data;
1407
1408     for (i = 0; i < count; i++) {
1409         if (direction == KVM_EXIT_IO_IN) {
1410             switch (size) {
1411             case 1:
1412                 stb_p(ptr, cpu_inb(port));
1413                 break;
1414             case 2:
1415                 stw_p(ptr, cpu_inw(port));
1416                 break;
1417             case 4:
1418                 stl_p(ptr, cpu_inl(port));
1419                 break;
1420             }
1421         } else {
1422             switch (size) {
1423             case 1:
1424                 cpu_outb(port, ldub_p(ptr));
1425                 break;
1426             case 2:
1427                 cpu_outw(port, lduw_p(ptr));
1428                 break;
1429             case 4:
1430                 cpu_outl(port, ldl_p(ptr));
1431                 break;
1432             }
1433         }
1434
1435         ptr += size;
1436     }
1437 }
1438
1439 static int kvm_handle_internal_error(CPUArchState *env, struct kvm_run *run)
1440 {
1441     CPUState *cpu = ENV_GET_CPU(env);
1442
1443     fprintf(stderr, "KVM internal error.");
1444     if (kvm_check_extension(kvm_state, KVM_CAP_INTERNAL_ERROR_DATA)) {
1445         int i;
1446
1447         fprintf(stderr, " Suberror: %d\n", run->internal.suberror);
1448         for (i = 0; i < run->internal.ndata; ++i) {
1449             fprintf(stderr, "extra data[%d]: %"PRIx64"\n",
1450                     i, (uint64_t)run->internal.data[i]);
1451         }
1452     } else {
1453         fprintf(stderr, "\n");
1454     }
1455     if (run->internal.suberror == KVM_INTERNAL_ERROR_EMULATION) {
1456         fprintf(stderr, "emulation failure\n");
1457         if (!kvm_arch_stop_on_emulation_error(cpu)) {
1458             cpu_dump_state(env, stderr, fprintf, CPU_DUMP_CODE);
1459             return EXCP_INTERRUPT;
1460         }
1461     }
1462     /* FIXME: Should trigger a qmp message to let management know
1463      * something went wrong.
1464      */
1465     return -1;
1466 }
1467
1468 void kvm_flush_coalesced_mmio_buffer(void)
1469 {
1470     KVMState *s = kvm_state;
1471
1472     if (s->coalesced_flush_in_progress) {
1473         return;
1474     }
1475
1476     s->coalesced_flush_in_progress = true;
1477
1478     if (s->coalesced_mmio_ring) {
1479         struct kvm_coalesced_mmio_ring *ring = s->coalesced_mmio_ring;
1480         while (ring->first != ring->last) {
1481             struct kvm_coalesced_mmio *ent;
1482
1483             ent = &ring->coalesced_mmio[ring->first];
1484
1485             cpu_physical_memory_write(ent->phys_addr, ent->data, ent->len);
1486             smp_wmb();
1487             ring->first = (ring->first + 1) % KVM_COALESCED_MMIO_MAX;
1488         }
1489     }
1490
1491     s->coalesced_flush_in_progress = false;
1492 }
1493
1494 static void do_kvm_cpu_synchronize_state(void *arg)
1495 {
1496     CPUState *cpu = arg;
1497
1498     if (!cpu->kvm_vcpu_dirty) {
1499         kvm_arch_get_registers(cpu);
1500         cpu->kvm_vcpu_dirty = true;
1501     }
1502 }
1503
1504 void kvm_cpu_synchronize_state(CPUArchState *env)
1505 {
1506     CPUState *cpu = ENV_GET_CPU(env);
1507
1508     if (!cpu->kvm_vcpu_dirty) {
1509         run_on_cpu(cpu, do_kvm_cpu_synchronize_state, cpu);
1510     }
1511 }
1512
1513 void kvm_cpu_synchronize_post_reset(CPUArchState *env)
1514 {
1515     CPUState *cpu = ENV_GET_CPU(env);
1516
1517     kvm_arch_put_registers(cpu, KVM_PUT_RESET_STATE);
1518     cpu->kvm_vcpu_dirty = false;
1519 }
1520
1521 void kvm_cpu_synchronize_post_init(CPUArchState *env)
1522 {
1523     CPUState *cpu = ENV_GET_CPU(env);
1524
1525     kvm_arch_put_registers(cpu, KVM_PUT_FULL_STATE);
1526     cpu->kvm_vcpu_dirty = false;
1527 }
1528
1529 int kvm_cpu_exec(CPUArchState *env)
1530 {
1531     CPUState *cpu = ENV_GET_CPU(env);
1532     struct kvm_run *run = env->kvm_run;
1533     int ret, run_ret;
1534
1535     DPRINTF("kvm_cpu_exec()\n");
1536
1537     if (kvm_arch_process_async_events(cpu)) {
1538         env->exit_request = 0;
1539         return EXCP_HLT;
1540     }
1541
1542     do {
1543         if (cpu->kvm_vcpu_dirty) {
1544             kvm_arch_put_registers(cpu, KVM_PUT_RUNTIME_STATE);
1545             cpu->kvm_vcpu_dirty = false;
1546         }
1547
1548         kvm_arch_pre_run(cpu, run);
1549         if (env->exit_request) {
1550             DPRINTF("interrupt exit requested\n");
1551             /*
1552              * KVM requires us to reenter the kernel after IO exits to complete
1553              * instruction emulation. This self-signal will ensure that we
1554              * leave ASAP again.
1555              */
1556             qemu_cpu_kick_self();
1557         }
1558         qemu_mutex_unlock_iothread();
1559
1560         run_ret = kvm_vcpu_ioctl(env, KVM_RUN, 0);
1561
1562         qemu_mutex_lock_iothread();
1563         kvm_arch_post_run(cpu, run);
1564
1565         if (run_ret < 0) {
1566             if (run_ret == -EINTR || run_ret == -EAGAIN) {
1567                 DPRINTF("io window exit\n");
1568                 ret = EXCP_INTERRUPT;
1569                 break;
1570             }
1571             fprintf(stderr, "error: kvm run failed %s\n",
1572                     strerror(-run_ret));
1573             abort();
1574         }
1575
1576         switch (run->exit_reason) {
1577         case KVM_EXIT_IO:
1578             DPRINTF("handle_io\n");
1579             kvm_handle_io(run->io.port,
1580                           (uint8_t *)run + run->io.data_offset,
1581                           run->io.direction,
1582                           run->io.size,
1583                           run->io.count);
1584             ret = 0;
1585             break;
1586         case KVM_EXIT_MMIO:
1587             DPRINTF("handle_mmio\n");
1588             cpu_physical_memory_rw(run->mmio.phys_addr,
1589                                    run->mmio.data,
1590                                    run->mmio.len,
1591                                    run->mmio.is_write);
1592             ret = 0;
1593             break;
1594         case KVM_EXIT_IRQ_WINDOW_OPEN:
1595             DPRINTF("irq_window_open\n");
1596             ret = EXCP_INTERRUPT;
1597             break;
1598         case KVM_EXIT_SHUTDOWN:
1599             DPRINTF("shutdown\n");
1600             qemu_system_reset_request();
1601             ret = EXCP_INTERRUPT;
1602             break;
1603         case KVM_EXIT_UNKNOWN:
1604             fprintf(stderr, "KVM: unknown exit, hardware reason %" PRIx64 "\n",
1605                     (uint64_t)run->hw.hardware_exit_reason);
1606             ret = -1;
1607             break;
1608         case KVM_EXIT_INTERNAL_ERROR:
1609             ret = kvm_handle_internal_error(env, run);
1610             break;
1611         default:
1612             DPRINTF("kvm_arch_handle_exit\n");
1613             ret = kvm_arch_handle_exit(cpu, run);
1614             break;
1615         }
1616     } while (ret == 0);
1617
1618     if (ret < 0) {
1619         cpu_dump_state(env, stderr, fprintf, CPU_DUMP_CODE);
1620         vm_stop(RUN_STATE_INTERNAL_ERROR);
1621     }
1622
1623     env->exit_request = 0;
1624     return ret;
1625 }
1626
1627 int kvm_ioctl(KVMState *s, int type, ...)
1628 {
1629     int ret;
1630     void *arg;
1631     va_list ap;
1632
1633     va_start(ap, type);
1634     arg = va_arg(ap, void *);
1635     va_end(ap);
1636
1637     ret = ioctl(s->fd, type, arg);
1638     if (ret == -1) {
1639         ret = -errno;
1640     }
1641     return ret;
1642 }
1643
1644 int kvm_vm_ioctl(KVMState *s, int type, ...)
1645 {
1646     int ret;
1647     void *arg;
1648     va_list ap;
1649
1650     va_start(ap, type);
1651     arg = va_arg(ap, void *);
1652     va_end(ap);
1653
1654     ret = ioctl(s->vmfd, type, arg);
1655     if (ret == -1) {
1656         ret = -errno;
1657     }
1658     return ret;
1659 }
1660
1661 int kvm_vcpu_ioctl(CPUArchState *env, int type, ...)
1662 {
1663     CPUState *cpu = ENV_GET_CPU(env);
1664     int ret;
1665     void *arg;
1666     va_list ap;
1667
1668     va_start(ap, type);
1669     arg = va_arg(ap, void *);
1670     va_end(ap);
1671
1672     ret = ioctl(cpu->kvm_fd, type, arg);
1673     if (ret == -1) {
1674         ret = -errno;
1675     }
1676     return ret;
1677 }
1678
1679 int kvm_has_sync_mmu(void)
1680 {
1681     return kvm_check_extension(kvm_state, KVM_CAP_SYNC_MMU);
1682 }
1683
1684 int kvm_has_vcpu_events(void)
1685 {
1686     return kvm_state->vcpu_events;
1687 }
1688
1689 int kvm_has_robust_singlestep(void)
1690 {
1691     return kvm_state->robust_singlestep;
1692 }
1693
1694 int kvm_has_debugregs(void)
1695 {
1696     return kvm_state->debugregs;
1697 }
1698
1699 int kvm_has_xsave(void)
1700 {
1701     return kvm_state->xsave;
1702 }
1703
1704 int kvm_has_xcrs(void)
1705 {
1706     return kvm_state->xcrs;
1707 }
1708
1709 int kvm_has_pit_state2(void)
1710 {
1711     return kvm_state->pit_state2;
1712 }
1713
1714 int kvm_has_many_ioeventfds(void)
1715 {
1716     if (!kvm_enabled()) {
1717         return 0;
1718     }
1719     return kvm_state->many_ioeventfds;
1720 }
1721
1722 int kvm_has_gsi_routing(void)
1723 {
1724 #ifdef KVM_CAP_IRQ_ROUTING
1725     return kvm_check_extension(kvm_state, KVM_CAP_IRQ_ROUTING);
1726 #else
1727     return false;
1728 #endif
1729 }
1730
1731 int kvm_has_intx_set_mask(void)
1732 {
1733     return kvm_state->intx_set_mask;
1734 }
1735
1736 void *kvm_vmalloc(ram_addr_t size)
1737 {
1738 #ifdef TARGET_S390X
1739     void *mem;
1740
1741     mem = kvm_arch_vmalloc(size);
1742     if (mem) {
1743         return mem;
1744     }
1745 #endif
1746     return qemu_vmalloc(size);
1747 }
1748
1749 void kvm_setup_guest_memory(void *start, size_t size)
1750 {
1751 #ifdef CONFIG_VALGRIND_H
1752     VALGRIND_MAKE_MEM_DEFINED(start, size);
1753 #endif
1754     if (!kvm_has_sync_mmu()) {
1755         int ret = qemu_madvise(start, size, QEMU_MADV_DONTFORK);
1756
1757         if (ret) {
1758             perror("qemu_madvise");
1759             fprintf(stderr,
1760                     "Need MADV_DONTFORK in absence of synchronous KVM MMU\n");
1761             exit(1);
1762         }
1763     }
1764 }
1765
1766 #ifdef KVM_CAP_SET_GUEST_DEBUG
1767 struct kvm_sw_breakpoint *kvm_find_sw_breakpoint(CPUArchState *env,
1768                                                  target_ulong pc)
1769 {
1770     struct kvm_sw_breakpoint *bp;
1771
1772     QTAILQ_FOREACH(bp, &env->kvm_state->kvm_sw_breakpoints, entry) {
1773         if (bp->pc == pc) {
1774             return bp;
1775         }
1776     }
1777     return NULL;
1778 }
1779
1780 int kvm_sw_breakpoints_active(CPUArchState *env)
1781 {
1782     return !QTAILQ_EMPTY(&env->kvm_state->kvm_sw_breakpoints);
1783 }
1784
1785 struct kvm_set_guest_debug_data {
1786     struct kvm_guest_debug dbg;
1787     CPUArchState *env;
1788     int err;
1789 };
1790
1791 static void kvm_invoke_set_guest_debug(void *data)
1792 {
1793     struct kvm_set_guest_debug_data *dbg_data = data;
1794     CPUArchState *env = dbg_data->env;
1795
1796     dbg_data->err = kvm_vcpu_ioctl(env, KVM_SET_GUEST_DEBUG, &dbg_data->dbg);
1797 }
1798
1799 int kvm_update_guest_debug(CPUArchState *env, unsigned long reinject_trap)
1800 {
1801     CPUState *cpu = ENV_GET_CPU(env);
1802     struct kvm_set_guest_debug_data data;
1803
1804     data.dbg.control = reinject_trap;
1805
1806     if (env->singlestep_enabled) {
1807         data.dbg.control |= KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_SINGLESTEP;
1808     }
1809     kvm_arch_update_guest_debug(cpu, &data.dbg);
1810     data.env = env;
1811
1812     run_on_cpu(cpu, kvm_invoke_set_guest_debug, &data);
1813     return data.err;
1814 }
1815
1816 int kvm_insert_breakpoint(CPUArchState *current_env, target_ulong addr,
1817                           target_ulong len, int type)
1818 {
1819     CPUState *current_cpu = ENV_GET_CPU(current_env);
1820     struct kvm_sw_breakpoint *bp;
1821     CPUArchState *env;
1822     int err;
1823
1824     if (type == GDB_BREAKPOINT_SW) {
1825         bp = kvm_find_sw_breakpoint(current_env, addr);
1826         if (bp) {
1827             bp->use_count++;
1828             return 0;
1829         }
1830
1831         bp = g_malloc(sizeof(struct kvm_sw_breakpoint));
1832         if (!bp) {
1833             return -ENOMEM;
1834         }
1835
1836         bp->pc = addr;
1837         bp->use_count = 1;
1838         err = kvm_arch_insert_sw_breakpoint(current_cpu, bp);
1839         if (err) {
1840             g_free(bp);
1841             return err;
1842         }
1843
1844         QTAILQ_INSERT_HEAD(&current_env->kvm_state->kvm_sw_breakpoints,
1845                           bp, entry);
1846     } else {
1847         err = kvm_arch_insert_hw_breakpoint(addr, len, type);
1848         if (err) {
1849             return err;
1850         }
1851     }
1852
1853     for (env = first_cpu; env != NULL; env = env->next_cpu) {
1854         err = kvm_update_guest_debug(env, 0);
1855         if (err) {
1856             return err;
1857         }
1858     }
1859     return 0;
1860 }
1861
1862 int kvm_remove_breakpoint(CPUArchState *current_env, target_ulong addr,
1863                           target_ulong len, int type)
1864 {
1865     CPUState *current_cpu = ENV_GET_CPU(current_env);
1866     struct kvm_sw_breakpoint *bp;
1867     CPUArchState *env;
1868     int err;
1869
1870     if (type == GDB_BREAKPOINT_SW) {
1871         bp = kvm_find_sw_breakpoint(current_env, addr);
1872         if (!bp) {
1873             return -ENOENT;
1874         }
1875
1876         if (bp->use_count > 1) {
1877             bp->use_count--;
1878             return 0;
1879         }
1880
1881         err = kvm_arch_remove_sw_breakpoint(current_cpu, bp);
1882         if (err) {
1883             return err;
1884         }
1885
1886         QTAILQ_REMOVE(&current_env->kvm_state->kvm_sw_breakpoints, bp, entry);
1887         g_free(bp);
1888     } else {
1889         err = kvm_arch_remove_hw_breakpoint(addr, len, type);
1890         if (err) {
1891             return err;
1892         }
1893     }
1894
1895     for (env = first_cpu; env != NULL; env = env->next_cpu) {
1896         err = kvm_update_guest_debug(env, 0);
1897         if (err) {
1898             return err;
1899         }
1900     }
1901     return 0;
1902 }
1903
1904 void kvm_remove_all_breakpoints(CPUArchState *current_env)
1905 {
1906     CPUState *current_cpu = ENV_GET_CPU(current_env);
1907     struct kvm_sw_breakpoint *bp, *next;
1908     KVMState *s = current_env->kvm_state;
1909     CPUArchState *env;
1910     CPUState *cpu;
1911
1912     QTAILQ_FOREACH_SAFE(bp, &s->kvm_sw_breakpoints, entry, next) {
1913         if (kvm_arch_remove_sw_breakpoint(current_cpu, bp) != 0) {
1914             /* Try harder to find a CPU that currently sees the breakpoint. */
1915             for (env = first_cpu; env != NULL; env = env->next_cpu) {
1916                 cpu = ENV_GET_CPU(env);
1917                 if (kvm_arch_remove_sw_breakpoint(cpu, bp) == 0) {
1918                     break;
1919                 }
1920             }
1921         }
1922         QTAILQ_REMOVE(&s->kvm_sw_breakpoints, bp, entry);
1923         g_free(bp);
1924     }
1925     kvm_arch_remove_all_hw_breakpoints();
1926
1927     for (env = first_cpu; env != NULL; env = env->next_cpu) {
1928         kvm_update_guest_debug(env, 0);
1929     }
1930 }
1931
1932 #else /* !KVM_CAP_SET_GUEST_DEBUG */
1933
1934 int kvm_update_guest_debug(CPUArchState *env, unsigned long reinject_trap)
1935 {
1936     return -EINVAL;
1937 }
1938
1939 int kvm_insert_breakpoint(CPUArchState *current_env, target_ulong addr,
1940                           target_ulong len, int type)
1941 {
1942     return -EINVAL;
1943 }
1944
1945 int kvm_remove_breakpoint(CPUArchState *current_env, target_ulong addr,
1946                           target_ulong len, int type)
1947 {
1948     return -EINVAL;
1949 }
1950
1951 void kvm_remove_all_breakpoints(CPUArchState *current_env)
1952 {
1953 }
1954 #endif /* !KVM_CAP_SET_GUEST_DEBUG */
1955
1956 int kvm_set_signal_mask(CPUArchState *env, const sigset_t *sigset)
1957 {
1958     struct kvm_signal_mask *sigmask;
1959     int r;
1960
1961     if (!sigset) {
1962         return kvm_vcpu_ioctl(env, KVM_SET_SIGNAL_MASK, NULL);
1963     }
1964
1965     sigmask = g_malloc(sizeof(*sigmask) + sizeof(*sigset));
1966
1967     sigmask->len = 8;
1968     memcpy(sigmask->sigset, sigset, sizeof(*sigset));
1969     r = kvm_vcpu_ioctl(env, KVM_SET_SIGNAL_MASK, sigmask);
1970     g_free(sigmask);
1971
1972     return r;
1973 }
1974
1975 int kvm_set_ioeventfd_mmio(int fd, uint32_t addr, uint32_t val, bool assign,
1976                            uint32_t size)
1977 {
1978     int ret;
1979     struct kvm_ioeventfd iofd;
1980
1981     iofd.datamatch = val;
1982     iofd.addr = addr;
1983     iofd.len = size;
1984     iofd.flags = KVM_IOEVENTFD_FLAG_DATAMATCH;
1985     iofd.fd = fd;
1986
1987     if (!kvm_enabled()) {
1988         return -ENOSYS;
1989     }
1990
1991     if (!assign) {
1992         iofd.flags |= KVM_IOEVENTFD_FLAG_DEASSIGN;
1993     }
1994
1995     ret = kvm_vm_ioctl(kvm_state, KVM_IOEVENTFD, &iofd);
1996
1997     if (ret < 0) {
1998         return -errno;
1999     }
2000
2001     return 0;
2002 }
2003
2004 int kvm_set_ioeventfd_pio_word(int fd, uint16_t addr, uint16_t val, bool assign)
2005 {
2006     struct kvm_ioeventfd kick = {
2007         .datamatch = val,
2008         .addr = addr,
2009         .len = 2,
2010         .flags = KVM_IOEVENTFD_FLAG_DATAMATCH | KVM_IOEVENTFD_FLAG_PIO,
2011         .fd = fd,
2012     };
2013     int r;
2014     if (!kvm_enabled()) {
2015         return -ENOSYS;
2016     }
2017     if (!assign) {
2018         kick.flags |= KVM_IOEVENTFD_FLAG_DEASSIGN;
2019     }
2020     r = kvm_vm_ioctl(kvm_state, KVM_IOEVENTFD, &kick);
2021     if (r < 0) {
2022         return r;
2023     }
2024     return 0;
2025 }
2026
2027 int kvm_on_sigbus_vcpu(CPUArchState *env, int code, void *addr)
2028 {
2029     CPUState *cpu = ENV_GET_CPU(env);
2030     return kvm_arch_on_sigbus_vcpu(cpu, code, addr);
2031 }
2032
2033 int kvm_on_sigbus(int code, void *addr)
2034 {
2035     return kvm_arch_on_sigbus(code, addr);
2036 }
This page took 0.132767 seconds and 4 git commands to generate.