kvm: allow qemu to set EPT identity mapping address

If we use larger BIOS image than current 256KB, we would need move reserved
TSS and EPT identity mapping pages. Currently TSS support this, but not
EPT.

Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
Sheng Yang 2010-03-23 13:37:12 -03:00 committed by Marcelo Tosatti
parent 7c80eef899
commit 204204308b

View File

@ -326,6 +326,25 @@ static int kvm_has_msr_star(CPUState *env)
return 0;
}
static int kvm_init_identity_map_page(KVMState *s)
{
#ifdef KVM_CAP_SET_IDENTITY_MAP_ADDR
int ret;
uint64_t addr = 0xfffbc000;
if (!kvm_check_extension(s, KVM_CAP_SET_IDENTITY_MAP_ADDR)) {
return 0;
}
ret = kvm_vm_ioctl(s, KVM_SET_IDENTITY_MAP_ADDR, &addr);
if (ret < 0) {
fprintf(stderr, "kvm_set_identity_map_addr: %s\n", strerror(ret));
return ret;
}
#endif
return 0;
}
int kvm_arch_init(KVMState *s, int smp_cpus)
{
int ret;
@ -353,7 +372,12 @@ int kvm_arch_init(KVMState *s, int smp_cpus)
perror("e820_add_entry() table is full");
exit(1);
}
return kvm_vm_ioctl(s, KVM_SET_TSS_ADDR, 0xfffbd000);
ret = kvm_vm_ioctl(s, KVM_SET_TSS_ADDR, 0xfffbd000);
if (ret < 0) {
return ret;
}
return kvm_init_identity_map_page(s);
}
static void set_v8086_seg(struct kvm_segment *lhs, const SegmentCache *rhs)