Lines Matching refs:sregs
10482 static void __get_sregs_common(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs) in __get_sregs_common() argument
10489 kvm_get_segment(vcpu, &sregs->cs, VCPU_SREG_CS); in __get_sregs_common()
10490 kvm_get_segment(vcpu, &sregs->ds, VCPU_SREG_DS); in __get_sregs_common()
10491 kvm_get_segment(vcpu, &sregs->es, VCPU_SREG_ES); in __get_sregs_common()
10492 kvm_get_segment(vcpu, &sregs->fs, VCPU_SREG_FS); in __get_sregs_common()
10493 kvm_get_segment(vcpu, &sregs->gs, VCPU_SREG_GS); in __get_sregs_common()
10494 kvm_get_segment(vcpu, &sregs->ss, VCPU_SREG_SS); in __get_sregs_common()
10496 kvm_get_segment(vcpu, &sregs->tr, VCPU_SREG_TR); in __get_sregs_common()
10497 kvm_get_segment(vcpu, &sregs->ldt, VCPU_SREG_LDTR); in __get_sregs_common()
10500 sregs->idt.limit = dt.size; in __get_sregs_common()
10501 sregs->idt.base = dt.address; in __get_sregs_common()
10503 sregs->gdt.limit = dt.size; in __get_sregs_common()
10504 sregs->gdt.base = dt.address; in __get_sregs_common()
10506 sregs->cr2 = vcpu->arch.cr2; in __get_sregs_common()
10507 sregs->cr3 = kvm_read_cr3(vcpu); in __get_sregs_common()
10510 sregs->cr0 = kvm_read_cr0(vcpu); in __get_sregs_common()
10511 sregs->cr4 = kvm_read_cr4(vcpu); in __get_sregs_common()
10512 sregs->cr8 = kvm_get_cr8(vcpu); in __get_sregs_common()
10513 sregs->efer = vcpu->arch.efer; in __get_sregs_common()
10514 sregs->apic_base = kvm_get_apic_base(vcpu); in __get_sregs_common()
10517 static void __get_sregs(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs) in __get_sregs() argument
10519 __get_sregs_common(vcpu, sregs); in __get_sregs()
10526 (unsigned long *)sregs->interrupt_bitmap); in __get_sregs()
10546 struct kvm_sregs *sregs) in kvm_arch_vcpu_ioctl_get_sregs() argument
10549 __get_sregs(vcpu, sregs); in kvm_arch_vcpu_ioctl_get_sregs()
10639 static bool kvm_is_valid_sregs(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs) in kvm_is_valid_sregs() argument
10641 if ((sregs->efer & EFER_LME) && (sregs->cr0 & X86_CR0_PG)) { in kvm_is_valid_sregs()
10647 if (!(sregs->cr4 & X86_CR4_PAE) || !(sregs->efer & EFER_LMA)) in kvm_is_valid_sregs()
10649 if (kvm_vcpu_is_illegal_gpa(vcpu, sregs->cr3)) in kvm_is_valid_sregs()
10656 if (sregs->efer & EFER_LMA || sregs->cs.l) in kvm_is_valid_sregs()
10660 return kvm_is_valid_cr4(vcpu, sregs->cr4) && in kvm_is_valid_sregs()
10661 kvm_is_valid_cr0(vcpu, sregs->cr0); in kvm_is_valid_sregs()
10664 static int __set_sregs_common(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs, in __set_sregs_common() argument
10671 if (!kvm_is_valid_sregs(vcpu, sregs)) in __set_sregs_common()
10674 apic_base_msr.data = sregs->apic_base; in __set_sregs_common()
10682 dt.size = sregs->idt.limit; in __set_sregs_common()
10683 dt.address = sregs->idt.base; in __set_sregs_common()
10685 dt.size = sregs->gdt.limit; in __set_sregs_common()
10686 dt.address = sregs->gdt.base; in __set_sregs_common()
10689 vcpu->arch.cr2 = sregs->cr2; in __set_sregs_common()
10690 *mmu_reset_needed |= kvm_read_cr3(vcpu) != sregs->cr3; in __set_sregs_common()
10691 vcpu->arch.cr3 = sregs->cr3; in __set_sregs_common()
10694 kvm_set_cr8(vcpu, sregs->cr8); in __set_sregs_common()
10696 *mmu_reset_needed |= vcpu->arch.efer != sregs->efer; in __set_sregs_common()
10697 static_call(kvm_x86_set_efer)(vcpu, sregs->efer); in __set_sregs_common()
10699 *mmu_reset_needed |= kvm_read_cr0(vcpu) != sregs->cr0; in __set_sregs_common()
10700 static_call(kvm_x86_set_cr0)(vcpu, sregs->cr0); in __set_sregs_common()
10701 vcpu->arch.cr0 = sregs->cr0; in __set_sregs_common()
10703 *mmu_reset_needed |= kvm_read_cr4(vcpu) != sregs->cr4; in __set_sregs_common()
10704 static_call(kvm_x86_set_cr4)(vcpu, sregs->cr4); in __set_sregs_common()
10715 kvm_set_segment(vcpu, &sregs->cs, VCPU_SREG_CS); in __set_sregs_common()
10716 kvm_set_segment(vcpu, &sregs->ds, VCPU_SREG_DS); in __set_sregs_common()
10717 kvm_set_segment(vcpu, &sregs->es, VCPU_SREG_ES); in __set_sregs_common()
10718 kvm_set_segment(vcpu, &sregs->fs, VCPU_SREG_FS); in __set_sregs_common()
10719 kvm_set_segment(vcpu, &sregs->gs, VCPU_SREG_GS); in __set_sregs_common()
10720 kvm_set_segment(vcpu, &sregs->ss, VCPU_SREG_SS); in __set_sregs_common()
10722 kvm_set_segment(vcpu, &sregs->tr, VCPU_SREG_TR); in __set_sregs_common()
10723 kvm_set_segment(vcpu, &sregs->ldt, VCPU_SREG_LDTR); in __set_sregs_common()
10729 sregs->cs.selector == 0xf000 && sregs->cs.base == 0xffff0000 && in __set_sregs_common()
10736 static int __set_sregs(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs) in __set_sregs() argument
10740 int ret = __set_sregs_common(vcpu, sregs, &mmu_reset_needed, true); in __set_sregs()
10750 (const unsigned long *)sregs->interrupt_bitmap, max_bits); in __set_sregs()
10793 struct kvm_sregs *sregs) in kvm_arch_vcpu_ioctl_set_sregs() argument
10798 ret = __set_sregs(vcpu, sregs); in kvm_arch_vcpu_ioctl_set_sregs()
10941 __get_sregs(vcpu, &vcpu->run->s.regs.sregs); in store_regs()
10955 if (__set_sregs(vcpu, &vcpu->run->s.regs.sregs)) in sync_regs()