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