2 * qemu/kvm integration, x86 specific code
4 * Copyright (C) 2006-2008 Qumranet Technologies
6 * Licensed under the terms of the GNU GPL version 2 or higher.
10 #include "config-host.h"
20 #include <sys/utsname.h>
21 #include <linux/kvm_para.h>
22 #include <sys/ioctl.h>
27 #define MSR_IA32_TSC 0x10
29 static struct kvm_msr_list
*kvm_msr_list
;
30 extern unsigned int kvm_shadow_memory
;
31 static int kvm_has_msr_star
;
32 static int kvm_has_vm_hsave_pa
;
34 static int lm_capable_kernel
;
36 int kvm_set_tss_addr(kvm_context_t kvm
, unsigned long addr
)
38 #ifdef KVM_CAP_SET_TSS_ADDR
41 r
= kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
, KVM_CAP_SET_TSS_ADDR
);
43 r
= kvm_vm_ioctl(kvm_state
, KVM_SET_TSS_ADDR
, addr
);
45 fprintf(stderr
, "kvm_set_tss_addr: %m\n");
54 static int kvm_init_tss(kvm_context_t kvm
)
56 #ifdef KVM_CAP_SET_TSS_ADDR
59 r
= kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
, KVM_CAP_SET_TSS_ADDR
);
62 * this address is 3 pages before the bios, and the bios should present
65 r
= kvm_set_tss_addr(kvm
, 0xfeffd000);
67 fprintf(stderr
, "kvm_init_tss: unable to set tss addr\n");
76 static int kvm_set_identity_map_addr(kvm_context_t kvm
, uint64_t addr
)
78 #ifdef KVM_CAP_SET_IDENTITY_MAP_ADDR
81 r
= kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
, KVM_CAP_SET_IDENTITY_MAP_ADDR
);
83 r
= kvm_vm_ioctl(kvm_state
, KVM_SET_IDENTITY_MAP_ADDR
, &addr
);
85 fprintf(stderr
, "kvm_set_identity_map_addr: %m\n");
94 static int kvm_init_identity_map_page(kvm_context_t kvm
)
96 #ifdef KVM_CAP_SET_IDENTITY_MAP_ADDR
99 r
= kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
, KVM_CAP_SET_IDENTITY_MAP_ADDR
);
102 * this address is 4 pages before the bios, and the bios should present
103 * as unavaible memory
105 r
= kvm_set_identity_map_addr(kvm
, 0xfeffc000);
107 fprintf(stderr
, "kvm_init_identity_map_page: "
108 "unable to set identity mapping addr\n");
117 static int kvm_create_pit(kvm_context_t kvm
)
122 kvm_state
->pit_in_kernel
= 0;
123 if (!kvm
->no_pit_creation
) {
124 r
= kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
, KVM_CAP_PIT
);
126 r
= kvm_vm_ioctl(kvm_state
, KVM_CREATE_PIT
);
128 kvm_state
->pit_in_kernel
= 1;
130 fprintf(stderr
, "Create kernel PIC irqchip failed\n");
139 int kvm_arch_create(kvm_context_t kvm
, unsigned long phys_mem_bytes
,
144 r
= kvm_init_tss(kvm
);
148 r
= kvm_init_identity_map_page(kvm
);
152 r
= kvm_create_pit(kvm
);
156 r
= kvm_init_coalesced_mmio(kvm
);
160 #ifdef KVM_EXIT_TPR_ACCESS
167 #ifdef KVM_EXIT_TPR_ACCESS
169 static int kvm_handle_tpr_access(CPUState
*env
)
171 struct kvm_run
*run
= env
->kvm_run
;
172 kvm_tpr_access_report(env
,
174 run
->tpr_access
.is_write
);
179 int kvm_enable_vapic(CPUState
*env
, uint64_t vapic
)
181 struct kvm_vapic_addr va
= {
185 return kvm_vcpu_ioctl(env
, KVM_SET_VAPIC_ADDR
, &va
);
190 int kvm_arch_run(CPUState
*env
)
193 struct kvm_run
*run
= env
->kvm_run
;
196 switch (run
->exit_reason
) {
197 #ifdef KVM_EXIT_SET_TPR
198 case KVM_EXIT_SET_TPR
:
201 #ifdef KVM_EXIT_TPR_ACCESS
202 case KVM_EXIT_TPR_ACCESS
:
203 r
= kvm_handle_tpr_access(env
);
214 #define MAX_ALIAS_SLOTS 4
218 } kvm_aliases
[MAX_ALIAS_SLOTS
];
220 static int get_alias_slot(uint64_t start
)
224 for (i
=0; i
<MAX_ALIAS_SLOTS
; i
++)
225 if (kvm_aliases
[i
].start
== start
)
229 static int get_free_alias_slot(void)
233 for (i
=0; i
<MAX_ALIAS_SLOTS
; i
++)
234 if (kvm_aliases
[i
].len
== 0)
239 static void register_alias(int slot
, uint64_t start
, uint64_t len
)
241 kvm_aliases
[slot
].start
= start
;
242 kvm_aliases
[slot
].len
= len
;
245 int kvm_create_memory_alias(kvm_context_t kvm
,
248 uint64_t target_phys
)
250 struct kvm_memory_alias alias
= {
252 .guest_phys_addr
= phys_start
,
254 .target_phys_addr
= target_phys
,
259 slot
= get_alias_slot(phys_start
);
261 slot
= get_free_alias_slot();
266 r
= kvm_vm_ioctl(kvm_state
, KVM_SET_MEMORY_ALIAS
, &alias
);
270 register_alias(slot
, phys_start
, len
);
274 int kvm_destroy_memory_alias(kvm_context_t kvm
, uint64_t phys_start
)
276 return kvm_create_memory_alias(kvm
, phys_start
, 0, 0);
279 #ifdef KVM_CAP_IRQCHIP
281 int kvm_get_lapic(CPUState
*env
, struct kvm_lapic_state
*s
)
285 if (!kvm_irqchip_in_kernel())
288 r
= kvm_vcpu_ioctl(env
, KVM_GET_LAPIC
, s
);
290 fprintf(stderr
, "KVM_GET_LAPIC failed\n");
294 int kvm_set_lapic(CPUState
*env
, struct kvm_lapic_state
*s
)
298 if (!kvm_irqchip_in_kernel())
301 r
= kvm_vcpu_ioctl(env
, KVM_SET_LAPIC
, s
);
304 fprintf(stderr
, "KVM_SET_LAPIC failed\n");
312 int kvm_get_pit(kvm_context_t kvm
, struct kvm_pit_state
*s
)
314 if (!kvm_pit_in_kernel())
316 return kvm_vm_ioctl(kvm_state
, KVM_GET_PIT
, s
);
319 int kvm_set_pit(kvm_context_t kvm
, struct kvm_pit_state
*s
)
321 if (!kvm_pit_in_kernel())
323 return kvm_vm_ioctl(kvm_state
, KVM_SET_PIT
, s
);
326 #ifdef KVM_CAP_PIT_STATE2
327 int kvm_get_pit2(kvm_context_t kvm
, struct kvm_pit_state2
*ps2
)
329 if (!kvm_pit_in_kernel())
331 return kvm_vm_ioctl(kvm_state
, KVM_GET_PIT2
, ps2
);
334 int kvm_set_pit2(kvm_context_t kvm
, struct kvm_pit_state2
*ps2
)
336 if (!kvm_pit_in_kernel())
338 return kvm_vm_ioctl(kvm_state
, KVM_SET_PIT2
, ps2
);
344 int kvm_has_pit_state2(kvm_context_t kvm
)
348 #ifdef KVM_CAP_PIT_STATE2
349 r
= kvm_check_extension(kvm_state
, KVM_CAP_PIT_STATE2
);
354 void kvm_show_code(CPUState
*env
)
356 #define SHOW_CODE_LEN 50
357 struct kvm_regs regs
;
358 struct kvm_sregs sregs
;
362 char code_str
[SHOW_CODE_LEN
* 3 + 1];
365 r
= kvm_vcpu_ioctl(env
, KVM_GET_SREGS
, &sregs
);
367 perror("KVM_GET_SREGS");
370 r
= kvm_vcpu_ioctl(env
, KVM_GET_REGS
, ®s
);
372 perror("KVM_GET_REGS");
375 rip
= sregs
.cs
.base
+ regs
.rip
;
376 back_offset
= regs
.rip
;
377 if (back_offset
> 20)
380 for (n
= -back_offset
; n
< SHOW_CODE_LEN
-back_offset
; ++n
) {
382 strcat(code_str
, " -->");
383 cpu_physical_memory_rw(rip
+ n
, &code
, 1, 1);
384 sprintf(code_str
+ strlen(code_str
), " %02x", code
);
386 fprintf(stderr
, "code:%s\n", code_str
);
391 * Returns available msr list. User must free.
393 struct kvm_msr_list
*kvm_get_msr_list(kvm_context_t kvm
)
395 struct kvm_msr_list sizer
, *msrs
;
399 r
= kvm_ioctl(kvm_state
, KVM_GET_MSR_INDEX_LIST
, &sizer
);
400 if (r
< 0 && r
!= -E2BIG
)
402 /* Old kernel modules had a bug and could write beyond the provided
403 memory. Allocate at least a safe amount of 1K. */
404 msrs
= qemu_malloc(MAX(1024, sizeof(*msrs
) +
405 sizer
.nmsrs
* sizeof(*msrs
->indices
)));
407 msrs
->nmsrs
= sizer
.nmsrs
;
408 r
= kvm_ioctl(kvm_state
, KVM_GET_MSR_INDEX_LIST
, msrs
);
417 int kvm_get_msrs(CPUState
*env
, struct kvm_msr_entry
*msrs
, int n
)
419 struct kvm_msrs
*kmsrs
= qemu_malloc(sizeof *kmsrs
+ n
* sizeof *msrs
);
423 memcpy(kmsrs
->entries
, msrs
, n
* sizeof *msrs
);
424 r
= kvm_vcpu_ioctl(env
, KVM_GET_MSRS
, kmsrs
);
425 memcpy(msrs
, kmsrs
->entries
, n
* sizeof *msrs
);
430 int kvm_set_msrs(CPUState
*env
, struct kvm_msr_entry
*msrs
, int n
)
432 struct kvm_msrs
*kmsrs
= qemu_malloc(sizeof *kmsrs
+ n
* sizeof *msrs
);
436 memcpy(kmsrs
->entries
, msrs
, n
* sizeof *msrs
);
437 r
= kvm_vcpu_ioctl(env
, KVM_SET_MSRS
, kmsrs
);
442 int kvm_get_mce_cap_supported(kvm_context_t kvm
, uint64_t *mce_cap
,
448 r
= kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
, KVM_CAP_MCE
);
451 return kvm_ioctl(kvm_state
, KVM_X86_GET_MCE_CAP_SUPPORTED
, mce_cap
);
457 int kvm_setup_mce(CPUState
*env
, uint64_t *mcg_cap
)
460 return kvm_vcpu_ioctl(env
, KVM_X86_SETUP_MCE
, mcg_cap
);
466 int kvm_set_mce(CPUState
*env
, struct kvm_x86_mce
*m
)
469 return kvm_vcpu_ioctl(env
, KVM_X86_SET_MCE
, m
);
475 static void print_seg(FILE *file
, const char *name
, struct kvm_segment
*seg
)
478 "%s %04x (%08llx/%08x p %d dpl %d db %d s %d type %x l %d"
480 name
, seg
->selector
, seg
->base
, seg
->limit
, seg
->present
,
481 seg
->dpl
, seg
->db
, seg
->s
, seg
->type
, seg
->l
, seg
->g
,
485 static void print_dt(FILE *file
, const char *name
, struct kvm_dtable
*dt
)
487 fprintf(stderr
, "%s %llx/%x\n", name
, dt
->base
, dt
->limit
);
490 void kvm_show_regs(CPUState
*env
)
492 struct kvm_regs regs
;
493 struct kvm_sregs sregs
;
496 r
= kvm_vcpu_ioctl(env
, KVM_GET_REGS
, ®s
);
498 perror("KVM_GET_REGS");
502 "rax %016llx rbx %016llx rcx %016llx rdx %016llx\n"
503 "rsi %016llx rdi %016llx rsp %016llx rbp %016llx\n"
504 "r8 %016llx r9 %016llx r10 %016llx r11 %016llx\n"
505 "r12 %016llx r13 %016llx r14 %016llx r15 %016llx\n"
506 "rip %016llx rflags %08llx\n",
507 regs
.rax
, regs
.rbx
, regs
.rcx
, regs
.rdx
,
508 regs
.rsi
, regs
.rdi
, regs
.rsp
, regs
.rbp
,
509 regs
.r8
, regs
.r9
, regs
.r10
, regs
.r11
,
510 regs
.r12
, regs
.r13
, regs
.r14
, regs
.r15
,
511 regs
.rip
, regs
.rflags
);
512 r
= kvm_vcpu_ioctl(env
, KVM_GET_SREGS
, &sregs
);
514 perror("KVM_GET_SREGS");
517 print_seg(stderr
, "cs", &sregs
.cs
);
518 print_seg(stderr
, "ds", &sregs
.ds
);
519 print_seg(stderr
, "es", &sregs
.es
);
520 print_seg(stderr
, "ss", &sregs
.ss
);
521 print_seg(stderr
, "fs", &sregs
.fs
);
522 print_seg(stderr
, "gs", &sregs
.gs
);
523 print_seg(stderr
, "tr", &sregs
.tr
);
524 print_seg(stderr
, "ldt", &sregs
.ldt
);
525 print_dt(stderr
, "gdt", &sregs
.gdt
);
526 print_dt(stderr
, "idt", &sregs
.idt
);
527 fprintf(stderr
, "cr0 %llx cr2 %llx cr3 %llx cr4 %llx cr8 %llx"
529 sregs
.cr0
, sregs
.cr2
, sregs
.cr3
, sregs
.cr4
, sregs
.cr8
,
533 static void kvm_set_cr8(CPUState
*env
, uint64_t cr8
)
535 env
->kvm_run
->cr8
= cr8
;
538 int kvm_setup_cpuid(CPUState
*env
, int nent
,
539 struct kvm_cpuid_entry
*entries
)
541 struct kvm_cpuid
*cpuid
;
544 cpuid
= qemu_malloc(sizeof(*cpuid
) + nent
* sizeof(*entries
));
547 memcpy(cpuid
->entries
, entries
, nent
* sizeof(*entries
));
548 r
= kvm_vcpu_ioctl(env
, KVM_SET_CPUID
, cpuid
);
554 int kvm_setup_cpuid2(CPUState
*env
, int nent
,
555 struct kvm_cpuid_entry2
*entries
)
557 struct kvm_cpuid2
*cpuid
;
560 cpuid
= qemu_malloc(sizeof(*cpuid
) + nent
* sizeof(*entries
));
563 memcpy(cpuid
->entries
, entries
, nent
* sizeof(*entries
));
564 r
= kvm_vcpu_ioctl(env
, KVM_SET_CPUID2
, cpuid
);
569 int kvm_set_shadow_pages(kvm_context_t kvm
, unsigned int nrshadow_pages
)
571 #ifdef KVM_CAP_MMU_SHADOW_CACHE_CONTROL
574 r
= kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
,
575 KVM_CAP_MMU_SHADOW_CACHE_CONTROL
);
577 r
= kvm_vm_ioctl(kvm_state
, KVM_SET_NR_MMU_PAGES
, nrshadow_pages
);
579 fprintf(stderr
, "kvm_set_shadow_pages: %m\n");
588 int kvm_get_shadow_pages(kvm_context_t kvm
, unsigned int *nrshadow_pages
)
590 #ifdef KVM_CAP_MMU_SHADOW_CACHE_CONTROL
593 r
= kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
,
594 KVM_CAP_MMU_SHADOW_CACHE_CONTROL
);
596 *nrshadow_pages
= kvm_vm_ioctl(kvm_state
, KVM_GET_NR_MMU_PAGES
);
605 static int tpr_access_reporting(CPUState
*env
, int enabled
)
608 struct kvm_tpr_access_ctl tac
= {
612 r
= kvm_ioctl(kvm_state
, KVM_CHECK_EXTENSION
, KVM_CAP_VAPIC
);
615 return kvm_vcpu_ioctl(env
, KVM_TPR_ACCESS_REPORTING
, &tac
);
618 int kvm_enable_tpr_access_reporting(CPUState
*env
)
620 return tpr_access_reporting(env
, 1);
623 int kvm_disable_tpr_access_reporting(CPUState
*env
)
625 return tpr_access_reporting(env
, 0);
630 int kvm_qemu_create_memory_alias(uint64_t phys_start
,
632 uint64_t target_phys
)
634 return kvm_create_memory_alias(kvm_context
, phys_start
, len
, target_phys
);
637 int kvm_qemu_destroy_memory_alias(uint64_t phys_start
)
639 return kvm_destroy_memory_alias(kvm_context
, phys_start
);
642 #ifdef KVM_CAP_ADJUST_CLOCK
643 static struct kvm_clock_data kvmclock_data
;
645 static void kvmclock_pre_save(void *opaque
)
647 struct kvm_clock_data
*cl
= opaque
;
649 kvm_vm_ioctl(kvm_state
, KVM_GET_CLOCK
, cl
);
652 static int kvmclock_post_load(void *opaque
, int version_id
)
654 struct kvm_clock_data
*cl
= opaque
;
656 return kvm_vm_ioctl(kvm_state
, KVM_SET_CLOCK
, cl
);
659 static const VMStateDescription vmstate_kvmclock
= {
662 .minimum_version_id
= 1,
663 .minimum_version_id_old
= 1,
664 .pre_save
= kvmclock_pre_save
,
665 .post_load
= kvmclock_post_load
,
666 .fields
= (VMStateField
[]) {
667 VMSTATE_U64(clock
, struct kvm_clock_data
),
668 VMSTATE_END_OF_LIST()
673 int kvm_arch_qemu_create_context(void)
676 struct utsname utsname
;
679 lm_capable_kernel
= strcmp(utsname
.machine
, "x86_64") == 0;
681 if (kvm_shadow_memory
)
682 kvm_set_shadow_pages(kvm_context
, kvm_shadow_memory
);
684 kvm_msr_list
= kvm_get_msr_list(kvm_context
);
687 for (i
= 0; i
< kvm_msr_list
->nmsrs
; ++i
) {
688 if (kvm_msr_list
->indices
[i
] == MSR_STAR
)
689 kvm_has_msr_star
= 1;
690 if (kvm_msr_list
->indices
[i
] == MSR_VM_HSAVE_PA
)
691 kvm_has_vm_hsave_pa
= 1;
694 #ifdef KVM_CAP_ADJUST_CLOCK
695 if (kvm_check_extension(kvm_state
, KVM_CAP_ADJUST_CLOCK
))
696 vmstate_register(0, &vmstate_kvmclock
, &kvmclock_data
);
701 static void set_msr_entry(struct kvm_msr_entry
*entry
, uint32_t index
,
704 entry
->index
= index
;
708 /* returns 0 on success, non-0 on failure */
709 static int get_msr_entry(struct kvm_msr_entry
*entry
, CPUState
*env
)
711 switch (entry
->index
) {
712 case MSR_IA32_SYSENTER_CS
:
713 env
->sysenter_cs
= entry
->data
;
715 case MSR_IA32_SYSENTER_ESP
:
716 env
->sysenter_esp
= entry
->data
;
718 case MSR_IA32_SYSENTER_EIP
:
719 env
->sysenter_eip
= entry
->data
;
722 env
->star
= entry
->data
;
726 env
->cstar
= entry
->data
;
728 case MSR_KERNELGSBASE
:
729 env
->kernelgsbase
= entry
->data
;
732 env
->fmask
= entry
->data
;
735 env
->lstar
= entry
->data
;
739 env
->tsc
= entry
->data
;
741 case MSR_VM_HSAVE_PA
:
742 env
->vm_hsave
= entry
->data
;
744 case MSR_KVM_SYSTEM_TIME
:
745 env
->system_time_msr
= entry
->data
;
747 case MSR_KVM_WALL_CLOCK
:
748 env
->wall_clock_msr
= entry
->data
;
751 printf("Warning unknown msr index 0x%x\n", entry
->index
);
757 static void set_v8086_seg(struct kvm_segment
*lhs
, const SegmentCache
*rhs
)
759 lhs
->selector
= rhs
->selector
;
760 lhs
->base
= rhs
->base
;
761 lhs
->limit
= rhs
->limit
;
773 static void set_seg(struct kvm_segment
*lhs
, const SegmentCache
*rhs
)
775 unsigned flags
= rhs
->flags
;
776 lhs
->selector
= rhs
->selector
;
777 lhs
->base
= rhs
->base
;
778 lhs
->limit
= rhs
->limit
;
779 lhs
->type
= (flags
>> DESC_TYPE_SHIFT
) & 15;
780 lhs
->present
= (flags
& DESC_P_MASK
) != 0;
781 lhs
->dpl
= rhs
->selector
& 3;
782 lhs
->db
= (flags
>> DESC_B_SHIFT
) & 1;
783 lhs
->s
= (flags
& DESC_S_MASK
) != 0;
784 lhs
->l
= (flags
>> DESC_L_SHIFT
) & 1;
785 lhs
->g
= (flags
& DESC_G_MASK
) != 0;
786 lhs
->avl
= (flags
& DESC_AVL_MASK
) != 0;
790 static void get_seg(SegmentCache
*lhs
, const struct kvm_segment
*rhs
)
792 lhs
->selector
= rhs
->selector
;
793 lhs
->base
= rhs
->base
;
794 lhs
->limit
= rhs
->limit
;
796 (rhs
->type
<< DESC_TYPE_SHIFT
)
797 | (rhs
->present
* DESC_P_MASK
)
798 | (rhs
->dpl
<< DESC_DPL_SHIFT
)
799 | (rhs
->db
<< DESC_B_SHIFT
)
800 | (rhs
->s
* DESC_S_MASK
)
801 | (rhs
->l
<< DESC_L_SHIFT
)
802 | (rhs
->g
* DESC_G_MASK
)
803 | (rhs
->avl
* DESC_AVL_MASK
);
806 void kvm_arch_load_regs(CPUState
*env
)
808 struct kvm_regs regs
;
810 struct kvm_sregs sregs
;
811 struct kvm_msr_entry msrs
[100];
814 assert(kvm_cpu_is_stopped(env
) || env
->thread_id
== kvm_get_thread_id());
816 regs
.rax
= env
->regs
[R_EAX
];
817 regs
.rbx
= env
->regs
[R_EBX
];
818 regs
.rcx
= env
->regs
[R_ECX
];
819 regs
.rdx
= env
->regs
[R_EDX
];
820 regs
.rsi
= env
->regs
[R_ESI
];
821 regs
.rdi
= env
->regs
[R_EDI
];
822 regs
.rsp
= env
->regs
[R_ESP
];
823 regs
.rbp
= env
->regs
[R_EBP
];
825 regs
.r8
= env
->regs
[8];
826 regs
.r9
= env
->regs
[9];
827 regs
.r10
= env
->regs
[10];
828 regs
.r11
= env
->regs
[11];
829 regs
.r12
= env
->regs
[12];
830 regs
.r13
= env
->regs
[13];
831 regs
.r14
= env
->regs
[14];
832 regs
.r15
= env
->regs
[15];
835 regs
.rflags
= env
->eflags
;
838 kvm_set_regs(env
, ®s
);
840 memset(&fpu
, 0, sizeof fpu
);
841 fpu
.fsw
= env
->fpus
& ~(7 << 11);
842 fpu
.fsw
|= (env
->fpstt
& 7) << 11;
844 for (i
= 0; i
< 8; ++i
)
845 fpu
.ftwx
|= (!env
->fptags
[i
]) << i
;
846 memcpy(fpu
.fpr
, env
->fpregs
, sizeof env
->fpregs
);
847 memcpy(fpu
.xmm
, env
->xmm_regs
, sizeof env
->xmm_regs
);
848 fpu
.mxcsr
= env
->mxcsr
;
849 kvm_set_fpu(env
, &fpu
);
851 memset(sregs
.interrupt_bitmap
, 0, sizeof(sregs
.interrupt_bitmap
));
852 if (env
->interrupt_injected
>= 0) {
853 sregs
.interrupt_bitmap
[env
->interrupt_injected
/ 64] |=
854 (uint64_t)1 << (env
->interrupt_injected
% 64);
857 if ((env
->eflags
& VM_MASK
)) {
858 set_v8086_seg(&sregs
.cs
, &env
->segs
[R_CS
]);
859 set_v8086_seg(&sregs
.ds
, &env
->segs
[R_DS
]);
860 set_v8086_seg(&sregs
.es
, &env
->segs
[R_ES
]);
861 set_v8086_seg(&sregs
.fs
, &env
->segs
[R_FS
]);
862 set_v8086_seg(&sregs
.gs
, &env
->segs
[R_GS
]);
863 set_v8086_seg(&sregs
.ss
, &env
->segs
[R_SS
]);
865 set_seg(&sregs
.cs
, &env
->segs
[R_CS
]);
866 set_seg(&sregs
.ds
, &env
->segs
[R_DS
]);
867 set_seg(&sregs
.es
, &env
->segs
[R_ES
]);
868 set_seg(&sregs
.fs
, &env
->segs
[R_FS
]);
869 set_seg(&sregs
.gs
, &env
->segs
[R_GS
]);
870 set_seg(&sregs
.ss
, &env
->segs
[R_SS
]);
872 if (env
->cr
[0] & CR0_PE_MASK
) {
873 /* force ss cpl to cs cpl */
874 sregs
.ss
.selector
= (sregs
.ss
.selector
& ~3) |
875 (sregs
.cs
.selector
& 3);
876 sregs
.ss
.dpl
= sregs
.ss
.selector
& 3;
880 set_seg(&sregs
.tr
, &env
->tr
);
881 set_seg(&sregs
.ldt
, &env
->ldt
);
883 sregs
.idt
.limit
= env
->idt
.limit
;
884 sregs
.idt
.base
= env
->idt
.base
;
885 sregs
.gdt
.limit
= env
->gdt
.limit
;
886 sregs
.gdt
.base
= env
->gdt
.base
;
888 sregs
.cr0
= env
->cr
[0];
889 sregs
.cr2
= env
->cr
[2];
890 sregs
.cr3
= env
->cr
[3];
891 sregs
.cr4
= env
->cr
[4];
893 sregs
.cr8
= cpu_get_apic_tpr(env
);
894 sregs
.apic_base
= cpu_get_apic_base(env
);
896 sregs
.efer
= env
->efer
;
898 kvm_set_sregs(env
, &sregs
);
902 /* Remember to increase msrs size if you add new registers below */
903 set_msr_entry(&msrs
[n
++], MSR_IA32_SYSENTER_CS
, env
->sysenter_cs
);
904 set_msr_entry(&msrs
[n
++], MSR_IA32_SYSENTER_ESP
, env
->sysenter_esp
);
905 set_msr_entry(&msrs
[n
++], MSR_IA32_SYSENTER_EIP
, env
->sysenter_eip
);
906 if (kvm_has_msr_star
)
907 set_msr_entry(&msrs
[n
++], MSR_STAR
, env
->star
);
908 if (kvm_has_vm_hsave_pa
)
909 set_msr_entry(&msrs
[n
++], MSR_VM_HSAVE_PA
, env
->vm_hsave
);
911 if (lm_capable_kernel
) {
912 set_msr_entry(&msrs
[n
++], MSR_CSTAR
, env
->cstar
);
913 set_msr_entry(&msrs
[n
++], MSR_KERNELGSBASE
, env
->kernelgsbase
);
914 set_msr_entry(&msrs
[n
++], MSR_FMASK
, env
->fmask
);
915 set_msr_entry(&msrs
[n
++], MSR_LSTAR
, env
->lstar
);
918 set_msr_entry(&msrs
[n
++], MSR_KVM_SYSTEM_TIME
, env
->system_time_msr
);
919 set_msr_entry(&msrs
[n
++], MSR_KVM_WALL_CLOCK
, env
->wall_clock_msr
);
921 rc
= kvm_set_msrs(env
, msrs
, n
);
923 perror("kvm_set_msrs FAILED");
926 * Kernels before 2.6.33 (which correlates with !kvm_has_vcpu_events())
927 * overwrote flags.TF injected via SET_GUEST_DEBUG while updating GP regs.
928 * Work around this by updating the debug state once again if
929 * single-stepping is on.
930 * Another reason to call kvm_update_guest_debug here is a pending debug
931 * trap raise by the guest. On kernels without SET_VCPU_EVENTS we have to
932 * reinject them via SET_GUEST_DEBUG.
934 if (!kvm_has_vcpu_events() &&
935 (env
->exception_injected
!= -1 || env
->singlestep_enabled
)) {
936 unsigned long reinject_trap
= 0;
938 if (env
->exception_injected
== 1) {
939 reinject_trap
= KVM_GUESTDBG_INJECT_DB
;
940 } else if (env
->exception_injected
== 3) {
941 reinject_trap
= KVM_GUESTDBG_INJECT_BP
;
943 env
->exception_injected
= -1;
945 rc
= kvm_update_guest_debug(env
, reinject_trap
);
947 perror("kvm_update_guest_debug FAILED");
952 void kvm_load_tsc(CPUState
*env
)
955 struct kvm_msr_entry msr
;
957 set_msr_entry(&msr
, MSR_IA32_TSC
, env
->tsc
);
959 rc
= kvm_set_msrs(env
, &msr
, 1);
961 perror("kvm_set_tsc FAILED.\n");
964 void kvm_arch_save_mpstate(CPUState
*env
)
966 #ifdef KVM_CAP_MP_STATE
968 struct kvm_mp_state mp_state
;
970 r
= kvm_get_mpstate(env
, &mp_state
);
974 env
->mp_state
= mp_state
.mp_state
;
980 void kvm_arch_load_mpstate(CPUState
*env
)
982 #ifdef KVM_CAP_MP_STATE
983 struct kvm_mp_state mp_state
= { .mp_state
= env
->mp_state
};
986 * -1 indicates that the host did not support GET_MP_STATE ioctl,
989 if (env
->mp_state
!= -1)
990 kvm_set_mpstate(env
, &mp_state
);
994 void kvm_arch_save_regs(CPUState
*env
)
996 struct kvm_regs regs
;
998 struct kvm_sregs sregs
;
999 struct kvm_msr_entry msrs
[100];
1001 uint32_t i
, n
, rc
, bit
;
1003 assert(kvm_cpu_is_stopped(env
) || env
->thread_id
== kvm_get_thread_id());
1005 kvm_get_regs(env
, ®s
);
1007 env
->regs
[R_EAX
] = regs
.rax
;
1008 env
->regs
[R_EBX
] = regs
.rbx
;
1009 env
->regs
[R_ECX
] = regs
.rcx
;
1010 env
->regs
[R_EDX
] = regs
.rdx
;
1011 env
->regs
[R_ESI
] = regs
.rsi
;
1012 env
->regs
[R_EDI
] = regs
.rdi
;
1013 env
->regs
[R_ESP
] = regs
.rsp
;
1014 env
->regs
[R_EBP
] = regs
.rbp
;
1015 #ifdef TARGET_X86_64
1016 env
->regs
[8] = regs
.r8
;
1017 env
->regs
[9] = regs
.r9
;
1018 env
->regs
[10] = regs
.r10
;
1019 env
->regs
[11] = regs
.r11
;
1020 env
->regs
[12] = regs
.r12
;
1021 env
->regs
[13] = regs
.r13
;
1022 env
->regs
[14] = regs
.r14
;
1023 env
->regs
[15] = regs
.r15
;
1026 env
->eflags
= regs
.rflags
;
1027 env
->eip
= regs
.rip
;
1029 kvm_get_fpu(env
, &fpu
);
1030 env
->fpstt
= (fpu
.fsw
>> 11) & 7;
1031 env
->fpus
= fpu
.fsw
;
1032 env
->fpuc
= fpu
.fcw
;
1033 for (i
= 0; i
< 8; ++i
)
1034 env
->fptags
[i
] = !((fpu
.ftwx
>> i
) & 1);
1035 memcpy(env
->fpregs
, fpu
.fpr
, sizeof env
->fpregs
);
1036 memcpy(env
->xmm_regs
, fpu
.xmm
, sizeof env
->xmm_regs
);
1037 env
->mxcsr
= fpu
.mxcsr
;
1039 kvm_get_sregs(env
, &sregs
);
1041 /* There can only be one pending IRQ set in the bitmap at a time, so try
1042 to find it and save its number instead (-1 for none). */
1043 env
->interrupt_injected
= -1;
1044 for (i
= 0; i
< ARRAY_SIZE(sregs
.interrupt_bitmap
); i
++) {
1045 if (sregs
.interrupt_bitmap
[i
]) {
1046 bit
= ctz64(sregs
.interrupt_bitmap
[i
]);
1047 env
->interrupt_injected
= i
* 64 + bit
;
1052 get_seg(&env
->segs
[R_CS
], &sregs
.cs
);
1053 get_seg(&env
->segs
[R_DS
], &sregs
.ds
);
1054 get_seg(&env
->segs
[R_ES
], &sregs
.es
);
1055 get_seg(&env
->segs
[R_FS
], &sregs
.fs
);
1056 get_seg(&env
->segs
[R_GS
], &sregs
.gs
);
1057 get_seg(&env
->segs
[R_SS
], &sregs
.ss
);
1059 get_seg(&env
->tr
, &sregs
.tr
);
1060 get_seg(&env
->ldt
, &sregs
.ldt
);
1062 env
->idt
.limit
= sregs
.idt
.limit
;
1063 env
->idt
.base
= sregs
.idt
.base
;
1064 env
->gdt
.limit
= sregs
.gdt
.limit
;
1065 env
->gdt
.base
= sregs
.gdt
.base
;
1067 env
->cr
[0] = sregs
.cr0
;
1068 env
->cr
[2] = sregs
.cr2
;
1069 env
->cr
[3] = sregs
.cr3
;
1070 env
->cr
[4] = sregs
.cr4
;
1072 cpu_set_apic_base(env
, sregs
.apic_base
);
1074 env
->efer
= sregs
.efer
;
1075 //cpu_set_apic_tpr(env, sregs.cr8);
1077 #define HFLAG_COPY_MASK ~( \
1078 HF_CPL_MASK | HF_PE_MASK | HF_MP_MASK | HF_EM_MASK | \
1079 HF_TS_MASK | HF_TF_MASK | HF_VM_MASK | HF_IOPL_MASK | \
1080 HF_OSFXSR_MASK | HF_LMA_MASK | HF_CS32_MASK | \
1081 HF_SS32_MASK | HF_CS64_MASK | HF_ADDSEG_MASK)
1085 hflags
= (env
->segs
[R_CS
].flags
>> DESC_DPL_SHIFT
) & HF_CPL_MASK
;
1086 hflags
|= (env
->cr
[0] & CR0_PE_MASK
) << (HF_PE_SHIFT
- CR0_PE_SHIFT
);
1087 hflags
|= (env
->cr
[0] << (HF_MP_SHIFT
- CR0_MP_SHIFT
)) &
1088 (HF_MP_MASK
| HF_EM_MASK
| HF_TS_MASK
);
1089 hflags
|= (env
->eflags
& (HF_TF_MASK
| HF_VM_MASK
| HF_IOPL_MASK
));
1090 hflags
|= (env
->cr
[4] & CR4_OSFXSR_MASK
) <<
1091 (HF_OSFXSR_SHIFT
- CR4_OSFXSR_SHIFT
);
1093 if (env
->efer
& MSR_EFER_LMA
) {
1094 hflags
|= HF_LMA_MASK
;
1097 if ((hflags
& HF_LMA_MASK
) && (env
->segs
[R_CS
].flags
& DESC_L_MASK
)) {
1098 hflags
|= HF_CS32_MASK
| HF_SS32_MASK
| HF_CS64_MASK
;
1100 hflags
|= (env
->segs
[R_CS
].flags
& DESC_B_MASK
) >>
1101 (DESC_B_SHIFT
- HF_CS32_SHIFT
);
1102 hflags
|= (env
->segs
[R_SS
].flags
& DESC_B_MASK
) >>
1103 (DESC_B_SHIFT
- HF_SS32_SHIFT
);
1104 if (!(env
->cr
[0] & CR0_PE_MASK
) ||
1105 (env
->eflags
& VM_MASK
) ||
1106 !(hflags
& HF_CS32_MASK
)) {
1107 hflags
|= HF_ADDSEG_MASK
;
1109 hflags
|= ((env
->segs
[R_DS
].base
|
1110 env
->segs
[R_ES
].base
|
1111 env
->segs
[R_SS
].base
) != 0) <<
1115 env
->hflags
= (env
->hflags
& HFLAG_COPY_MASK
) | hflags
;
1119 /* Remember to increase msrs size if you add new registers below */
1120 msrs
[n
++].index
= MSR_IA32_SYSENTER_CS
;
1121 msrs
[n
++].index
= MSR_IA32_SYSENTER_ESP
;
1122 msrs
[n
++].index
= MSR_IA32_SYSENTER_EIP
;
1123 if (kvm_has_msr_star
)
1124 msrs
[n
++].index
= MSR_STAR
;
1125 msrs
[n
++].index
= MSR_IA32_TSC
;
1126 if (kvm_has_vm_hsave_pa
)
1127 msrs
[n
++].index
= MSR_VM_HSAVE_PA
;
1128 #ifdef TARGET_X86_64
1129 if (lm_capable_kernel
) {
1130 msrs
[n
++].index
= MSR_CSTAR
;
1131 msrs
[n
++].index
= MSR_KERNELGSBASE
;
1132 msrs
[n
++].index
= MSR_FMASK
;
1133 msrs
[n
++].index
= MSR_LSTAR
;
1136 msrs
[n
++].index
= MSR_KVM_SYSTEM_TIME
;
1137 msrs
[n
++].index
= MSR_KVM_WALL_CLOCK
;
1139 rc
= kvm_get_msrs(env
, msrs
, n
);
1141 perror("kvm_get_msrs FAILED");
1144 n
= rc
; /* actual number of MSRs */
1145 for (i
=0 ; i
<n
; i
++) {
1146 if (get_msr_entry(&msrs
[i
], env
))
1150 kvm_arch_save_mpstate(env
);
1153 static void do_cpuid_ent(struct kvm_cpuid_entry2
*e
, uint32_t function
,
1154 uint32_t count
, CPUState
*env
)
1156 env
->regs
[R_EAX
] = function
;
1157 env
->regs
[R_ECX
] = count
;
1158 qemu_kvm_cpuid_on_env(env
);
1159 e
->function
= function
;
1162 e
->eax
= env
->regs
[R_EAX
];
1163 e
->ebx
= env
->regs
[R_EBX
];
1164 e
->ecx
= env
->regs
[R_ECX
];
1165 e
->edx
= env
->regs
[R_EDX
];
1168 struct kvm_para_features
{
1171 } para_features
[] = {
1172 #ifdef KVM_CAP_CLOCKSOURCE
1173 { KVM_CAP_CLOCKSOURCE
, KVM_FEATURE_CLOCKSOURCE
},
1175 #ifdef KVM_CAP_NOP_IO_DELAY
1176 { KVM_CAP_NOP_IO_DELAY
, KVM_FEATURE_NOP_IO_DELAY
},
1178 #ifdef KVM_CAP_PV_MMU
1179 { KVM_CAP_PV_MMU
, KVM_FEATURE_MMU_OP
},
1184 static int get_para_features(kvm_context_t kvm_context
)
1186 int i
, features
= 0;
1188 for (i
= 0; i
< ARRAY_SIZE(para_features
)-1; i
++) {
1189 if (kvm_check_extension(kvm_state
, para_features
[i
].cap
))
1190 features
|= (1 << para_features
[i
].feature
);
1196 static void kvm_trim_features(uint32_t *features
, uint32_t supported
)
1201 for (i
= 0; i
< 32; ++i
) {
1203 if ((*features
& mask
) && !(supported
& mask
)) {
1209 int kvm_arch_init_vcpu(CPUState
*cenv
)
1211 struct kvm_cpuid_entry2 cpuid_ent
[100];
1212 #ifdef KVM_CPUID_SIGNATURE
1213 struct kvm_cpuid_entry2
*pv_ent
;
1214 uint32_t signature
[3];
1218 uint32_t i
, j
, limit
;
1220 qemu_kvm_load_lapic(cenv
);
1222 cenv
->interrupt_injected
= -1;
1224 #ifdef KVM_CPUID_SIGNATURE
1225 /* Paravirtualization CPUIDs */
1226 memcpy(signature
, "KVMKVMKVM\0\0\0", 12);
1227 pv_ent
= &cpuid_ent
[cpuid_nent
++];
1228 memset(pv_ent
, 0, sizeof(*pv_ent
));
1229 pv_ent
->function
= KVM_CPUID_SIGNATURE
;
1231 pv_ent
->ebx
= signature
[0];
1232 pv_ent
->ecx
= signature
[1];
1233 pv_ent
->edx
= signature
[2];
1235 pv_ent
= &cpuid_ent
[cpuid_nent
++];
1236 memset(pv_ent
, 0, sizeof(*pv_ent
));
1237 pv_ent
->function
= KVM_CPUID_FEATURES
;
1238 pv_ent
->eax
= get_para_features(kvm_context
);
1241 kvm_trim_features(&cenv
->cpuid_features
,
1242 kvm_arch_get_supported_cpuid(cenv
, 1, R_EDX
));
1244 /* prevent the hypervisor bit from being cleared by the kernel */
1245 i
= cenv
->cpuid_ext_features
& CPUID_EXT_HYPERVISOR
;
1246 kvm_trim_features(&cenv
->cpuid_ext_features
,
1247 kvm_arch_get_supported_cpuid(cenv
, 1, R_ECX
));
1248 cenv
->cpuid_ext_features
|= i
;
1250 kvm_trim_features(&cenv
->cpuid_ext2_features
,
1251 kvm_arch_get_supported_cpuid(cenv
, 0x80000001, R_EDX
));
1252 kvm_trim_features(&cenv
->cpuid_ext3_features
,
1253 kvm_arch_get_supported_cpuid(cenv
, 0x80000001, R_ECX
));
1257 copy
.regs
[R_EAX
] = 0;
1258 qemu_kvm_cpuid_on_env(©
);
1259 limit
= copy
.regs
[R_EAX
];
1261 for (i
= 0; i
<= limit
; ++i
) {
1262 if (i
== 4 || i
== 0xb || i
== 0xd) {
1263 for (j
= 0; ; ++j
) {
1264 do_cpuid_ent(&cpuid_ent
[cpuid_nent
], i
, j
, ©
);
1266 cpuid_ent
[cpuid_nent
].flags
= KVM_CPUID_FLAG_SIGNIFCANT_INDEX
;
1267 cpuid_ent
[cpuid_nent
].index
= j
;
1271 if (i
== 4 && copy
.regs
[R_EAX
] == 0)
1273 if (i
== 0xb && !(copy
.regs
[R_ECX
] & 0xff00))
1275 if (i
== 0xd && copy
.regs
[R_EAX
] == 0)
1279 do_cpuid_ent(&cpuid_ent
[cpuid_nent
++], i
, 0, ©
);
1282 copy
.regs
[R_EAX
] = 0x80000000;
1283 qemu_kvm_cpuid_on_env(©
);
1284 limit
= copy
.regs
[R_EAX
];
1286 for (i
= 0x80000000; i
<= limit
; ++i
)
1287 do_cpuid_ent(&cpuid_ent
[cpuid_nent
++], i
, 0, ©
);
1289 kvm_setup_cpuid2(cenv
, cpuid_nent
, cpuid_ent
);
1292 if (((cenv
->cpuid_version
>> 8)&0xF) >= 6
1293 && (cenv
->cpuid_features
&(CPUID_MCE
|CPUID_MCA
)) == (CPUID_MCE
|CPUID_MCA
)
1294 && kvm_check_extension(kvm_state
, KVM_CAP_MCE
) > 0) {
1298 if (kvm_get_mce_cap_supported(kvm_context
, &mcg_cap
, &banks
))
1299 perror("kvm_get_mce_cap_supported FAILED");
1301 if (banks
> MCE_BANKS_DEF
)
1302 banks
= MCE_BANKS_DEF
;
1303 mcg_cap
&= MCE_CAP_DEF
;
1305 if (kvm_setup_mce(cenv
, &mcg_cap
))
1306 perror("kvm_setup_mce FAILED");
1308 cenv
->mcg_cap
= mcg_cap
;
1313 #ifdef KVM_EXIT_TPR_ACCESS
1314 kvm_tpr_vcpu_start(cenv
);
1319 int kvm_arch_halt(CPUState
*env
)
1322 if (!((env
->interrupt_request
& CPU_INTERRUPT_HARD
) &&
1323 (env
->eflags
& IF_MASK
)) &&
1324 !(env
->interrupt_request
& CPU_INTERRUPT_NMI
)) {
1330 int kvm_arch_pre_run(CPUState
*env
, struct kvm_run
*run
)
1332 if (env
->update_vapic
) {
1333 kvm_tpr_enable_vapic(env
);
1335 if (!kvm_irqchip_in_kernel())
1336 kvm_set_cr8(env
, cpu_get_apic_tpr(env
));
1340 int kvm_arch_has_work(CPUState
*env
)
1342 if (((env
->interrupt_request
& CPU_INTERRUPT_HARD
) &&
1343 (env
->eflags
& IF_MASK
)) ||
1344 (env
->interrupt_request
& CPU_INTERRUPT_NMI
))
1349 int kvm_arch_try_push_interrupts(void *opaque
)
1351 CPUState
*env
= cpu_single_env
;
1354 if (kvm_is_ready_for_interrupt_injection(env
) &&
1355 (env
->interrupt_request
& CPU_INTERRUPT_HARD
) &&
1356 (env
->eflags
& IF_MASK
)) {
1357 env
->interrupt_request
&= ~CPU_INTERRUPT_HARD
;
1358 irq
= cpu_get_pic_interrupt(env
);
1360 r
= kvm_inject_irq(env
, irq
);
1362 printf("cpu %d fail inject %x\n", env
->cpu_index
, irq
);
1366 return (env
->interrupt_request
& CPU_INTERRUPT_HARD
) != 0;
1369 #ifdef KVM_CAP_USER_NMI
1370 void kvm_arch_push_nmi(void *opaque
)
1372 CPUState
*env
= cpu_single_env
;
1375 if (likely(!(env
->interrupt_request
& CPU_INTERRUPT_NMI
)))
1378 env
->interrupt_request
&= ~CPU_INTERRUPT_NMI
;
1379 r
= kvm_inject_nmi(env
);
1381 printf("cpu %d fail inject NMI\n", env
->cpu_index
);
1383 #endif /* KVM_CAP_USER_NMI */
1385 void kvm_arch_cpu_reset(CPUState
*env
)
1387 kvm_arch_reset_vcpu(env
);
1388 kvm_arch_load_regs(env
);
1389 kvm_put_vcpu_events(env
);
1390 if (!cpu_is_bsp(env
)) {
1391 if (kvm_irqchip_in_kernel()) {
1392 #ifdef KVM_CAP_MP_STATE
1393 kvm_reset_mpstate(env
);
1396 env
->interrupt_request
&= ~CPU_INTERRUPT_HARD
;
1402 #ifdef CONFIG_KVM_DEVICE_ASSIGNMENT
1403 void kvm_arch_do_ioperm(void *_data
)
1405 struct ioperm_data
*data
= _data
;
1406 ioperm(data
->start_port
, data
->num
, data
->turn_on
);
1411 * Setup x86 specific IRQ routing
1413 int kvm_arch_init_irq_routing(void)
1417 if (kvm_irqchip
&& kvm_has_gsi_routing(kvm_context
)) {
1418 kvm_clear_gsi_routes(kvm_context
);
1419 for (i
= 0; i
< 8; ++i
) {
1422 r
= kvm_add_irq_route(kvm_context
, i
, KVM_IRQCHIP_PIC_MASTER
, i
);
1426 for (i
= 8; i
< 16; ++i
) {
1427 r
= kvm_add_irq_route(kvm_context
, i
, KVM_IRQCHIP_PIC_SLAVE
, i
- 8);
1431 for (i
= 0; i
< 24; ++i
) {
1433 r
= kvm_add_irq_route(kvm_context
, i
, KVM_IRQCHIP_IOAPIC
, 2);
1434 } else if (i
!= 2) {
1435 r
= kvm_add_irq_route(kvm_context
, i
, KVM_IRQCHIP_IOAPIC
, i
);
1440 kvm_commit_irq_routes(kvm_context
);
1445 void kvm_arch_process_irqchip_events(CPUState
*env
)
1447 if (env
->interrupt_request
& CPU_INTERRUPT_INIT
) {
1448 kvm_cpu_synchronize_state(env
);
1451 if (env
->interrupt_request
& CPU_INTERRUPT_SIPI
) {
1452 kvm_cpu_synchronize_state(env
);