diff options
-rw-r--r-- | arch/x86/kvm/emulate.c | 10 | ||||
-rw-r--r-- | arch/x86/kvm/x86.c | 2 |
2 files changed, 8 insertions, 4 deletions
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c index b372a7557c16..9da95b9daf8d 100644 --- a/arch/x86/kvm/emulate.c +++ b/arch/x86/kvm/emulate.c | |||
@@ -2418,7 +2418,7 @@ static int rsm_load_state_64(struct x86_emulate_ctxt *ctxt, u64 smbase) | |||
2418 | u64 val, cr0, cr4; | 2418 | u64 val, cr0, cr4; |
2419 | u32 base3; | 2419 | u32 base3; |
2420 | u16 selector; | 2420 | u16 selector; |
2421 | int i; | 2421 | int i, r; |
2422 | 2422 | ||
2423 | for (i = 0; i < 16; i++) | 2423 | for (i = 0; i < 16; i++) |
2424 | *reg_write(ctxt, i) = GET_SMSTATE(u64, smbase, 0x7ff8 - i * 8); | 2424 | *reg_write(ctxt, i) = GET_SMSTATE(u64, smbase, 0x7ff8 - i * 8); |
@@ -2460,13 +2460,17 @@ static int rsm_load_state_64(struct x86_emulate_ctxt *ctxt, u64 smbase) | |||
2460 | dt.address = GET_SMSTATE(u64, smbase, 0x7e68); | 2460 | dt.address = GET_SMSTATE(u64, smbase, 0x7e68); |
2461 | ctxt->ops->set_gdt(ctxt, &dt); | 2461 | ctxt->ops->set_gdt(ctxt, &dt); |
2462 | 2462 | ||
2463 | r = rsm_enter_protected_mode(ctxt, cr0, cr4); | ||
2464 | if (r != X86EMUL_CONTINUE) | ||
2465 | return r; | ||
2466 | |||
2463 | for (i = 0; i < 6; i++) { | 2467 | for (i = 0; i < 6; i++) { |
2464 | int r = rsm_load_seg_64(ctxt, smbase, i); | 2468 | r = rsm_load_seg_64(ctxt, smbase, i); |
2465 | if (r != X86EMUL_CONTINUE) | 2469 | if (r != X86EMUL_CONTINUE) |
2466 | return r; | 2470 | return r; |
2467 | } | 2471 | } |
2468 | 2472 | ||
2469 | return rsm_enter_protected_mode(ctxt, cr0, cr4); | 2473 | return X86EMUL_CONTINUE; |
2470 | } | 2474 | } |
2471 | 2475 | ||
2472 | static int em_rsm(struct x86_emulate_ctxt *ctxt) | 2476 | static int em_rsm(struct x86_emulate_ctxt *ctxt) |
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index ba1a968b829a..e28954d2698a 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -7564,7 +7564,7 @@ void kvm_arch_sync_events(struct kvm *kvm) | |||
7564 | int __x86_set_memory_region(struct kvm *kvm, int id, gpa_t gpa, u32 size) | 7564 | int __x86_set_memory_region(struct kvm *kvm, int id, gpa_t gpa, u32 size) |
7565 | { | 7565 | { |
7566 | int i, r; | 7566 | int i, r; |
7567 | u64 hva; | 7567 | unsigned long hva; |
7568 | struct kvm_memslots *slots = kvm_memslots(kvm); | 7568 | struct kvm_memslots *slots = kvm_memslots(kvm); |
7569 | struct kvm_memory_slot *slot, old; | 7569 | struct kvm_memory_slot *slot, old; |
7570 | 7570 | ||