Skip to content

Commit

Permalink
kvm: use global_sregs to store all system regs
Browse files Browse the repository at this point in the history
  • Loading branch information
stsp committed Jun 18, 2021
1 parent e1fce31 commit ed248bf
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/base/emu-i386/kvm.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,8 @@ static volatile int mprotected_kvm = 0;
#define MAXSLOT 400
static struct kvm_userspace_memory_region maps[MAXSLOT];

static struct kvm_sregs global_sregs;

static int init_kvm_vcpu(void);

static void set_idt_default(dosaddr_t mon, int i)
Expand Down Expand Up @@ -330,6 +332,8 @@ void init_kvm_monitor(void)
sregs->ss.db = 1;
sregs->ss.g = 1;

global_sregs = *sregs;

if (config.cpu_vm == CPUVM_KVM)
warn("Using V86 mode inside KVM\n");
}
Expand Down Expand Up @@ -944,6 +948,8 @@ int kvm_vm86(struct vm86_struct *info)
kregs->rflags &= (SAFE_MASK | X86_EFLAGS_VIF | X86_EFLAGS_VIP);
kregs->rflags |= X86_EFLAGS_FIXED | X86_EFLAGS_VM | X86_EFLAGS_IF;
run->kvm_dirty_regs |= KVM_SYNC_X86_REGS;

*sregs = global_sregs;
set_vm86_seg(&sregs->cs, regs->cs);
set_vm86_seg(&sregs->ds, regs->ds);
set_vm86_seg(&sregs->es, regs->es);
Expand Down Expand Up @@ -1027,6 +1033,7 @@ int kvm_dpmi(sigcontext_t *scp)
kregs->rflags |= X86_EFLAGS_FIXED | X86_EFLAGS_IF;
run->kvm_dirty_regs |= KVM_SYNC_X86_REGS;

*sregs = global_sregs;
set_ldt_seg(&sregs->cs, _cs);
set_ldt_seg(&sregs->ds, _ds);
set_ldt_seg(&sregs->es, _es);
Expand Down

0 comments on commit ed248bf

Please sign in to comment.