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:
parent
7c80eef899
commit
204204308b
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user