4 * Copyright (C) 2006-2008 Qumranet Technologies
6 * Licensed under the terms of the GNU GPL version 2 or higher.
9 #include "config-host.h"
15 #include "qemu-common.h"
25 #include <sys/utsname.h>
26 #include <sys/syscall.h>
28 #include <sys/ioctl.h>
30 #include <sys/prctl.h>
36 #define PR_MCE_KILL 33
40 #define BUS_MCEERR_AR 4
43 #define BUS_MCEERR_AO 5
46 #define EXPECTED_KVM_API_VERSION 12
48 #if EXPECTED_KVM_API_VERSION != KVM_API_VERSION
49 #error libkvm: userspace and kernel version mismatch
55 int kvm_pit_reinject
= 1;
60 kvm_context_t kvm_context
;
62 pthread_mutex_t qemu_mutex
= PTHREAD_MUTEX_INITIALIZER
;
63 pthread_cond_t qemu_vcpu_cond
= PTHREAD_COND_INITIALIZER
;
64 pthread_cond_t qemu_system_cond
= PTHREAD_COND_INITIALIZER
;
65 pthread_cond_t qemu_pause_cond
= PTHREAD_COND_INITIALIZER
;
66 pthread_cond_t qemu_work_cond
= PTHREAD_COND_INITIALIZER
;
67 __thread CPUState
*current_env
;
69 static int qemu_system_ready
;
71 #define SIG_IPI (SIGRTMIN+4)
74 static int io_thread_fd
= -1;
75 static int io_thread_sigfd
= -1;
77 static CPUState
*kvm_debug_cpu_requested
;
79 static uint64_t phys_ram_size
;
81 #ifdef CONFIG_KVM_DEVICE_ASSIGNMENT
82 /* The list of ioperm_data */
83 static QLIST_HEAD(, ioperm_data
) ioperm_head
;
86 //#define DEBUG_MEMREG
88 #define DPRINTF(fmt, args...) \
89 do { fprintf(stderr, "%s:%d " fmt , __func__, __LINE__, ##args); } while (0)
91 #define DPRINTF(fmt, args...) do {} while (0)
94 #define ALIGN(x, y) (((x)+(y)-1) & ~((y)-1))
96 int kvm_abi
= EXPECTED_KVM_API_VERSION
;
99 #ifdef KVM_CAP_SET_GUEST_DEBUG
100 static int kvm_debug(void *opaque
, void *data
,
101 struct kvm_debug_exit_arch
*arch_info
)
103 int handle
= kvm_arch_debug(arch_info
);
104 CPUState
*env
= data
;
107 kvm_debug_cpu_requested
= env
;
114 int kvm_mmio_read(void *opaque
, uint64_t addr
, uint8_t *data
, int len
)
116 cpu_physical_memory_rw(addr
, data
, len
, 0);
120 int kvm_mmio_write(void *opaque
, uint64_t addr
, uint8_t *data
, int len
)
122 cpu_physical_memory_rw(addr
, data
, len
, 1);
126 static int handle_unhandled(uint64_t reason
)
128 fprintf(stderr
, "kvm: unhandled exit %" PRIx64
"\n", reason
);
133 static inline void set_gsi(kvm_context_t kvm
, unsigned int gsi
)
135 uint32_t *bitmap
= kvm
->used_gsi_bitmap
;
137 if (gsi
< kvm
->max_gsi
)
138 bitmap
[gsi
/ 32] |= 1U << (gsi
% 32);
140 DPRINTF("Invalid GSI %d\n");
143 static inline void clear_gsi(kvm_context_t kvm
, unsigned int gsi
)
145 uint32_t *bitmap
= kvm
->used_gsi_bitmap
;
147 if (gsi
< kvm
->max_gsi
)
148 bitmap
[gsi
/ 32] &= ~(1U << (gsi
% 32));
150 DPRINTF("Invalid GSI %d\n");
154 unsigned long phys_addr
;
156 unsigned long userspace_addr
;
161 struct slot_info slots
[KVM_MAX_NUM_MEM_REGIONS
];
163 static void init_slots(void)
167 for (i
= 0; i
< KVM_MAX_NUM_MEM_REGIONS
; ++i
)
171 static int get_free_slot(kvm_context_t kvm
)
176 #if defined(KVM_CAP_SET_TSS_ADDR) && !defined(__s390__)
177 tss_ext
= kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
, KVM_CAP_SET_TSS_ADDR
);
183 * on older kernels where the set tss ioctl is not supprted we must save
184 * slot 0 to hold the extended memory, as the vmx will use the last 3
185 * pages of this slot.
192 for (; i
< KVM_MAX_NUM_MEM_REGIONS
; ++i
)
198 static void register_slot(int slot
, unsigned long phys_addr
,
199 unsigned long len
, unsigned long userspace_addr
,
202 slots
[slot
].phys_addr
= phys_addr
;
203 slots
[slot
].len
= len
;
204 slots
[slot
].userspace_addr
= userspace_addr
;
205 slots
[slot
].flags
= flags
;
208 static void free_slot(int slot
)
211 slots
[slot
].logging_count
= 0;
214 static int get_slot(unsigned long phys_addr
)
218 for (i
= 0; i
< KVM_MAX_NUM_MEM_REGIONS
; ++i
) {
219 if (slots
[i
].len
&& slots
[i
].phys_addr
<= phys_addr
&&
220 (slots
[i
].phys_addr
+ slots
[i
].len
- 1) >= phys_addr
)
226 /* Returns -1 if this slot is not totally contained on any other,
227 * and the number of the slot otherwise */
228 static int get_container_slot(uint64_t phys_addr
, unsigned long size
)
232 for (i
= 0; i
< KVM_MAX_NUM_MEM_REGIONS
; ++i
)
233 if (slots
[i
].len
&& slots
[i
].phys_addr
<= phys_addr
&&
234 (slots
[i
].phys_addr
+ slots
[i
].len
) >= phys_addr
+ size
)
239 int kvm_is_containing_region(kvm_context_t kvm
, unsigned long phys_addr
,
242 int slot
= get_container_slot(phys_addr
, size
);
249 * dirty pages logging control
251 static int kvm_dirty_pages_log_change(kvm_context_t kvm
,
252 unsigned long phys_addr
, unsigned flags
,
256 int slot
= get_slot(phys_addr
);
259 fprintf(stderr
, "BUG: %s: invalid parameters\n", __FUNCTION__
);
263 flags
= (slots
[slot
].flags
& ~mask
) | flags
;
264 if (flags
== slots
[slot
].flags
)
266 slots
[slot
].flags
= flags
;
269 struct kvm_userspace_memory_region mem
= {
271 .memory_size
= slots
[slot
].len
,
272 .guest_phys_addr
= slots
[slot
].phys_addr
,
273 .userspace_addr
= slots
[slot
].userspace_addr
,
274 .flags
= slots
[slot
].flags
,
278 DPRINTF("slot %d start %llx len %llx flags %x\n",
279 mem
.slot
, mem
.guest_phys_addr
, mem
.memory_size
, mem
.flags
);
280 r
= kvm_vm_ioctl(kvm_state
, KVM_SET_USER_MEMORY_REGION
, &mem
);
282 fprintf(stderr
, "%s: %m\n", __FUNCTION__
);
287 static int kvm_dirty_pages_log_change_all(kvm_context_t kvm
,
288 int (*change
)(kvm_context_t kvm
,
294 for (i
= r
= 0; i
< KVM_MAX_NUM_MEM_REGIONS
&& r
== 0; i
++) {
296 r
= change(kvm
, slots
[i
].phys_addr
, slots
[i
].len
);
301 int kvm_dirty_pages_log_enable_slot(kvm_context_t kvm
, uint64_t phys_addr
,
304 int slot
= get_slot(phys_addr
);
306 DPRINTF("start %" PRIx64
" len %" PRIx64
"\n", phys_addr
, len
);
308 fprintf(stderr
, "BUG: %s: invalid parameters\n", __func__
);
312 if (slots
[slot
].logging_count
++)
315 return kvm_dirty_pages_log_change(kvm
, slots
[slot
].phys_addr
,
316 KVM_MEM_LOG_DIRTY_PAGES
,
317 KVM_MEM_LOG_DIRTY_PAGES
);
320 int kvm_dirty_pages_log_disable_slot(kvm_context_t kvm
, uint64_t phys_addr
,
323 int slot
= get_slot(phys_addr
);
326 fprintf(stderr
, "BUG: %s: invalid parameters\n", __func__
);
330 if (--slots
[slot
].logging_count
)
333 return kvm_dirty_pages_log_change(kvm
, slots
[slot
].phys_addr
, 0,
334 KVM_MEM_LOG_DIRTY_PAGES
);
338 * Enable dirty page logging for all memory regions
340 int kvm_dirty_pages_log_enable_all(kvm_context_t kvm
)
342 if (kvm
->dirty_pages_log_all
)
344 kvm
->dirty_pages_log_all
= 1;
345 return kvm_dirty_pages_log_change_all(kvm
, kvm_dirty_pages_log_enable_slot
);
349 * Enable dirty page logging only for memory regions that were created with
350 * dirty logging enabled (disable for all other memory regions).
352 int kvm_dirty_pages_log_reset(kvm_context_t kvm
)
354 if (!kvm
->dirty_pages_log_all
)
356 kvm
->dirty_pages_log_all
= 0;
357 return kvm_dirty_pages_log_change_all(kvm
,
358 kvm_dirty_pages_log_disable_slot
);
362 static int kvm_create_context(void);
364 int kvm_init(int smp_cpus
)
370 fd
= open("/dev/kvm", O_RDWR
);
372 perror("open /dev/kvm");
375 r
= ioctl(fd
, KVM_GET_API_VERSION
, 0);
378 "kvm kernel version too old: "
379 "KVM_GET_API_VERSION ioctl not supported\n");
382 if (r
< EXPECTED_KVM_API_VERSION
) {
383 fprintf(stderr
, "kvm kernel version too old: "
384 "We expect API version %d or newer, but got "
385 "version %d\n", EXPECTED_KVM_API_VERSION
, r
);
388 if (r
> EXPECTED_KVM_API_VERSION
) {
389 fprintf(stderr
, "kvm userspace version too old\n");
393 kvm_page_size
= getpagesize();
394 kvm_state
= qemu_mallocz(sizeof(*kvm_state
));
395 kvm_context
= &kvm_state
->kvm_context
;
398 kvm_state
->vmfd
= -1;
399 kvm_context
->opaque
= cpu_single_env
;
400 kvm_context
->dirty_pages_log_all
= 0;
401 kvm_context
->no_irqchip_creation
= 0;
402 kvm_context
->no_pit_creation
= 0;
404 #ifdef KVM_CAP_SET_GUEST_DEBUG
405 QTAILQ_INIT(&kvm_state
->kvm_sw_breakpoints
);
408 gsi_count
= kvm_get_gsi_count(kvm_context
);
412 /* Round up so we can search ints using ffs */
413 gsi_bits
= ALIGN(gsi_count
, 32);
414 kvm_context
->used_gsi_bitmap
= qemu_mallocz(gsi_bits
/ 8);
415 kvm_context
->max_gsi
= gsi_bits
;
417 /* Mark any over-allocated bits as already in use */
418 for (i
= gsi_count
; i
< gsi_bits
; i
++)
419 set_gsi(kvm_context
, i
);
422 pthread_mutex_lock(&qemu_mutex
);
423 return kvm_create_context();
430 static void kvm_finalize(KVMState
*s
)
433 if (kvm->vcpu_fd[0] != -1)
434 close(kvm->vcpu_fd[0]);
435 if (kvm->vm_fd != -1)
442 void kvm_disable_irqchip_creation(kvm_context_t kvm
)
444 kvm
->no_irqchip_creation
= 1;
447 void kvm_disable_pit_creation(kvm_context_t kvm
)
449 kvm
->no_pit_creation
= 1;
452 kvm_vcpu_context_t
kvm_create_vcpu(CPUState
*env
, int id
)
456 kvm_vcpu_context_t vcpu_ctx
= qemu_malloc(sizeof(struct kvm_vcpu_context
));
457 kvm_context_t kvm
= kvm_context
;
462 r
= kvm_vm_ioctl(kvm_state
, KVM_CREATE_VCPU
, id
);
464 fprintf(stderr
, "kvm_create_vcpu: %m\n");
470 env
->kvm_state
= kvm_state
;
472 mmap_size
= kvm_ioctl(kvm_state
, KVM_GET_VCPU_MMAP_SIZE
, 0);
474 fprintf(stderr
, "get vcpu mmap size: %m\n");
478 mmap(NULL
, mmap_size
, PROT_READ
| PROT_WRITE
, MAP_SHARED
, vcpu_ctx
->fd
,
480 if (vcpu_ctx
->run
== MAP_FAILED
) {
481 fprintf(stderr
, "mmap vcpu area: %m\n");
492 static int kvm_set_boot_vcpu_id(kvm_context_t kvm
, uint32_t id
)
494 #ifdef KVM_CAP_SET_BOOT_CPU_ID
495 int r
= kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
, KVM_CAP_SET_BOOT_CPU_ID
);
497 return kvm_vm_ioctl(kvm_state
, KVM_SET_BOOT_CPU_ID
, id
);
504 int kvm_create_vm(kvm_context_t kvm
)
507 #ifdef KVM_CAP_IRQ_ROUTING
508 kvm
->irq_routes
= qemu_mallocz(sizeof(*kvm
->irq_routes
));
509 kvm
->nr_allocated_irq_routes
= 0;
512 fd
= kvm_ioctl(kvm_state
, KVM_CREATE_VM
, 0);
514 fprintf(stderr
, "kvm_create_vm: %m\n");
517 kvm_state
->vmfd
= fd
;
521 static int kvm_create_default_phys_mem(kvm_context_t kvm
,
522 unsigned long phys_mem_bytes
,
525 #ifdef KVM_CAP_USER_MEMORY
526 int r
= kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
, KVM_CAP_USER_MEMORY
);
530 "Hypervisor too old: KVM_CAP_USER_MEMORY extension not supported\n");
532 #error Hypervisor too old: KVM_CAP_USER_MEMORY extension not supported
537 void kvm_create_irqchip(kvm_context_t kvm
)
541 kvm
->irqchip_in_kernel
= 0;
542 #ifdef KVM_CAP_IRQCHIP
543 if (!kvm
->no_irqchip_creation
) {
544 r
= kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
, KVM_CAP_IRQCHIP
);
545 if (r
> 0) { /* kernel irqchip supported */
546 r
= kvm_vm_ioctl(kvm_state
, KVM_CREATE_IRQCHIP
);
548 kvm
->irqchip_inject_ioctl
= KVM_IRQ_LINE
;
549 #if defined(KVM_CAP_IRQ_INJECT_STATUS) && defined(KVM_IRQ_LINE_STATUS)
550 r
= kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
,
551 KVM_CAP_IRQ_INJECT_STATUS
);
553 kvm
->irqchip_inject_ioctl
= KVM_IRQ_LINE_STATUS
;
555 kvm
->irqchip_in_kernel
= 1;
557 fprintf(stderr
, "Create kernel PIC irqchip failed\n");
561 kvm_state
->irqchip_in_kernel
= kvm
->irqchip_in_kernel
;
564 int kvm_create(kvm_context_t kvm
, unsigned long phys_mem_bytes
, void **vm_mem
)
568 r
= kvm_create_vm(kvm
);
571 r
= kvm_arch_create(kvm
, phys_mem_bytes
, vm_mem
);
575 r
= kvm_create_default_phys_mem(kvm
, phys_mem_bytes
, vm_mem
);
578 kvm_create_irqchip(kvm
);
584 int kvm_register_phys_mem(kvm_context_t kvm
,
585 unsigned long phys_start
, void *userspace_addr
,
586 unsigned long len
, int log
)
589 struct kvm_userspace_memory_region memory
= {
591 .guest_phys_addr
= phys_start
,
592 .userspace_addr
= (unsigned long) (uintptr_t) userspace_addr
,
593 .flags
= log
? KVM_MEM_LOG_DIRTY_PAGES
: 0,
597 memory
.slot
= get_free_slot(kvm
);
599 ("memory: gpa: %llx, size: %llx, uaddr: %llx, slot: %x, flags: %lx\n",
600 memory
.guest_phys_addr
, memory
.memory_size
, memory
.userspace_addr
,
601 memory
.slot
, memory
.flags
);
602 r
= kvm_vm_ioctl(kvm_state
, KVM_SET_USER_MEMORY_REGION
, &memory
);
604 fprintf(stderr
, "create_userspace_phys_mem: %s\n", strerror(-r
));
607 register_slot(memory
.slot
, memory
.guest_phys_addr
, memory
.memory_size
,
608 memory
.userspace_addr
, memory
.flags
);
613 /* destroy/free a whole slot.
614 * phys_start, len and slot are the params passed to kvm_create_phys_mem()
616 void kvm_destroy_phys_mem(kvm_context_t kvm
, unsigned long phys_start
,
621 struct kvm_userspace_memory_region memory
= {
623 .guest_phys_addr
= phys_start
,
628 slot
= get_slot(phys_start
);
630 if ((slot
>= KVM_MAX_NUM_MEM_REGIONS
) || (slot
== -1)) {
631 fprintf(stderr
, "BUG: %s: invalid parameters (slot=%d)\n", __FUNCTION__
,
635 if (phys_start
!= slots
[slot
].phys_addr
) {
637 "WARNING: %s: phys_start is 0x%lx expecting 0x%lx\n",
638 __FUNCTION__
, phys_start
, slots
[slot
].phys_addr
);
639 phys_start
= slots
[slot
].phys_addr
;
643 DPRINTF("slot %d start %llx len %llx flags %x\n",
644 memory
.slot
, memory
.guest_phys_addr
, memory
.memory_size
,
646 r
= kvm_vm_ioctl(kvm_state
, KVM_SET_USER_MEMORY_REGION
, &memory
);
648 fprintf(stderr
, "destroy_userspace_phys_mem: %s", strerror(-r
));
652 free_slot(memory
.slot
);
655 void kvm_unregister_memory_area(kvm_context_t kvm
, uint64_t phys_addr
,
659 int slot
= get_container_slot(phys_addr
, size
);
662 DPRINTF("Unregistering memory region %llx (%lx)\n", phys_addr
, size
);
663 kvm_destroy_phys_mem(kvm
, phys_addr
, size
);
668 static int kvm_get_map(kvm_context_t kvm
, int ioctl_num
, int slot
, void *buf
)
671 struct kvm_dirty_log log
= {
675 log
.dirty_bitmap
= buf
;
677 r
= kvm_vm_ioctl(kvm_state
, ioctl_num
, &log
);
683 int kvm_get_dirty_pages(kvm_context_t kvm
, unsigned long phys_addr
, void *buf
)
687 slot
= get_slot(phys_addr
);
688 return kvm_get_map(kvm
, KVM_GET_DIRTY_LOG
, slot
, buf
);
691 int kvm_get_dirty_pages_range(kvm_context_t kvm
, unsigned long phys_addr
,
692 unsigned long len
, void *opaque
,
693 int (*cb
)(unsigned long start
,
694 unsigned long len
, void *bitmap
,
699 unsigned long end_addr
= phys_addr
+ len
;
702 for (i
= 0; i
< KVM_MAX_NUM_MEM_REGIONS
; ++i
) {
703 if ((slots
[i
].len
&& (uint64_t) slots
[i
].phys_addr
>= phys_addr
)
704 && ((uint64_t) slots
[i
].phys_addr
+ slots
[i
].len
<= end_addr
)) {
705 buf
= qemu_malloc(BITMAP_SIZE(slots
[i
].len
));
706 r
= kvm_get_map(kvm
, KVM_GET_DIRTY_LOG
, i
, buf
);
711 r
= cb(slots
[i
].phys_addr
, slots
[i
].len
, buf
, opaque
);
720 #ifdef KVM_CAP_IRQCHIP
722 int kvm_set_irq_level(kvm_context_t kvm
, int irq
, int level
, int *status
)
724 struct kvm_irq_level event
;
727 if (!kvm
->irqchip_in_kernel
)
731 r
= kvm_vm_ioctl(kvm_state
, kvm
->irqchip_inject_ioctl
, &event
);
733 perror("kvm_set_irq_level");
736 #ifdef KVM_CAP_IRQ_INJECT_STATUS
738 (kvm
->irqchip_inject_ioctl
== KVM_IRQ_LINE
) ? 1 : event
.status
;
747 int kvm_get_irqchip(kvm_context_t kvm
, struct kvm_irqchip
*chip
)
751 if (!kvm
->irqchip_in_kernel
)
753 r
= kvm_vm_ioctl(kvm_state
, KVM_GET_IRQCHIP
, chip
);
755 perror("kvm_get_irqchip\n");
760 int kvm_set_irqchip(kvm_context_t kvm
, struct kvm_irqchip
*chip
)
764 if (!kvm
->irqchip_in_kernel
)
766 r
= kvm_vm_ioctl(kvm_state
, KVM_SET_IRQCHIP
, chip
);
768 perror("kvm_set_irqchip\n");
775 static int handle_io(kvm_vcpu_context_t vcpu
)
777 struct kvm_run
*run
= vcpu
->run
;
778 uint16_t addr
= run
->io
.port
;
780 void *p
= (void *) run
+ run
->io
.data_offset
;
782 for (i
= 0; i
< run
->io
.count
; ++i
) {
783 switch (run
->io
.direction
) {
785 switch (run
->io
.size
) {
787 *(uint8_t *) p
= cpu_inb(addr
);
790 *(uint16_t *) p
= cpu_inw(addr
);
793 *(uint32_t *) p
= cpu_inl(addr
);
796 fprintf(stderr
, "bad I/O size %d\n", run
->io
.size
);
800 case KVM_EXIT_IO_OUT
:
801 switch (run
->io
.size
) {
803 cpu_outb(addr
, *(uint8_t *) p
);
806 cpu_outw(addr
, *(uint16_t *) p
);
809 cpu_outl(addr
, *(uint32_t *) p
);
812 fprintf(stderr
, "bad I/O size %d\n", run
->io
.size
);
817 fprintf(stderr
, "bad I/O direction %d\n", run
->io
.direction
);
827 int handle_debug(kvm_vcpu_context_t vcpu
, void *env
)
829 #ifdef KVM_CAP_SET_GUEST_DEBUG
830 struct kvm_run
*run
= vcpu
->run
;
831 kvm_context_t kvm
= vcpu
->kvm
;
833 return kvm_debug(kvm
->opaque
, env
, &run
->debug
.arch
);
839 int kvm_get_regs(kvm_vcpu_context_t vcpu
, struct kvm_regs
*regs
)
841 return ioctl(vcpu
->fd
, KVM_GET_REGS
, regs
);
844 int kvm_set_regs(kvm_vcpu_context_t vcpu
, struct kvm_regs
*regs
)
846 return ioctl(vcpu
->fd
, KVM_SET_REGS
, regs
);
849 int kvm_get_fpu(kvm_vcpu_context_t vcpu
, struct kvm_fpu
*fpu
)
851 return ioctl(vcpu
->fd
, KVM_GET_FPU
, fpu
);
854 int kvm_set_fpu(kvm_vcpu_context_t vcpu
, struct kvm_fpu
*fpu
)
856 return ioctl(vcpu
->fd
, KVM_SET_FPU
, fpu
);
859 int kvm_get_sregs(kvm_vcpu_context_t vcpu
, struct kvm_sregs
*sregs
)
861 return ioctl(vcpu
->fd
, KVM_GET_SREGS
, sregs
);
864 int kvm_set_sregs(kvm_vcpu_context_t vcpu
, struct kvm_sregs
*sregs
)
866 return ioctl(vcpu
->fd
, KVM_SET_SREGS
, sregs
);
869 #ifdef KVM_CAP_MP_STATE
870 int kvm_get_mpstate(kvm_vcpu_context_t vcpu
, struct kvm_mp_state
*mp_state
)
874 r
= kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
, KVM_CAP_MP_STATE
);
876 return ioctl(vcpu
->fd
, KVM_GET_MP_STATE
, mp_state
);
880 int kvm_set_mpstate(kvm_vcpu_context_t vcpu
, struct kvm_mp_state
*mp_state
)
884 r
= kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
, KVM_CAP_MP_STATE
);
886 return ioctl(vcpu
->fd
, KVM_SET_MP_STATE
, mp_state
);
891 static int handle_mmio(kvm_vcpu_context_t vcpu
)
893 unsigned long addr
= vcpu
->run
->mmio
.phys_addr
;
894 kvm_context_t kvm
= vcpu
->kvm
;
895 struct kvm_run
*kvm_run
= vcpu
->run
;
896 void *data
= kvm_run
->mmio
.data
;
898 /* hack: Red Hat 7.1 generates these weird accesses. */
899 if ((addr
> 0xa0000 - 4 && addr
<= 0xa0000) && kvm_run
->mmio
.len
== 3)
902 if (kvm_run
->mmio
.is_write
)
903 return kvm_mmio_write(kvm
->opaque
, addr
, data
, kvm_run
->mmio
.len
);
905 return kvm_mmio_read(kvm
->opaque
, addr
, data
, kvm_run
->mmio
.len
);
908 int handle_io_window(kvm_context_t kvm
)
913 int handle_halt(kvm_vcpu_context_t vcpu
)
915 return kvm_arch_halt(vcpu
->kvm
->opaque
, vcpu
);
918 int handle_shutdown(kvm_context_t kvm
, CPUState
*env
)
920 /* stop the current vcpu from going back to guest mode */
923 qemu_system_reset_request();
927 static inline void push_nmi(kvm_context_t kvm
)
929 #ifdef KVM_CAP_USER_NMI
930 kvm_arch_push_nmi(kvm
->opaque
);
931 #endif /* KVM_CAP_USER_NMI */
934 void post_kvm_run(kvm_context_t kvm
, CPUState
*env
)
936 pthread_mutex_lock(&qemu_mutex
);
937 kvm_arch_post_kvm_run(kvm
->opaque
, env
);
940 int pre_kvm_run(kvm_context_t kvm
, CPUState
*env
)
942 kvm_arch_pre_kvm_run(kvm
->opaque
, env
);
944 pthread_mutex_unlock(&qemu_mutex
);
948 int kvm_get_interrupt_flag(kvm_vcpu_context_t vcpu
)
950 return vcpu
->run
->if_flag
;
953 int kvm_is_ready_for_interrupt_injection(kvm_vcpu_context_t vcpu
)
955 return vcpu
->run
->ready_for_interrupt_injection
;
958 int kvm_run(kvm_vcpu_context_t vcpu
, void *env
)
962 struct kvm_run
*run
= vcpu
->run
;
963 kvm_context_t kvm
= vcpu
->kvm
;
964 CPUState
*_env
= env
;
968 #if !defined(__s390__)
969 if (!kvm
->irqchip_in_kernel
)
970 run
->request_interrupt_window
= kvm_arch_try_push_interrupts(env
);
973 if (_env
->kvm_cpu_state
.regs_modified
) {
974 kvm_arch_put_registers(_env
);
975 _env
->kvm_cpu_state
.regs_modified
= 0;
978 r
= pre_kvm_run(kvm
, env
);
981 r
= ioctl(fd
, KVM_RUN
, 0);
983 if (r
== -1 && errno
!= EINTR
&& errno
!= EAGAIN
) {
985 post_kvm_run(kvm
, env
);
986 fprintf(stderr
, "kvm_run: %s\n", strerror(-r
));
990 post_kvm_run(kvm
, env
);
992 #if defined(KVM_CAP_COALESCED_MMIO)
993 if (kvm_state
->coalesced_mmio
) {
994 struct kvm_coalesced_mmio_ring
*ring
=
995 (void *) run
+ kvm_state
->coalesced_mmio
* PAGE_SIZE
;
996 while (ring
->first
!= ring
->last
) {
997 kvm_mmio_write(kvm
->opaque
,
998 ring
->coalesced_mmio
[ring
->first
].phys_addr
,
999 &ring
->coalesced_mmio
[ring
->first
].data
[0],
1000 ring
->coalesced_mmio
[ring
->first
].len
);
1002 ring
->first
= (ring
->first
+ 1) % KVM_COALESCED_MMIO_MAX
;
1007 #if !defined(__s390__)
1009 r
= handle_io_window(kvm
);
1014 switch (run
->exit_reason
) {
1015 case KVM_EXIT_UNKNOWN
:
1016 r
= handle_unhandled(run
->hw
.hardware_exit_reason
);
1018 case KVM_EXIT_FAIL_ENTRY
:
1019 r
= handle_unhandled(run
->fail_entry
.hardware_entry_failure_reason
);
1021 case KVM_EXIT_EXCEPTION
:
1022 fprintf(stderr
, "exception %d (%x)\n", run
->ex
.exception
,
1023 run
->ex
.error_code
);
1024 kvm_show_regs(vcpu
);
1025 kvm_show_code(vcpu
);
1029 r
= handle_io(vcpu
);
1031 case KVM_EXIT_DEBUG
:
1032 r
= handle_debug(vcpu
, env
);
1035 r
= handle_mmio(vcpu
);
1038 r
= handle_halt(vcpu
);
1040 case KVM_EXIT_IRQ_WINDOW_OPEN
:
1042 case KVM_EXIT_SHUTDOWN
:
1043 r
= handle_shutdown(kvm
, env
);
1045 #if defined(__s390__)
1046 case KVM_EXIT_S390_SIEIC
:
1047 r
= kvm_s390_handle_intercept(kvm
, vcpu
, run
);
1049 case KVM_EXIT_S390_RESET
:
1050 r
= kvm_s390_handle_reset(kvm
, vcpu
, run
);
1053 case KVM_EXIT_INTERNAL_ERROR
:
1054 fprintf(stderr
, "KVM internal error. Suberror: %d\n",
1055 run
->internal
.suberror
);
1056 kvm_show_regs(vcpu
);
1057 if (run
->internal
.suberror
== KVM_INTERNAL_ERROR_EMULATION
)
1058 fprintf(stderr
, "emulation failure, check dmesg for details\n");
1062 if (kvm_arch_run(vcpu
)) {
1063 fprintf(stderr
, "unhandled vm exit: 0x%x\n", run
->exit_reason
);
1064 kvm_show_regs(vcpu
);
1076 int kvm_inject_irq(kvm_vcpu_context_t vcpu
, unsigned irq
)
1078 struct kvm_interrupt intr
;
1081 return ioctl(vcpu
->fd
, KVM_INTERRUPT
, &intr
);
1084 #ifdef KVM_CAP_SET_GUEST_DEBUG
1085 int kvm_set_guest_debug(kvm_vcpu_context_t vcpu
, struct kvm_guest_debug
*dbg
)
1087 return ioctl(vcpu
->fd
, KVM_SET_GUEST_DEBUG
, dbg
);
1091 int kvm_set_signal_mask(kvm_vcpu_context_t vcpu
, const sigset_t
*sigset
)
1093 struct kvm_signal_mask
*sigmask
;
1097 r
= ioctl(vcpu
->fd
, KVM_SET_SIGNAL_MASK
, NULL
);
1102 sigmask
= qemu_malloc(sizeof(*sigmask
) + sizeof(*sigset
));
1105 memcpy(sigmask
->sigset
, sigset
, sizeof(*sigset
));
1106 r
= ioctl(vcpu
->fd
, KVM_SET_SIGNAL_MASK
, sigmask
);
1113 int kvm_pit_in_kernel(kvm_context_t kvm
)
1115 return kvm
->pit_in_kernel
;
1118 int kvm_inject_nmi(kvm_vcpu_context_t vcpu
)
1120 #ifdef KVM_CAP_USER_NMI
1121 return ioctl(vcpu
->fd
, KVM_NMI
);
1127 int kvm_init_coalesced_mmio(kvm_context_t kvm
)
1130 kvm_state
->coalesced_mmio
= 0;
1131 #ifdef KVM_CAP_COALESCED_MMIO
1132 r
= kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
, KVM_CAP_COALESCED_MMIO
);
1134 kvm_state
->coalesced_mmio
= r
;
1141 #ifdef KVM_CAP_DEVICE_ASSIGNMENT
1142 int kvm_assign_pci_device(kvm_context_t kvm
,
1143 struct kvm_assigned_pci_dev
*assigned_dev
)
1145 return kvm_vm_ioctl(kvm_state
, KVM_ASSIGN_PCI_DEVICE
, assigned_dev
);
1148 static int kvm_old_assign_irq(kvm_context_t kvm
,
1149 struct kvm_assigned_irq
*assigned_irq
)
1151 return kvm_vm_ioctl(kvm_state
, KVM_ASSIGN_IRQ
, assigned_irq
);
1154 #ifdef KVM_CAP_ASSIGN_DEV_IRQ
1155 int kvm_assign_irq(kvm_context_t kvm
, struct kvm_assigned_irq
*assigned_irq
)
1159 ret
= kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
, KVM_CAP_ASSIGN_DEV_IRQ
);
1161 return kvm_vm_ioctl(kvm_state
, KVM_ASSIGN_DEV_IRQ
, assigned_irq
);
1164 return kvm_old_assign_irq(kvm
, assigned_irq
);
1167 int kvm_deassign_irq(kvm_context_t kvm
, struct kvm_assigned_irq
*assigned_irq
)
1169 return kvm_vm_ioctl(kvm_state
, KVM_DEASSIGN_DEV_IRQ
, assigned_irq
);
1172 int kvm_assign_irq(kvm_context_t kvm
, struct kvm_assigned_irq
*assigned_irq
)
1174 return kvm_old_assign_irq(kvm
, assigned_irq
);
1179 #ifdef KVM_CAP_DEVICE_DEASSIGNMENT
1180 int kvm_deassign_pci_device(kvm_context_t kvm
,
1181 struct kvm_assigned_pci_dev
*assigned_dev
)
1183 return kvm_vm_ioctl(kvm_state
, KVM_DEASSIGN_PCI_DEVICE
, assigned_dev
);
1187 int kvm_destroy_memory_region_works(kvm_context_t kvm
)
1191 #ifdef KVM_CAP_DESTROY_MEMORY_REGION_WORKS
1193 kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
,
1194 KVM_CAP_DESTROY_MEMORY_REGION_WORKS
);
1201 int kvm_reinject_control(kvm_context_t kvm
, int pit_reinject
)
1203 #ifdef KVM_CAP_REINJECT_CONTROL
1205 struct kvm_reinject_control control
;
1207 control
.pit_reinject
= pit_reinject
;
1209 r
= kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
, KVM_CAP_REINJECT_CONTROL
);
1211 return kvm_vm_ioctl(kvm_state
, KVM_REINJECT_CONTROL
, &control
);
1217 int kvm_has_gsi_routing(kvm_context_t kvm
)
1221 #ifdef KVM_CAP_IRQ_ROUTING
1222 r
= kvm_check_extension(kvm_state
, KVM_CAP_IRQ_ROUTING
);
1227 int kvm_get_gsi_count(kvm_context_t kvm
)
1229 #ifdef KVM_CAP_IRQ_ROUTING
1230 return kvm_check_extension(kvm_state
, KVM_CAP_IRQ_ROUTING
);
1236 int kvm_clear_gsi_routes(kvm_context_t kvm
)
1238 #ifdef KVM_CAP_IRQ_ROUTING
1239 kvm
->irq_routes
->nr
= 0;
1246 int kvm_add_routing_entry(kvm_context_t kvm
,
1247 struct kvm_irq_routing_entry
*entry
)
1249 #ifdef KVM_CAP_IRQ_ROUTING
1250 struct kvm_irq_routing
*z
;
1251 struct kvm_irq_routing_entry
*new;
1254 if (kvm
->irq_routes
->nr
== kvm
->nr_allocated_irq_routes
) {
1255 n
= kvm
->nr_allocated_irq_routes
* 2;
1258 size
= sizeof(struct kvm_irq_routing
);
1259 size
+= n
* sizeof(*new);
1260 z
= realloc(kvm
->irq_routes
, size
);
1263 kvm
->nr_allocated_irq_routes
= n
;
1264 kvm
->irq_routes
= z
;
1266 n
= kvm
->irq_routes
->nr
++;
1267 new = &kvm
->irq_routes
->entries
[n
];
1268 memset(new, 0, sizeof(*new));
1269 new->gsi
= entry
->gsi
;
1270 new->type
= entry
->type
;
1271 new->flags
= entry
->flags
;
1274 set_gsi(kvm
, entry
->gsi
);
1282 int kvm_add_irq_route(kvm_context_t kvm
, int gsi
, int irqchip
, int pin
)
1284 #ifdef KVM_CAP_IRQ_ROUTING
1285 struct kvm_irq_routing_entry e
;
1288 e
.type
= KVM_IRQ_ROUTING_IRQCHIP
;
1290 e
.u
.irqchip
.irqchip
= irqchip
;
1291 e
.u
.irqchip
.pin
= pin
;
1292 return kvm_add_routing_entry(kvm
, &e
);
1298 int kvm_del_routing_entry(kvm_context_t kvm
,
1299 struct kvm_irq_routing_entry
*entry
)
1301 #ifdef KVM_CAP_IRQ_ROUTING
1302 struct kvm_irq_routing_entry
*e
, *p
;
1303 int i
, gsi
, found
= 0;
1307 for (i
= 0; i
< kvm
->irq_routes
->nr
; ++i
) {
1308 e
= &kvm
->irq_routes
->entries
[i
];
1309 if (e
->type
== entry
->type
&& e
->gsi
== gsi
) {
1311 case KVM_IRQ_ROUTING_IRQCHIP
:{
1312 if (e
->u
.irqchip
.irqchip
==
1313 entry
->u
.irqchip
.irqchip
1314 && e
->u
.irqchip
.pin
== entry
->u
.irqchip
.pin
) {
1315 p
= &kvm
->irq_routes
->entries
[--kvm
->irq_routes
->nr
];
1321 case KVM_IRQ_ROUTING_MSI
:{
1322 if (e
->u
.msi
.address_lo
==
1323 entry
->u
.msi
.address_lo
1324 && e
->u
.msi
.address_hi
==
1325 entry
->u
.msi
.address_hi
1326 && e
->u
.msi
.data
== entry
->u
.msi
.data
) {
1327 p
= &kvm
->irq_routes
->entries
[--kvm
->irq_routes
->nr
];
1337 /* If there are no other users of this GSI
1338 * mark it available in the bitmap */
1339 for (i
= 0; i
< kvm
->irq_routes
->nr
; i
++) {
1340 e
= &kvm
->irq_routes
->entries
[i
];
1344 if (i
== kvm
->irq_routes
->nr
)
1345 clear_gsi(kvm
, gsi
);
1357 int kvm_update_routing_entry(kvm_context_t kvm
,
1358 struct kvm_irq_routing_entry
*entry
,
1359 struct kvm_irq_routing_entry
*newentry
)
1361 #ifdef KVM_CAP_IRQ_ROUTING
1362 struct kvm_irq_routing_entry
*e
;
1365 if (entry
->gsi
!= newentry
->gsi
|| entry
->type
!= newentry
->type
) {
1369 for (i
= 0; i
< kvm
->irq_routes
->nr
; ++i
) {
1370 e
= &kvm
->irq_routes
->entries
[i
];
1371 if (e
->type
!= entry
->type
|| e
->gsi
!= entry
->gsi
) {
1375 case KVM_IRQ_ROUTING_IRQCHIP
:
1376 if (e
->u
.irqchip
.irqchip
== entry
->u
.irqchip
.irqchip
&&
1377 e
->u
.irqchip
.pin
== entry
->u
.irqchip
.pin
) {
1378 memcpy(&e
->u
.irqchip
, &newentry
->u
.irqchip
,
1379 sizeof e
->u
.irqchip
);
1383 case KVM_IRQ_ROUTING_MSI
:
1384 if (e
->u
.msi
.address_lo
== entry
->u
.msi
.address_lo
&&
1385 e
->u
.msi
.address_hi
== entry
->u
.msi
.address_hi
&&
1386 e
->u
.msi
.data
== entry
->u
.msi
.data
) {
1387 memcpy(&e
->u
.msi
, &newentry
->u
.msi
, sizeof e
->u
.msi
);
1401 int kvm_del_irq_route(kvm_context_t kvm
, int gsi
, int irqchip
, int pin
)
1403 #ifdef KVM_CAP_IRQ_ROUTING
1404 struct kvm_irq_routing_entry e
;
1407 e
.type
= KVM_IRQ_ROUTING_IRQCHIP
;
1409 e
.u
.irqchip
.irqchip
= irqchip
;
1410 e
.u
.irqchip
.pin
= pin
;
1411 return kvm_del_routing_entry(kvm
, &e
);
1417 int kvm_commit_irq_routes(kvm_context_t kvm
)
1419 #ifdef KVM_CAP_IRQ_ROUTING
1420 kvm
->irq_routes
->flags
= 0;
1421 return kvm_vm_ioctl(kvm_state
, KVM_SET_GSI_ROUTING
, kvm
->irq_routes
);
1427 int kvm_get_irq_route_gsi(kvm_context_t kvm
)
1430 uint32_t *buf
= kvm
->used_gsi_bitmap
;
1432 /* Return the lowest unused GSI in the bitmap */
1433 for (i
= 0; i
< kvm
->max_gsi
/ 32; i
++) {
1438 return bit
- 1 + i
* 32;
1444 #ifdef KVM_CAP_DEVICE_MSIX
1445 int kvm_assign_set_msix_nr(kvm_context_t kvm
,
1446 struct kvm_assigned_msix_nr
*msix_nr
)
1448 return kvm_vm_ioctl(kvm_state
, KVM_ASSIGN_SET_MSIX_NR
, msix_nr
);
1451 int kvm_assign_set_msix_entry(kvm_context_t kvm
,
1452 struct kvm_assigned_msix_entry
*entry
)
1454 return kvm_vm_ioctl(kvm_state
, KVM_ASSIGN_SET_MSIX_ENTRY
, entry
);
1458 #if defined(KVM_CAP_IRQFD) && defined(CONFIG_EVENTFD)
1460 #include <sys/eventfd.h>
1462 static int _kvm_irqfd(kvm_context_t kvm
, int fd
, int gsi
, int flags
)
1464 struct kvm_irqfd data
= {
1470 return kvm_vm_ioctl(kvm_state
, KVM_IRQFD
, &data
);
1473 int kvm_irqfd(kvm_context_t kvm
, int gsi
, int flags
)
1478 if (!kvm_check_extension(kvm_state
, KVM_CAP_IRQFD
))
1485 r
= _kvm_irqfd(kvm
, fd
, gsi
, 0);
1494 #else /* KVM_CAP_IRQFD */
1496 int kvm_irqfd(kvm_context_t kvm
, int gsi
, int flags
)
1501 #endif /* KVM_CAP_IRQFD */
1502 static inline unsigned long kvm_get_thread_id(void)
1504 return syscall(SYS_gettid
);
1507 static void qemu_cond_wait(pthread_cond_t
*cond
)
1509 CPUState
*env
= cpu_single_env
;
1511 pthread_cond_wait(cond
, &qemu_mutex
);
1512 cpu_single_env
= env
;
1515 static void sig_ipi_handler(int n
)
1519 static void hardware_memory_error(void)
1521 fprintf(stderr
, "Hardware memory error!\n");
1525 static void sigbus_reraise(void)
1528 struct sigaction action
;
1530 memset(&action
, 0, sizeof(action
));
1531 action
.sa_handler
= SIG_DFL
;
1532 if (!sigaction(SIGBUS
, &action
, NULL
)) {
1535 sigaddset(&set
, SIGBUS
);
1536 sigprocmask(SIG_UNBLOCK
, &set
, NULL
);
1538 perror("Failed to re-raise SIGBUS!\n");
1542 static void sigbus_handler(int n
, struct qemu_signalfd_siginfo
*siginfo
,
1545 #if defined(KVM_CAP_MCE) && defined(TARGET_I386)
1546 if (first_cpu
->mcg_cap
&& siginfo
->ssi_addr
1547 && siginfo
->ssi_code
== BUS_MCEERR_AO
) {
1549 unsigned long paddr
;
1552 /* Hope we are lucky for AO MCE */
1553 if (do_qemu_ram_addr_from_host((void *)(intptr_t)siginfo
->ssi_addr
,
1555 fprintf(stderr
, "Hardware memory error for memory used by "
1556 "QEMU itself instead of guest system!: %llx\n",
1557 (unsigned long long)siginfo
->ssi_addr
);
1560 status
= MCI_STATUS_VAL
| MCI_STATUS_UC
| MCI_STATUS_EN
1561 | MCI_STATUS_MISCV
| MCI_STATUS_ADDRV
| MCI_STATUS_S
1563 kvm_inject_x86_mce(first_cpu
, 9, status
,
1564 MCG_STATUS_MCIP
| MCG_STATUS_RIPV
, paddr
,
1565 (MCM_ADDR_PHYS
<< 6) | 0xc, 1);
1566 for (cenv
= first_cpu
->next_cpu
; cenv
!= NULL
; cenv
= cenv
->next_cpu
)
1567 kvm_inject_x86_mce(cenv
, 1, MCI_STATUS_VAL
| MCI_STATUS_UC
,
1568 MCG_STATUS_MCIP
| MCG_STATUS_RIPV
, 0, 0, 1);
1572 if (siginfo
->ssi_code
== BUS_MCEERR_AO
)
1574 else if (siginfo
->ssi_code
== BUS_MCEERR_AR
)
1575 hardware_memory_error();
1581 static void on_vcpu(CPUState
*env
, void (*func
)(void *data
), void *data
)
1583 struct qemu_work_item wi
;
1585 if (env
== current_env
) {
1592 if (!env
->kvm_cpu_state
.queued_work_first
)
1593 env
->kvm_cpu_state
.queued_work_first
= &wi
;
1595 env
->kvm_cpu_state
.queued_work_last
->next
= &wi
;
1596 env
->kvm_cpu_state
.queued_work_last
= &wi
;
1600 pthread_kill(env
->kvm_cpu_state
.thread
, SIG_IPI
);
1602 qemu_cond_wait(&qemu_work_cond
);
1605 void kvm_arch_get_registers(CPUState
*env
)
1607 kvm_arch_save_regs(env
);
1608 kvm_arch_save_mpstate(env
);
1609 #ifdef KVM_CAP_MP_STATE
1610 if (kvm_irqchip_in_kernel())
1611 env
->halted
= (env
->mp_state
== KVM_MP_STATE_HALTED
);
1615 static void do_kvm_cpu_synchronize_state(void *_env
)
1617 CPUState
*env
= _env
;
1618 if (!env
->kvm_cpu_state
.regs_modified
) {
1619 kvm_arch_get_registers(env
);
1620 env
->kvm_cpu_state
.regs_modified
= 1;
1624 void kvm_cpu_synchronize_state(CPUState
*env
)
1626 if (!env
->kvm_cpu_state
.regs_modified
)
1627 on_vcpu(env
, do_kvm_cpu_synchronize_state
, env
);
1630 static void inject_interrupt(void *data
)
1632 cpu_interrupt(current_env
, (long) data
);
1635 void kvm_inject_interrupt(CPUState
*env
, int mask
)
1637 on_vcpu(env
, inject_interrupt
, (void *) (long) mask
);
1640 void kvm_update_interrupt_request(CPUState
*env
)
1645 if (!current_env
|| !current_env
->created
)
1648 * Testing for created here is really redundant
1650 if (current_env
&& current_env
->created
&&
1651 env
!= current_env
&& !env
->kvm_cpu_state
.signalled
)
1655 env
->kvm_cpu_state
.signalled
= 1;
1656 if (env
->kvm_cpu_state
.thread
)
1657 pthread_kill(env
->kvm_cpu_state
.thread
, SIG_IPI
);
1662 static void kvm_do_load_registers(void *_env
)
1664 CPUState
*env
= _env
;
1666 kvm_arch_load_regs(env
);
1669 void kvm_load_registers(CPUState
*env
)
1671 if (kvm_enabled() && qemu_system_ready
)
1672 on_vcpu(env
, kvm_do_load_registers
, env
);
1675 static void kvm_do_save_registers(void *_env
)
1677 CPUState
*env
= _env
;
1679 kvm_arch_save_regs(env
);
1682 void kvm_save_registers(CPUState
*env
)
1685 on_vcpu(env
, kvm_do_save_registers
, env
);
1688 static void kvm_do_load_mpstate(void *_env
)
1690 CPUState
*env
= _env
;
1692 kvm_arch_load_mpstate(env
);
1695 void kvm_load_mpstate(CPUState
*env
)
1697 if (kvm_enabled() && qemu_system_ready
)
1698 on_vcpu(env
, kvm_do_load_mpstate
, env
);
1701 static void kvm_do_save_mpstate(void *_env
)
1703 CPUState
*env
= _env
;
1705 kvm_arch_save_mpstate(env
);
1708 void kvm_save_mpstate(CPUState
*env
)
1711 on_vcpu(env
, kvm_do_save_mpstate
, env
);
1714 int kvm_cpu_exec(CPUState
*env
)
1718 r
= kvm_run(env
->kvm_cpu_state
.vcpu_ctx
, env
);
1720 printf("kvm_run returned %d\n", r
);
1727 static int is_cpu_stopped(CPUState
*env
)
1729 return !vm_running
|| env
->stopped
;
1732 static void flush_queued_work(CPUState
*env
)
1734 struct qemu_work_item
*wi
;
1736 if (!env
->kvm_cpu_state
.queued_work_first
)
1739 while ((wi
= env
->kvm_cpu_state
.queued_work_first
)) {
1740 env
->kvm_cpu_state
.queued_work_first
= wi
->next
;
1744 env
->kvm_cpu_state
.queued_work_last
= NULL
;
1745 pthread_cond_broadcast(&qemu_work_cond
);
1748 static void kvm_on_sigbus(CPUState
*env
, siginfo_t
*siginfo
)
1750 #if defined(KVM_CAP_MCE) && defined(TARGET_I386)
1751 struct kvm_x86_mce mce
= {
1754 unsigned long paddr
;
1757 if (env
->mcg_cap
&& siginfo
->si_addr
1758 && (siginfo
->si_code
== BUS_MCEERR_AR
1759 || siginfo
->si_code
== BUS_MCEERR_AO
)) {
1760 if (siginfo
->si_code
== BUS_MCEERR_AR
) {
1761 /* Fake an Intel architectural Data Load SRAR UCR */
1762 mce
.status
= MCI_STATUS_VAL
| MCI_STATUS_UC
| MCI_STATUS_EN
1763 | MCI_STATUS_MISCV
| MCI_STATUS_ADDRV
| MCI_STATUS_S
1764 | MCI_STATUS_AR
| 0x134;
1765 mce
.misc
= (MCM_ADDR_PHYS
<< 6) | 0xc;
1766 mce
.mcg_status
= MCG_STATUS_MCIP
| MCG_STATUS_EIPV
;
1768 /* Fake an Intel architectural Memory scrubbing UCR */
1769 mce
.status
= MCI_STATUS_VAL
| MCI_STATUS_UC
| MCI_STATUS_EN
1770 | MCI_STATUS_MISCV
| MCI_STATUS_ADDRV
| MCI_STATUS_S
1772 mce
.misc
= (MCM_ADDR_PHYS
<< 6) | 0xc;
1773 mce
.mcg_status
= MCG_STATUS_MCIP
| MCG_STATUS_RIPV
;
1775 if (do_qemu_ram_addr_from_host((void *)siginfo
->si_addr
, &paddr
)) {
1776 fprintf(stderr
, "Hardware memory error for memory used by "
1777 "QEMU itself instaed of guest system!\n");
1778 /* Hope we are lucky for AO MCE */
1779 if (siginfo
->si_code
== BUS_MCEERR_AO
)
1782 hardware_memory_error();
1785 r
= kvm_set_mce(env
->kvm_cpu_state
.vcpu_ctx
, &mce
);
1787 fprintf(stderr
, "kvm_set_mce: %s\n", strerror(errno
));
1793 if (siginfo
->si_code
== BUS_MCEERR_AO
)
1795 else if (siginfo
->si_code
== BUS_MCEERR_AR
)
1796 hardware_memory_error();
1802 static void kvm_main_loop_wait(CPUState
*env
, int timeout
)
1810 ts
.tv_sec
= timeout
/ 1000;
1811 ts
.tv_nsec
= (timeout
% 1000) * 1000000;
1812 sigemptyset(&waitset
);
1813 sigaddset(&waitset
, SIG_IPI
);
1814 sigaddset(&waitset
, SIGBUS
);
1817 pthread_mutex_unlock(&qemu_mutex
);
1819 r
= sigtimedwait(&waitset
, &siginfo
, &ts
);
1822 pthread_mutex_lock(&qemu_mutex
);
1824 if (r
== -1 && !(e
== EAGAIN
|| e
== EINTR
)) {
1825 printf("sigtimedwait: %s\n", strerror(e
));
1831 kvm_on_sigbus(env
, &siginfo
);
1837 r
= sigpending(&chkset
);
1839 printf("sigpending: %s\n", strerror(e
));
1842 } while (sigismember(&chkset
, SIG_IPI
) || sigismember(&chkset
, SIGBUS
));
1844 cpu_single_env
= env
;
1845 flush_queued_work(env
);
1850 pthread_cond_signal(&qemu_pause_cond
);
1853 env
->kvm_cpu_state
.signalled
= 0;
1856 static int all_threads_paused(void)
1858 CPUState
*penv
= first_cpu
;
1863 penv
= (CPUState
*) penv
->next_cpu
;
1869 static void pause_all_threads(void)
1871 CPUState
*penv
= first_cpu
;
1874 if (penv
!= cpu_single_env
) {
1876 pthread_kill(penv
->kvm_cpu_state
.thread
, SIG_IPI
);
1882 penv
= (CPUState
*) penv
->next_cpu
;
1885 while (!all_threads_paused())
1886 qemu_cond_wait(&qemu_pause_cond
);
1889 static void resume_all_threads(void)
1891 CPUState
*penv
= first_cpu
;
1893 assert(!cpu_single_env
);
1898 pthread_kill(penv
->kvm_cpu_state
.thread
, SIG_IPI
);
1899 penv
= (CPUState
*) penv
->next_cpu
;
1903 static void kvm_vm_state_change_handler(void *context
, int running
, int reason
)
1906 resume_all_threads();
1908 pause_all_threads();
1911 static void setup_kernel_sigmask(CPUState
*env
)
1916 sigaddset(&set
, SIGUSR2
);
1917 sigaddset(&set
, SIGIO
);
1918 sigaddset(&set
, SIGALRM
);
1919 sigprocmask(SIG_BLOCK
, &set
, NULL
);
1921 sigprocmask(SIG_BLOCK
, NULL
, &set
);
1922 sigdelset(&set
, SIG_IPI
);
1923 sigdelset(&set
, SIGBUS
);
1925 kvm_set_signal_mask(env
->kvm_cpu_state
.vcpu_ctx
, &set
);
1928 static void qemu_kvm_system_reset(void)
1930 CPUState
*penv
= first_cpu
;
1932 pause_all_threads();
1934 qemu_system_reset();
1937 kvm_arch_cpu_reset(penv
);
1938 penv
= (CPUState
*) penv
->next_cpu
;
1941 resume_all_threads();
1944 static void process_irqchip_events(CPUState
*env
)
1946 kvm_arch_process_irqchip_events(env
);
1947 if (kvm_arch_has_work(env
))
1951 static int kvm_main_loop_cpu(CPUState
*env
)
1953 setup_kernel_sigmask(env
);
1955 pthread_mutex_lock(&qemu_mutex
);
1957 kvm_arch_init_vcpu(env
);
1959 kvm_tpr_vcpu_start(env
);
1962 cpu_single_env
= env
;
1963 kvm_arch_load_regs(env
);
1966 int run_cpu
= !is_cpu_stopped(env
);
1967 if (run_cpu
&& !kvm_irqchip_in_kernel()) {
1968 process_irqchip_events(env
);
1969 run_cpu
= !env
->halted
;
1972 kvm_main_loop_wait(env
, 0);
1975 kvm_main_loop_wait(env
, 1000);
1978 pthread_mutex_unlock(&qemu_mutex
);
1982 static void *ap_main_loop(void *_env
)
1984 CPUState
*env
= _env
;
1986 #ifdef CONFIG_KVM_DEVICE_ASSIGNMENT
1987 struct ioperm_data
*data
= NULL
;
1991 env
->thread_id
= kvm_get_thread_id();
1992 sigfillset(&signals
);
1993 sigprocmask(SIG_BLOCK
, &signals
, NULL
);
1994 env
->kvm_cpu_state
.vcpu_ctx
= kvm_create_vcpu(env
, env
->cpu_index
);
1996 #ifdef CONFIG_KVM_DEVICE_ASSIGNMENT
1997 /* do ioperm for io ports of assigned devices */
1998 QLIST_FOREACH(data
, &ioperm_head
, entries
)
1999 on_vcpu(env
, kvm_arch_do_ioperm
, data
);
2002 /* signal VCPU creation */
2003 pthread_mutex_lock(&qemu_mutex
);
2004 current_env
->created
= 1;
2005 pthread_cond_signal(&qemu_vcpu_cond
);
2007 /* and wait for machine initialization */
2008 while (!qemu_system_ready
)
2009 qemu_cond_wait(&qemu_system_cond
);
2010 pthread_mutex_unlock(&qemu_mutex
);
2012 kvm_main_loop_cpu(env
);
2016 void kvm_init_vcpu(CPUState
*env
)
2018 pthread_create(&env
->kvm_cpu_state
.thread
, NULL
, ap_main_loop
, env
);
2020 while (env
->created
== 0)
2021 qemu_cond_wait(&qemu_vcpu_cond
);
2024 int kvm_vcpu_inited(CPUState
*env
)
2026 return env
->created
;
2030 void kvm_hpet_disable_kpit(void)
2032 struct kvm_pit_state2 ps2
;
2034 kvm_get_pit2(kvm_context
, &ps2
);
2035 ps2
.flags
|= KVM_PIT_FLAGS_HPET_LEGACY
;
2036 kvm_set_pit2(kvm_context
, &ps2
);
2039 void kvm_hpet_enable_kpit(void)
2041 struct kvm_pit_state2 ps2
;
2043 kvm_get_pit2(kvm_context
, &ps2
);
2044 ps2
.flags
&= ~KVM_PIT_FLAGS_HPET_LEGACY
;
2045 kvm_set_pit2(kvm_context
, &ps2
);
2049 int kvm_init_ap(void)
2051 struct sigaction action
;
2054 kvm_tpr_opt_setup();
2056 qemu_add_vm_change_state_handler(kvm_vm_state_change_handler
, NULL
);
2058 signal(SIG_IPI
, sig_ipi_handler
);
2060 memset(&action
, 0, sizeof(action
));
2061 action
.sa_flags
= SA_SIGINFO
;
2062 action
.sa_sigaction
= (void (*)(int, siginfo_t
*, void*))sigbus_handler
;
2063 sigaction(SIGBUS
, &action
, NULL
);
2064 prctl(PR_MCE_KILL
, 1, 1);
2068 void qemu_kvm_notify_work(void)
2074 if (io_thread_fd
== -1)
2077 memcpy(buffer
, &value
, sizeof(value
));
2079 while (offset
< 8) {
2082 len
= write(io_thread_fd
, buffer
+ offset
, 8 - offset
);
2083 if (len
== -1 && errno
== EINTR
)
2086 /* In case we have a pipe, there is not reason to insist writing
2089 if (len
== -1 && errno
== EAGAIN
)
2099 /* If we have signalfd, we mask out the signals we want to handle and then
2100 * use signalfd to listen for them. We rely on whatever the current signal
2101 * handler is to dispatch the signals when we receive them.
2104 static void sigfd_handler(void *opaque
)
2106 int fd
= (unsigned long) opaque
;
2107 struct qemu_signalfd_siginfo info
;
2108 struct sigaction action
;
2113 len
= read(fd
, &info
, sizeof(info
));
2114 } while (len
== -1 && errno
== EINTR
);
2116 if (len
== -1 && errno
== EAGAIN
)
2119 if (len
!= sizeof(info
)) {
2120 printf("read from sigfd returned %zd: %m\n", len
);
2124 sigaction(info
.ssi_signo
, NULL
, &action
);
2125 if ((action
.sa_flags
& SA_SIGINFO
) && action
.sa_sigaction
)
2126 action
.sa_sigaction(info
.ssi_signo
,
2127 (siginfo_t
*)&info
, NULL
);
2128 else if (action
.sa_handler
)
2129 action
.sa_handler(info
.ssi_signo
);
2134 /* Used to break IO thread out of select */
2135 static void io_thread_wakeup(void *opaque
)
2137 int fd
= (unsigned long) opaque
;
2140 /* Drain the pipe/(eventfd) */
2144 len
= read(fd
, buffer
, sizeof(buffer
));
2145 if (len
== -1 && errno
== EINTR
)
2153 int kvm_main_loop(void)
2159 io_thread
= pthread_self();
2160 qemu_system_ready
= 1;
2162 if (qemu_eventfd(fds
) == -1) {
2163 fprintf(stderr
, "failed to create eventfd\n");
2167 fcntl(fds
[0], F_SETFL
, O_NONBLOCK
);
2168 fcntl(fds
[1], F_SETFL
, O_NONBLOCK
);
2170 qemu_set_fd_handler2(fds
[0], NULL
, io_thread_wakeup
, NULL
,
2171 (void *)(unsigned long) fds
[0]);
2173 io_thread_fd
= fds
[1];
2176 sigaddset(&mask
, SIGIO
);
2177 sigaddset(&mask
, SIGALRM
);
2178 sigaddset(&mask
, SIGBUS
);
2179 sigprocmask(SIG_BLOCK
, &mask
, NULL
);
2181 sigfd
= qemu_signalfd(&mask
);
2183 fprintf(stderr
, "failed to create signalfd\n");
2187 fcntl(sigfd
, F_SETFL
, O_NONBLOCK
);
2189 qemu_set_fd_handler2(sigfd
, NULL
, sigfd_handler
, NULL
,
2190 (void *)(unsigned long) sigfd
);
2192 pthread_cond_broadcast(&qemu_system_cond
);
2194 io_thread_sigfd
= sigfd
;
2195 cpu_single_env
= NULL
;
2198 main_loop_wait(1000);
2199 if (qemu_shutdown_requested()) {
2200 if (qemu_no_shutdown()) {
2204 } else if (qemu_powerdown_requested())
2205 qemu_irq_raise(qemu_system_powerdown
);
2206 else if (qemu_reset_requested())
2207 qemu_kvm_system_reset();
2208 else if (kvm_debug_cpu_requested
) {
2209 gdb_set_stop_cpu(kvm_debug_cpu_requested
);
2210 vm_stop(EXCP_DEBUG
);
2211 kvm_debug_cpu_requested
= NULL
;
2215 pause_all_threads();
2216 pthread_mutex_unlock(&qemu_mutex
);
2222 static int destroy_region_works
= 0;
2226 #if !defined(TARGET_I386)
2227 int kvm_arch_init_irq_routing(void)
2235 static int kvm_create_context(void)
2240 kvm_disable_irqchip_creation(kvm_context
);
2243 kvm_disable_pit_creation(kvm_context
);
2245 if (kvm_create(kvm_context
, 0, NULL
) < 0) {
2246 kvm_finalize(kvm_state
);
2249 r
= kvm_arch_qemu_create_context();
2251 kvm_finalize(kvm_state
);
2252 if (kvm_pit
&& !kvm_pit_reinject
) {
2253 if (kvm_reinject_control(kvm_context
, 0)) {
2254 fprintf(stderr
, "failure to disable in-kernel PIT reinjection\n");
2259 destroy_region_works
= kvm_destroy_memory_region_works(kvm_context
);
2262 r
= kvm_arch_init_irq_routing();
2269 if (!qemu_kvm_has_gsi_routing()) {
2272 /* if kernel can't do irq routing, interrupt source
2273 * override 0->2 can not be set up as required by hpet,
2277 } else if (!qemu_kvm_has_pit_state2()) {
2289 static int must_use_aliases_source(target_phys_addr_t addr
)
2291 if (destroy_region_works
)
2293 if (addr
== 0xa0000 || addr
== 0xa8000)
2298 static int must_use_aliases_target(target_phys_addr_t addr
)
2300 if (destroy_region_works
)
2302 if (addr
>= 0xe0000000 && addr
< 0x100000000ull
)
2307 static struct mapping
{
2308 target_phys_addr_t phys
;
2312 static int nr_mappings
;
2314 static struct mapping
*find_ram_mapping(ram_addr_t ram_addr
)
2318 for (p
= mappings
; p
< mappings
+ nr_mappings
; ++p
) {
2319 if (p
->ram
<= ram_addr
&& ram_addr
< p
->ram
+ p
->len
) {
2326 static struct mapping
*find_mapping(target_phys_addr_t start_addr
)
2330 for (p
= mappings
; p
< mappings
+ nr_mappings
; ++p
) {
2331 if (p
->phys
<= start_addr
&& start_addr
< p
->phys
+ p
->len
) {
2338 static void drop_mapping(target_phys_addr_t start_addr
)
2340 struct mapping
*p
= find_mapping(start_addr
);
2343 *p
= mappings
[--nr_mappings
];
2347 void kvm_set_phys_mem(target_phys_addr_t start_addr
, ram_addr_t size
,
2348 ram_addr_t phys_offset
)
2351 unsigned long area_flags
;
2356 if (start_addr
+ size
> phys_ram_size
) {
2357 phys_ram_size
= start_addr
+ size
;
2360 phys_offset
&= ~IO_MEM_ROM
;
2361 area_flags
= phys_offset
& ~TARGET_PAGE_MASK
;
2363 if (area_flags
!= IO_MEM_RAM
) {
2365 if (must_use_aliases_source(start_addr
)) {
2366 kvm_destroy_memory_alias(kvm_context
, start_addr
);
2369 if (must_use_aliases_target(start_addr
))
2373 p
= find_mapping(start_addr
);
2375 kvm_unregister_memory_area(kvm_context
, p
->phys
, p
->len
);
2376 drop_mapping(p
->phys
);
2378 start_addr
+= TARGET_PAGE_SIZE
;
2379 if (size
> TARGET_PAGE_SIZE
) {
2380 size
-= TARGET_PAGE_SIZE
;
2388 r
= kvm_is_containing_region(kvm_context
, start_addr
, size
);
2392 if (area_flags
>= TLB_MMIO
)
2396 if (must_use_aliases_source(start_addr
)) {
2397 p
= find_ram_mapping(phys_offset
);
2399 kvm_create_memory_alias(kvm_context
, start_addr
, size
,
2400 p
->phys
+ (phys_offset
- p
->ram
));
2406 r
= kvm_register_phys_mem(kvm_context
, start_addr
,
2407 qemu_get_ram_ptr(phys_offset
), size
, 0);
2409 printf("kvm_cpu_register_physical_memory: failed\n");
2413 drop_mapping(start_addr
);
2414 p
= &mappings
[nr_mappings
++];
2415 p
->phys
= start_addr
;
2416 p
->ram
= phys_offset
;
2423 int kvm_setup_guest_memory(void *area
, unsigned long size
)
2427 #ifdef MADV_DONTFORK
2428 if (kvm_enabled() && !kvm_has_sync_mmu())
2429 ret
= madvise(area
, size
, MADV_DONTFORK
);
2438 #ifdef KVM_CAP_SET_GUEST_DEBUG
2440 struct kvm_set_guest_debug_data
{
2441 struct kvm_guest_debug dbg
;
2445 static void kvm_invoke_set_guest_debug(void *data
)
2447 struct kvm_set_guest_debug_data
*dbg_data
= data
;
2449 if (cpu_single_env
->kvm_cpu_state
.regs_modified
) {
2450 kvm_arch_put_registers(cpu_single_env
);
2451 cpu_single_env
->kvm_cpu_state
.regs_modified
= 0;
2454 kvm_set_guest_debug(cpu_single_env
->kvm_cpu_state
.vcpu_ctx
,
2458 int kvm_update_guest_debug(CPUState
*env
, unsigned long reinject_trap
)
2460 struct kvm_set_guest_debug_data data
;
2462 data
.dbg
.control
= 0;
2463 if (env
->singlestep_enabled
)
2464 data
.dbg
.control
= KVM_GUESTDBG_ENABLE
| KVM_GUESTDBG_SINGLESTEP
;
2466 kvm_arch_update_guest_debug(env
, &data
.dbg
);
2467 data
.dbg
.control
|= reinject_trap
;
2469 on_vcpu(env
, kvm_invoke_set_guest_debug
, &data
);
2476 * dirty pages logging
2478 /* FIXME: use unsigned long pointer instead of unsigned char */
2479 unsigned char *kvm_dirty_bitmap
= NULL
;
2480 int kvm_physical_memory_set_dirty_tracking(int enable
)
2488 if (!kvm_dirty_bitmap
) {
2489 unsigned bitmap_size
= BITMAP_SIZE(phys_ram_size
);
2490 kvm_dirty_bitmap
= qemu_malloc(bitmap_size
);
2491 r
= kvm_dirty_pages_log_enable_all(kvm_context
);
2494 if (kvm_dirty_bitmap
) {
2495 r
= kvm_dirty_pages_log_reset(kvm_context
);
2496 qemu_free(kvm_dirty_bitmap
);
2497 kvm_dirty_bitmap
= NULL
;
2503 /* get kvm's dirty pages bitmap and update qemu's */
2504 static int kvm_get_dirty_pages_log_range(unsigned long start_addr
,
2505 unsigned char *bitmap
,
2506 unsigned long offset
,
2507 unsigned long mem_size
)
2509 unsigned int i
, j
, n
= 0;
2511 unsigned long page_number
, addr
, addr1
;
2512 ram_addr_t ram_addr
;
2513 unsigned int len
= ((mem_size
/ TARGET_PAGE_SIZE
) + 7) / 8;
2516 * bitmap-traveling is faster than memory-traveling (for addr...)
2517 * especially when most of the memory is not dirty.
2519 for (i
= 0; i
< len
; i
++) {
2524 page_number
= i
* 8 + j
;
2525 addr1
= page_number
* TARGET_PAGE_SIZE
;
2526 addr
= offset
+ addr1
;
2527 ram_addr
= cpu_get_physical_page_desc(addr
);
2528 cpu_physical_memory_set_dirty(ram_addr
);
2535 static int kvm_get_dirty_bitmap_cb(unsigned long start
, unsigned long len
,
2536 void *bitmap
, void *opaque
)
2538 return kvm_get_dirty_pages_log_range(start
, bitmap
, start
, len
);
2542 * get kvm's dirty pages bitmap and update qemu's
2543 * we only care about physical ram, which resides in slots 0 and 3
2545 int kvm_update_dirty_pages_log(void)
2550 r
= kvm_get_dirty_pages_range(kvm_context
, 0, -1UL, NULL
,
2551 kvm_get_dirty_bitmap_cb
);
2555 void kvm_qemu_log_memory(target_phys_addr_t start
, target_phys_addr_t size
,
2559 kvm_dirty_pages_log_enable_slot(kvm_context
, start
, size
);
2562 if (must_use_aliases_target(start
))
2565 kvm_dirty_pages_log_disable_slot(kvm_context
, start
, size
);
2569 #ifdef KVM_CAP_IRQCHIP
2571 int kvm_set_irq(int irq
, int level
, int *status
)
2573 return kvm_set_irq_level(kvm_context
, irq
, level
, status
);
2578 int qemu_kvm_get_dirty_pages(unsigned long phys_addr
, void *buf
)
2580 return kvm_get_dirty_pages(kvm_context
, phys_addr
, buf
);
2583 void kvm_mutex_unlock(void)
2585 assert(!cpu_single_env
);
2586 pthread_mutex_unlock(&qemu_mutex
);
2589 void kvm_mutex_lock(void)
2591 pthread_mutex_lock(&qemu_mutex
);
2592 cpu_single_env
= NULL
;
2595 #ifdef CONFIG_KVM_DEVICE_ASSIGNMENT
2596 void kvm_add_ioperm_data(struct ioperm_data
*data
)
2598 QLIST_INSERT_HEAD(&ioperm_head
, data
, entries
);
2601 void kvm_remove_ioperm_data(unsigned long start_port
, unsigned long num
)
2603 struct ioperm_data
*data
;
2605 data
= QLIST_FIRST(&ioperm_head
);
2607 struct ioperm_data
*next
= QLIST_NEXT(data
, entries
);
2609 if (data
->start_port
== start_port
&& data
->num
== num
) {
2610 QLIST_REMOVE(data
, entries
);
2618 void kvm_ioperm(CPUState
*env
, void *data
)
2620 if (kvm_enabled() && qemu_system_ready
)
2621 on_vcpu(env
, kvm_arch_do_ioperm
, data
);
2626 int kvm_physical_sync_dirty_bitmap(target_phys_addr_t start_addr
,
2627 target_phys_addr_t end_addr
)
2632 if (must_use_aliases_source(start_addr
))
2636 kvm_get_dirty_pages_range(kvm_context
, start_addr
,
2637 end_addr
- start_addr
, NULL
,
2638 kvm_get_dirty_bitmap_cb
);
2643 int kvm_log_start(target_phys_addr_t phys_addr
, target_phys_addr_t len
)
2646 if (must_use_aliases_source(phys_addr
))
2651 kvm_qemu_log_memory(phys_addr
, len
, 1);
2656 int kvm_log_stop(target_phys_addr_t phys_addr
, target_phys_addr_t len
)
2659 if (must_use_aliases_source(phys_addr
))
2664 kvm_qemu_log_memory(phys_addr
, len
, 0);
2669 int kvm_set_boot_cpu_id(uint32_t id
)
2671 return kvm_set_boot_vcpu_id(kvm_context
, id
);
2676 struct kvm_x86_mce_data
{
2678 struct kvm_x86_mce
*mce
;
2682 static void kvm_do_inject_x86_mce(void *_data
)
2684 struct kvm_x86_mce_data
*data
= _data
;
2687 r
= kvm_set_mce(data
->env
->kvm_cpu_state
.vcpu_ctx
, data
->mce
);
2689 perror("kvm_set_mce FAILED");
2690 if (data
->abort_on_error
)
2696 void kvm_inject_x86_mce(CPUState
*cenv
, int bank
, uint64_t status
,
2697 uint64_t mcg_status
, uint64_t addr
, uint64_t misc
,
2701 struct kvm_x86_mce mce
= {
2704 .mcg_status
= mcg_status
,
2708 struct kvm_x86_mce_data data
= {
2711 .abort_on_error
= abort_on_error
,
2714 if (!cenv
->mcg_cap
) {
2715 fprintf(stderr
, "MCE support is not enabled!\n");
2718 on_vcpu(cenv
, kvm_do_inject_x86_mce
, &data
);