]> Git Repo - qemu.git/blob - kvm-all.c
block/dmg: make it modular
[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
557     iofd.datamatch = datamatch ? adjust_ioeventfd_endianness(val, size) : 0;
558     iofd.addr = addr;
559     iofd.len = size;
560     iofd.flags = 0;
561     iofd.fd = fd;
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         fprintf(stderr, "Please add the 'switch_amode' kernel parameter to "
1548                         "your host kernel command line\n");
1549 #endif
1550         goto err;
1551     }
1552
1553     s->vmfd = ret;
1554     missing_cap = kvm_check_extension_list(s, kvm_required_capabilites);
1555     if (!missing_cap) {
1556         missing_cap =
1557             kvm_check_extension_list(s, kvm_arch_required_capabilities);
1558     }
1559     if (missing_cap) {
1560         ret = -EINVAL;
1561         fprintf(stderr, "kvm does not support %s\n%s",
1562                 missing_cap->name, upgrade_note);
1563         goto err;
1564     }
1565
1566     s->coalesced_mmio = kvm_check_extension(s, KVM_CAP_COALESCED_MMIO);
1567
1568     s->broken_set_mem_region = 1;
1569     ret = kvm_check_extension(s, KVM_CAP_JOIN_MEMORY_REGIONS_WORKS);
1570     if (ret > 0) {
1571         s->broken_set_mem_region = 0;
1572     }
1573
1574 #ifdef KVM_CAP_VCPU_EVENTS
1575     s->vcpu_events = kvm_check_extension(s, KVM_CAP_VCPU_EVENTS);
1576 #endif
1577
1578     s->robust_singlestep =
1579         kvm_check_extension(s, KVM_CAP_X86_ROBUST_SINGLESTEP);
1580
1581 #ifdef KVM_CAP_DEBUGREGS
1582     s->debugregs = kvm_check_extension(s, KVM_CAP_DEBUGREGS);
1583 #endif
1584
1585 #ifdef KVM_CAP_XSAVE
1586     s->xsave = kvm_check_extension(s, KVM_CAP_XSAVE);
1587 #endif
1588
1589 #ifdef KVM_CAP_XCRS
1590     s->xcrs = kvm_check_extension(s, KVM_CAP_XCRS);
1591 #endif
1592
1593 #ifdef KVM_CAP_PIT_STATE2
1594     s->pit_state2 = kvm_check_extension(s, KVM_CAP_PIT_STATE2);
1595 #endif
1596
1597 #ifdef KVM_CAP_IRQ_ROUTING
1598     s->direct_msi = (kvm_check_extension(s, KVM_CAP_SIGNAL_MSI) > 0);
1599 #endif
1600
1601     s->intx_set_mask = kvm_check_extension(s, KVM_CAP_PCI_2_3);
1602
1603     s->irq_set_ioctl = KVM_IRQ_LINE;
1604     if (kvm_check_extension(s, KVM_CAP_IRQ_INJECT_STATUS)) {
1605         s->irq_set_ioctl = KVM_IRQ_LINE_STATUS;
1606     }
1607
1608 #ifdef KVM_CAP_READONLY_MEM
1609     kvm_readonly_mem_allowed =
1610         (kvm_check_extension(s, KVM_CAP_READONLY_MEM) > 0);
1611 #endif
1612
1613     kvm_eventfds_allowed =
1614         (kvm_check_extension(s, KVM_CAP_IOEVENTFD) > 0);
1615
1616     kvm_irqfds_allowed =
1617         (kvm_check_extension(s, KVM_CAP_IRQFD) > 0);
1618
1619     kvm_resamplefds_allowed =
1620         (kvm_check_extension(s, KVM_CAP_IRQFD_RESAMPLE) > 0);
1621
1622     kvm_vm_attributes_allowed =
1623         (kvm_check_extension(s, KVM_CAP_VM_ATTRIBUTES) > 0);
1624
1625     ret = kvm_arch_init(ms, s);
1626     if (ret < 0) {
1627         goto err;
1628     }
1629
1630     ret = kvm_irqchip_create(ms, s);
1631     if (ret < 0) {
1632         goto err;
1633     }
1634
1635     kvm_state = s;
1636     memory_listener_register(&kvm_memory_listener, &address_space_memory);
1637     memory_listener_register(&kvm_io_listener, &address_space_io);
1638
1639     s->many_ioeventfds = kvm_check_many_ioeventfds();
1640
1641     cpu_interrupt_handler = kvm_handle_interrupt;
1642
1643     return 0;
1644
1645 err:
1646     assert(ret < 0);
1647     if (s->vmfd >= 0) {
1648         close(s->vmfd);
1649     }
1650     if (s->fd != -1) {
1651         close(s->fd);
1652     }
1653     g_free(s->slots);
1654
1655     return ret;
1656 }
1657
1658 void kvm_set_sigmask_len(KVMState *s, unsigned int sigmask_len)
1659 {
1660     s->sigmask_len = sigmask_len;
1661 }
1662
1663 static void kvm_handle_io(uint16_t port, void *data, int direction, int size,
1664                           uint32_t count)
1665 {
1666     int i;
1667     uint8_t *ptr = data;
1668
1669     for (i = 0; i < count; i++) {
1670         address_space_rw(&address_space_io, port, MEMTXATTRS_UNSPECIFIED,
1671                          ptr, size,
1672                          direction == KVM_EXIT_IO_OUT);
1673         ptr += size;
1674     }
1675 }
1676
1677 static int kvm_handle_internal_error(CPUState *cpu, struct kvm_run *run)
1678 {
1679     fprintf(stderr, "KVM internal error. Suberror: %d\n",
1680             run->internal.suberror);
1681
1682     if (kvm_check_extension(kvm_state, KVM_CAP_INTERNAL_ERROR_DATA)) {
1683         int i;
1684
1685         for (i = 0; i < run->internal.ndata; ++i) {
1686             fprintf(stderr, "extra data[%d]: %"PRIx64"\n",
1687                     i, (uint64_t)run->internal.data[i]);
1688         }
1689     }
1690     if (run->internal.suberror == KVM_INTERNAL_ERROR_EMULATION) {
1691         fprintf(stderr, "emulation failure\n");
1692         if (!kvm_arch_stop_on_emulation_error(cpu)) {
1693             cpu_dump_state(cpu, stderr, fprintf, CPU_DUMP_CODE);
1694             return EXCP_INTERRUPT;
1695         }
1696     }
1697     /* FIXME: Should trigger a qmp message to let management know
1698      * something went wrong.
1699      */
1700     return -1;
1701 }
1702
1703 void kvm_flush_coalesced_mmio_buffer(void)
1704 {
1705     KVMState *s = kvm_state;
1706
1707     if (s->coalesced_flush_in_progress) {
1708         return;
1709     }
1710
1711     s->coalesced_flush_in_progress = true;
1712
1713     if (s->coalesced_mmio_ring) {
1714         struct kvm_coalesced_mmio_ring *ring = s->coalesced_mmio_ring;
1715         while (ring->first != ring->last) {
1716             struct kvm_coalesced_mmio *ent;
1717
1718             ent = &ring->coalesced_mmio[ring->first];
1719
1720             cpu_physical_memory_write(ent->phys_addr, ent->data, ent->len);
1721             smp_wmb();
1722             ring->first = (ring->first + 1) % KVM_COALESCED_MMIO_MAX;
1723         }
1724     }
1725
1726     s->coalesced_flush_in_progress = false;
1727 }
1728
1729 static void do_kvm_cpu_synchronize_state(void *arg)
1730 {
1731     CPUState *cpu = arg;
1732
1733     if (!cpu->kvm_vcpu_dirty) {
1734         kvm_arch_get_registers(cpu);
1735         cpu->kvm_vcpu_dirty = true;
1736     }
1737 }
1738
1739 void kvm_cpu_synchronize_state(CPUState *cpu)
1740 {
1741     if (!cpu->kvm_vcpu_dirty) {
1742         run_on_cpu(cpu, do_kvm_cpu_synchronize_state, cpu);
1743     }
1744 }
1745
1746 static void do_kvm_cpu_synchronize_post_reset(void *arg)
1747 {
1748     CPUState *cpu = arg;
1749
1750     kvm_arch_put_registers(cpu, KVM_PUT_RESET_STATE);
1751     cpu->kvm_vcpu_dirty = false;
1752 }
1753
1754 void kvm_cpu_synchronize_post_reset(CPUState *cpu)
1755 {
1756     run_on_cpu(cpu, do_kvm_cpu_synchronize_post_reset, cpu);
1757 }
1758
1759 static void do_kvm_cpu_synchronize_post_init(void *arg)
1760 {
1761     CPUState *cpu = arg;
1762
1763     kvm_arch_put_registers(cpu, KVM_PUT_FULL_STATE);
1764     cpu->kvm_vcpu_dirty = false;
1765 }
1766
1767 void kvm_cpu_synchronize_post_init(CPUState *cpu)
1768 {
1769     run_on_cpu(cpu, do_kvm_cpu_synchronize_post_init, cpu);
1770 }
1771
1772 void kvm_cpu_clean_state(CPUState *cpu)
1773 {
1774     cpu->kvm_vcpu_dirty = false;
1775 }
1776
1777 int kvm_cpu_exec(CPUState *cpu)
1778 {
1779     struct kvm_run *run = cpu->kvm_run;
1780     int ret, run_ret;
1781
1782     DPRINTF("kvm_cpu_exec()\n");
1783
1784     if (kvm_arch_process_async_events(cpu)) {
1785         cpu->exit_request = 0;
1786         return EXCP_HLT;
1787     }
1788
1789     do {
1790         if (cpu->kvm_vcpu_dirty) {
1791             kvm_arch_put_registers(cpu, KVM_PUT_RUNTIME_STATE);
1792             cpu->kvm_vcpu_dirty = false;
1793         }
1794
1795         kvm_arch_pre_run(cpu, run);
1796         if (cpu->exit_request) {
1797             DPRINTF("interrupt exit requested\n");
1798             /*
1799              * KVM requires us to reenter the kernel after IO exits to complete
1800              * instruction emulation. This self-signal will ensure that we
1801              * leave ASAP again.
1802              */
1803             qemu_cpu_kick_self();
1804         }
1805         qemu_mutex_unlock_iothread();
1806
1807         run_ret = kvm_vcpu_ioctl(cpu, KVM_RUN, 0);
1808
1809         qemu_mutex_lock_iothread();
1810         kvm_arch_post_run(cpu, run);
1811
1812         if (run_ret < 0) {
1813             if (run_ret == -EINTR || run_ret == -EAGAIN) {
1814                 DPRINTF("io window exit\n");
1815                 ret = EXCP_INTERRUPT;
1816                 break;
1817             }
1818             fprintf(stderr, "error: kvm run failed %s\n",
1819                     strerror(-run_ret));
1820             ret = -1;
1821             break;
1822         }
1823
1824         trace_kvm_run_exit(cpu->cpu_index, run->exit_reason);
1825         switch (run->exit_reason) {
1826         case KVM_EXIT_IO:
1827             DPRINTF("handle_io\n");
1828             kvm_handle_io(run->io.port,
1829                           (uint8_t *)run + run->io.data_offset,
1830                           run->io.direction,
1831                           run->io.size,
1832                           run->io.count);
1833             ret = 0;
1834             break;
1835         case KVM_EXIT_MMIO:
1836             DPRINTF("handle_mmio\n");
1837             cpu_physical_memory_rw(run->mmio.phys_addr,
1838                                    run->mmio.data,
1839                                    run->mmio.len,
1840                                    run->mmio.is_write);
1841             ret = 0;
1842             break;
1843         case KVM_EXIT_IRQ_WINDOW_OPEN:
1844             DPRINTF("irq_window_open\n");
1845             ret = EXCP_INTERRUPT;
1846             break;
1847         case KVM_EXIT_SHUTDOWN:
1848             DPRINTF("shutdown\n");
1849             qemu_system_reset_request();
1850             ret = EXCP_INTERRUPT;
1851             break;
1852         case KVM_EXIT_UNKNOWN:
1853             fprintf(stderr, "KVM: unknown exit, hardware reason %" PRIx64 "\n",
1854                     (uint64_t)run->hw.hardware_exit_reason);
1855             ret = -1;
1856             break;
1857         case KVM_EXIT_INTERNAL_ERROR:
1858             ret = kvm_handle_internal_error(cpu, run);
1859             break;
1860         case KVM_EXIT_SYSTEM_EVENT:
1861             switch (run->system_event.type) {
1862             case KVM_SYSTEM_EVENT_SHUTDOWN:
1863                 qemu_system_shutdown_request();
1864                 ret = EXCP_INTERRUPT;
1865                 break;
1866             case KVM_SYSTEM_EVENT_RESET:
1867                 qemu_system_reset_request();
1868                 ret = EXCP_INTERRUPT;
1869                 break;
1870             default:
1871                 DPRINTF("kvm_arch_handle_exit\n");
1872                 ret = kvm_arch_handle_exit(cpu, run);
1873                 break;
1874             }
1875             break;
1876         default:
1877             DPRINTF("kvm_arch_handle_exit\n");
1878             ret = kvm_arch_handle_exit(cpu, run);
1879             break;
1880         }
1881     } while (ret == 0);
1882
1883     if (ret < 0) {
1884         cpu_dump_state(cpu, stderr, fprintf, CPU_DUMP_CODE);
1885         vm_stop(RUN_STATE_INTERNAL_ERROR);
1886     }
1887
1888     cpu->exit_request = 0;
1889     return ret;
1890 }
1891
1892 int kvm_ioctl(KVMState *s, int type, ...)
1893 {
1894     int ret;
1895     void *arg;
1896     va_list ap;
1897
1898     va_start(ap, type);
1899     arg = va_arg(ap, void *);
1900     va_end(ap);
1901
1902     trace_kvm_ioctl(type, arg);
1903     ret = ioctl(s->fd, type, arg);
1904     if (ret == -1) {
1905         ret = -errno;
1906     }
1907     return ret;
1908 }
1909
1910 int kvm_vm_ioctl(KVMState *s, int type, ...)
1911 {
1912     int ret;
1913     void *arg;
1914     va_list ap;
1915
1916     va_start(ap, type);
1917     arg = va_arg(ap, void *);
1918     va_end(ap);
1919
1920     trace_kvm_vm_ioctl(type, arg);
1921     ret = ioctl(s->vmfd, type, arg);
1922     if (ret == -1) {
1923         ret = -errno;
1924     }
1925     return ret;
1926 }
1927
1928 int kvm_vcpu_ioctl(CPUState *cpu, int type, ...)
1929 {
1930     int ret;
1931     void *arg;
1932     va_list ap;
1933
1934     va_start(ap, type);
1935     arg = va_arg(ap, void *);
1936     va_end(ap);
1937
1938     trace_kvm_vcpu_ioctl(cpu->cpu_index, type, arg);
1939     ret = ioctl(cpu->kvm_fd, type, arg);
1940     if (ret == -1) {
1941         ret = -errno;
1942     }
1943     return ret;
1944 }
1945
1946 int kvm_device_ioctl(int fd, int type, ...)
1947 {
1948     int ret;
1949     void *arg;
1950     va_list ap;
1951
1952     va_start(ap, type);
1953     arg = va_arg(ap, void *);
1954     va_end(ap);
1955
1956     trace_kvm_device_ioctl(fd, type, arg);
1957     ret = ioctl(fd, type, arg);
1958     if (ret == -1) {
1959         ret = -errno;
1960     }
1961     return ret;
1962 }
1963
1964 int kvm_vm_check_attr(KVMState *s, uint32_t group, uint64_t attr)
1965 {
1966     int ret;
1967     struct kvm_device_attr attribute = {
1968         .group = group,
1969         .attr = attr,
1970     };
1971
1972     if (!kvm_vm_attributes_allowed) {
1973         return 0;
1974     }
1975
1976     ret = kvm_vm_ioctl(s, KVM_HAS_DEVICE_ATTR, &attribute);
1977     /* kvm returns 0 on success for HAS_DEVICE_ATTR */
1978     return ret ? 0 : 1;
1979 }
1980
1981 int kvm_has_sync_mmu(void)
1982 {
1983     return kvm_check_extension(kvm_state, KVM_CAP_SYNC_MMU);
1984 }
1985
1986 int kvm_has_vcpu_events(void)
1987 {
1988     return kvm_state->vcpu_events;
1989 }
1990
1991 int kvm_has_robust_singlestep(void)
1992 {
1993     return kvm_state->robust_singlestep;
1994 }
1995
1996 int kvm_has_debugregs(void)
1997 {
1998     return kvm_state->debugregs;
1999 }
2000
2001 int kvm_has_xsave(void)
2002 {
2003     return kvm_state->xsave;
2004 }
2005
2006 int kvm_has_xcrs(void)
2007 {
2008     return kvm_state->xcrs;
2009 }
2010
2011 int kvm_has_pit_state2(void)
2012 {
2013     return kvm_state->pit_state2;
2014 }
2015
2016 int kvm_has_many_ioeventfds(void)
2017 {
2018     if (!kvm_enabled()) {
2019         return 0;
2020     }
2021     return kvm_state->many_ioeventfds;
2022 }
2023
2024 int kvm_has_gsi_routing(void)
2025 {
2026 #ifdef KVM_CAP_IRQ_ROUTING
2027     return kvm_check_extension(kvm_state, KVM_CAP_IRQ_ROUTING);
2028 #else
2029     return false;
2030 #endif
2031 }
2032
2033 int kvm_has_intx_set_mask(void)
2034 {
2035     return kvm_state->intx_set_mask;
2036 }
2037
2038 void kvm_setup_guest_memory(void *start, size_t size)
2039 {
2040     if (!kvm_has_sync_mmu()) {
2041         int ret = qemu_madvise(start, size, QEMU_MADV_DONTFORK);
2042
2043         if (ret) {
2044             perror("qemu_madvise");
2045             fprintf(stderr,
2046                     "Need MADV_DONTFORK in absence of synchronous KVM MMU\n");
2047             exit(1);
2048         }
2049     }
2050 }
2051
2052 #ifdef KVM_CAP_SET_GUEST_DEBUG
2053 struct kvm_sw_breakpoint *kvm_find_sw_breakpoint(CPUState *cpu,
2054                                                  target_ulong pc)
2055 {
2056     struct kvm_sw_breakpoint *bp;
2057
2058     QTAILQ_FOREACH(bp, &cpu->kvm_state->kvm_sw_breakpoints, entry) {
2059         if (bp->pc == pc) {
2060             return bp;
2061         }
2062     }
2063     return NULL;
2064 }
2065
2066 int kvm_sw_breakpoints_active(CPUState *cpu)
2067 {
2068     return !QTAILQ_EMPTY(&cpu->kvm_state->kvm_sw_breakpoints);
2069 }
2070
2071 struct kvm_set_guest_debug_data {
2072     struct kvm_guest_debug dbg;
2073     CPUState *cpu;
2074     int err;
2075 };
2076
2077 static void kvm_invoke_set_guest_debug(void *data)
2078 {
2079     struct kvm_set_guest_debug_data *dbg_data = data;
2080
2081     dbg_data->err = kvm_vcpu_ioctl(dbg_data->cpu, KVM_SET_GUEST_DEBUG,
2082                                    &dbg_data->dbg);
2083 }
2084
2085 int kvm_update_guest_debug(CPUState *cpu, unsigned long reinject_trap)
2086 {
2087     struct kvm_set_guest_debug_data data;
2088
2089     data.dbg.control = reinject_trap;
2090
2091     if (cpu->singlestep_enabled) {
2092         data.dbg.control |= KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_SINGLESTEP;
2093     }
2094     kvm_arch_update_guest_debug(cpu, &data.dbg);
2095     data.cpu = cpu;
2096
2097     run_on_cpu(cpu, kvm_invoke_set_guest_debug, &data);
2098     return data.err;
2099 }
2100
2101 int kvm_insert_breakpoint(CPUState *cpu, target_ulong addr,
2102                           target_ulong len, int type)
2103 {
2104     struct kvm_sw_breakpoint *bp;
2105     int err;
2106
2107     if (type == GDB_BREAKPOINT_SW) {
2108         bp = kvm_find_sw_breakpoint(cpu, addr);
2109         if (bp) {
2110             bp->use_count++;
2111             return 0;
2112         }
2113
2114         bp = g_malloc(sizeof(struct kvm_sw_breakpoint));
2115         bp->pc = addr;
2116         bp->use_count = 1;
2117         err = kvm_arch_insert_sw_breakpoint(cpu, bp);
2118         if (err) {
2119             g_free(bp);
2120             return err;
2121         }
2122
2123         QTAILQ_INSERT_HEAD(&cpu->kvm_state->kvm_sw_breakpoints, bp, entry);
2124     } else {
2125         err = kvm_arch_insert_hw_breakpoint(addr, len, type);
2126         if (err) {
2127             return err;
2128         }
2129     }
2130
2131     CPU_FOREACH(cpu) {
2132         err = kvm_update_guest_debug(cpu, 0);
2133         if (err) {
2134             return err;
2135         }
2136     }
2137     return 0;
2138 }
2139
2140 int kvm_remove_breakpoint(CPUState *cpu, target_ulong addr,
2141                           target_ulong len, int type)
2142 {
2143     struct kvm_sw_breakpoint *bp;
2144     int err;
2145
2146     if (type == GDB_BREAKPOINT_SW) {
2147         bp = kvm_find_sw_breakpoint(cpu, addr);
2148         if (!bp) {
2149             return -ENOENT;
2150         }
2151
2152         if (bp->use_count > 1) {
2153             bp->use_count--;
2154             return 0;
2155         }
2156
2157         err = kvm_arch_remove_sw_breakpoint(cpu, bp);
2158         if (err) {
2159             return err;
2160         }
2161
2162         QTAILQ_REMOVE(&cpu->kvm_state->kvm_sw_breakpoints, bp, entry);
2163         g_free(bp);
2164     } else {
2165         err = kvm_arch_remove_hw_breakpoint(addr, len, type);
2166         if (err) {
2167             return err;
2168         }
2169     }
2170
2171     CPU_FOREACH(cpu) {
2172         err = kvm_update_guest_debug(cpu, 0);
2173         if (err) {
2174             return err;
2175         }
2176     }
2177     return 0;
2178 }
2179
2180 void kvm_remove_all_breakpoints(CPUState *cpu)
2181 {
2182     struct kvm_sw_breakpoint *bp, *next;
2183     KVMState *s = cpu->kvm_state;
2184     CPUState *tmpcpu;
2185
2186     QTAILQ_FOREACH_SAFE(bp, &s->kvm_sw_breakpoints, entry, next) {
2187         if (kvm_arch_remove_sw_breakpoint(cpu, bp) != 0) {
2188             /* Try harder to find a CPU that currently sees the breakpoint. */
2189             CPU_FOREACH(tmpcpu) {
2190                 if (kvm_arch_remove_sw_breakpoint(tmpcpu, bp) == 0) {
2191                     break;
2192                 }
2193             }
2194         }
2195         QTAILQ_REMOVE(&s->kvm_sw_breakpoints, bp, entry);
2196         g_free(bp);
2197     }
2198     kvm_arch_remove_all_hw_breakpoints();
2199
2200     CPU_FOREACH(cpu) {
2201         kvm_update_guest_debug(cpu, 0);
2202     }
2203 }
2204
2205 #else /* !KVM_CAP_SET_GUEST_DEBUG */
2206
2207 int kvm_update_guest_debug(CPUState *cpu, unsigned long reinject_trap)
2208 {
2209     return -EINVAL;
2210 }
2211
2212 int kvm_insert_breakpoint(CPUState *cpu, target_ulong addr,
2213                           target_ulong len, int type)
2214 {
2215     return -EINVAL;
2216 }
2217
2218 int kvm_remove_breakpoint(CPUState *cpu, target_ulong addr,
2219                           target_ulong len, int type)
2220 {
2221     return -EINVAL;
2222 }
2223
2224 void kvm_remove_all_breakpoints(CPUState *cpu)
2225 {
2226 }
2227 #endif /* !KVM_CAP_SET_GUEST_DEBUG */
2228
2229 int kvm_set_signal_mask(CPUState *cpu, const sigset_t *sigset)
2230 {
2231     KVMState *s = kvm_state;
2232     struct kvm_signal_mask *sigmask;
2233     int r;
2234
2235     if (!sigset) {
2236         return kvm_vcpu_ioctl(cpu, KVM_SET_SIGNAL_MASK, NULL);
2237     }
2238
2239     sigmask = g_malloc(sizeof(*sigmask) + sizeof(*sigset));
2240
2241     sigmask->len = s->sigmask_len;
2242     memcpy(sigmask->sigset, sigset, sizeof(*sigset));
2243     r = kvm_vcpu_ioctl(cpu, KVM_SET_SIGNAL_MASK, sigmask);
2244     g_free(sigmask);
2245
2246     return r;
2247 }
2248 int kvm_on_sigbus_vcpu(CPUState *cpu, int code, void *addr)
2249 {
2250     return kvm_arch_on_sigbus_vcpu(cpu, code, addr);
2251 }
2252
2253 int kvm_on_sigbus(int code, void *addr)
2254 {
2255     return kvm_arch_on_sigbus(code, addr);
2256 }
2257
2258 int kvm_create_device(KVMState *s, uint64_t type, bool test)
2259 {
2260     int ret;
2261     struct kvm_create_device create_dev;
2262
2263     create_dev.type = type;
2264     create_dev.fd = -1;
2265     create_dev.flags = test ? KVM_CREATE_DEVICE_TEST : 0;
2266
2267     if (!kvm_check_extension(s, KVM_CAP_DEVICE_CTRL)) {
2268         return -ENOTSUP;
2269     }
2270
2271     ret = kvm_vm_ioctl(s, KVM_CREATE_DEVICE, &create_dev);
2272     if (ret) {
2273         return ret;
2274     }
2275
2276     return test ? 0 : create_dev.fd;
2277 }
2278
2279 int kvm_set_one_reg(CPUState *cs, uint64_t id, void *source)
2280 {
2281     struct kvm_one_reg reg;
2282     int r;
2283
2284     reg.id = id;
2285     reg.addr = (uintptr_t) source;
2286     r = kvm_vcpu_ioctl(cs, KVM_SET_ONE_REG, &reg);
2287     if (r) {
2288         trace_kvm_failed_reg_set(id, strerror(r));
2289     }
2290     return r;
2291 }
2292
2293 int kvm_get_one_reg(CPUState *cs, uint64_t id, void *target)
2294 {
2295     struct kvm_one_reg reg;
2296     int r;
2297
2298     reg.id = id;
2299     reg.addr = (uintptr_t) target;
2300     r = kvm_vcpu_ioctl(cs, KVM_GET_ONE_REG, &reg);
2301     if (r) {
2302         trace_kvm_failed_reg_get(id, strerror(r));
2303     }
2304     return r;
2305 }
2306
2307 static void kvm_accel_class_init(ObjectClass *oc, void *data)
2308 {
2309     AccelClass *ac = ACCEL_CLASS(oc);
2310     ac->name = "KVM";
2311     ac->init_machine = kvm_init;
2312     ac->allowed = &kvm_allowed;
2313 }
2314
2315 static const TypeInfo kvm_accel_type = {
2316     .name = TYPE_KVM_ACCEL,
2317     .parent = TYPE_ACCEL,
2318     .class_init = kvm_accel_class_init,
2319     .instance_size = sizeof(KVMState),
2320 };
2321
2322 static void kvm_type_init(void)
2323 {
2324     type_register_static(&kvm_accel_type);
2325 }
2326
2327 type_init(kvm_type_init);
This page took 0.154747 seconds and 4 git commands to generate.