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