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