Lines Matching refs:sregs
9684 static void __get_sregs(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs) in __get_sregs() argument
9688 kvm_get_segment(vcpu, &sregs->cs, VCPU_SREG_CS); in __get_sregs()
9689 kvm_get_segment(vcpu, &sregs->ds, VCPU_SREG_DS); in __get_sregs()
9690 kvm_get_segment(vcpu, &sregs->es, VCPU_SREG_ES); in __get_sregs()
9691 kvm_get_segment(vcpu, &sregs->fs, VCPU_SREG_FS); in __get_sregs()
9692 kvm_get_segment(vcpu, &sregs->gs, VCPU_SREG_GS); in __get_sregs()
9693 kvm_get_segment(vcpu, &sregs->ss, VCPU_SREG_SS); in __get_sregs()
9695 kvm_get_segment(vcpu, &sregs->tr, VCPU_SREG_TR); in __get_sregs()
9696 kvm_get_segment(vcpu, &sregs->ldt, VCPU_SREG_LDTR); in __get_sregs()
9699 sregs->idt.limit = dt.size; in __get_sregs()
9700 sregs->idt.base = dt.address; in __get_sregs()
9702 sregs->gdt.limit = dt.size; in __get_sregs()
9703 sregs->gdt.base = dt.address; in __get_sregs()
9705 sregs->cr0 = kvm_read_cr0(vcpu); in __get_sregs()
9706 sregs->cr2 = vcpu->arch.cr2; in __get_sregs()
9707 sregs->cr3 = kvm_read_cr3(vcpu); in __get_sregs()
9708 sregs->cr4 = kvm_read_cr4(vcpu); in __get_sregs()
9709 sregs->cr8 = kvm_get_cr8(vcpu); in __get_sregs()
9710 sregs->efer = vcpu->arch.efer; in __get_sregs()
9711 sregs->apic_base = kvm_get_apic_base(vcpu); in __get_sregs()
9713 memset(sregs->interrupt_bitmap, 0, sizeof(sregs->interrupt_bitmap)); in __get_sregs()
9717 (unsigned long *)sregs->interrupt_bitmap); in __get_sregs()
9721 struct kvm_sregs *sregs) in kvm_arch_vcpu_ioctl_get_sregs() argument
9724 __get_sregs(vcpu, sregs); in kvm_arch_vcpu_ioctl_get_sregs()
9806 static int kvm_valid_sregs(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs) in kvm_valid_sregs() argument
9808 if ((sregs->efer & EFER_LME) && (sregs->cr0 & X86_CR0_PG)) { in kvm_valid_sregs()
9814 if (!(sregs->cr4 & X86_CR4_PAE) in kvm_valid_sregs()
9815 || !(sregs->efer & EFER_LMA)) in kvm_valid_sregs()
9817 if (sregs->cr3 & vcpu->arch.cr3_lm_rsvd_bits) in kvm_valid_sregs()
9824 if (sregs->efer & EFER_LMA || sregs->cs.l) in kvm_valid_sregs()
9828 return kvm_valid_cr4(vcpu, sregs->cr4); in kvm_valid_sregs()
9831 static int __set_sregs(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs) in __set_sregs() argument
9840 if (kvm_valid_sregs(vcpu, sregs)) in __set_sregs()
9843 apic_base_msr.data = sregs->apic_base; in __set_sregs()
9848 dt.size = sregs->idt.limit; in __set_sregs()
9849 dt.address = sregs->idt.base; in __set_sregs()
9851 dt.size = sregs->gdt.limit; in __set_sregs()
9852 dt.address = sregs->gdt.base; in __set_sregs()
9855 vcpu->arch.cr2 = sregs->cr2; in __set_sregs()
9856 mmu_reset_needed |= kvm_read_cr3(vcpu) != sregs->cr3; in __set_sregs()
9857 vcpu->arch.cr3 = sregs->cr3; in __set_sregs()
9860 kvm_set_cr8(vcpu, sregs->cr8); in __set_sregs()
9862 mmu_reset_needed |= vcpu->arch.efer != sregs->efer; in __set_sregs()
9863 kvm_x86_ops.set_efer(vcpu, sregs->efer); in __set_sregs()
9865 mmu_reset_needed |= kvm_read_cr0(vcpu) != sregs->cr0; in __set_sregs()
9866 kvm_x86_ops.set_cr0(vcpu, sregs->cr0); in __set_sregs()
9867 vcpu->arch.cr0 = sregs->cr0; in __set_sregs()
9869 mmu_reset_needed |= kvm_read_cr4(vcpu) != sregs->cr4; in __set_sregs()
9870 cpuid_update_needed |= ((kvm_read_cr4(vcpu) ^ sregs->cr4) & in __set_sregs()
9872 kvm_x86_ops.set_cr4(vcpu, sregs->cr4); in __set_sregs()
9888 (const unsigned long *)sregs->interrupt_bitmap, max_bits); in __set_sregs()
9894 kvm_set_segment(vcpu, &sregs->cs, VCPU_SREG_CS); in __set_sregs()
9895 kvm_set_segment(vcpu, &sregs->ds, VCPU_SREG_DS); in __set_sregs()
9896 kvm_set_segment(vcpu, &sregs->es, VCPU_SREG_ES); in __set_sregs()
9897 kvm_set_segment(vcpu, &sregs->fs, VCPU_SREG_FS); in __set_sregs()
9898 kvm_set_segment(vcpu, &sregs->gs, VCPU_SREG_GS); in __set_sregs()
9899 kvm_set_segment(vcpu, &sregs->ss, VCPU_SREG_SS); in __set_sregs()
9901 kvm_set_segment(vcpu, &sregs->tr, VCPU_SREG_TR); in __set_sregs()
9902 kvm_set_segment(vcpu, &sregs->ldt, VCPU_SREG_LDTR); in __set_sregs()
9908 sregs->cs.selector == 0xf000 && sregs->cs.base == 0xffff0000 && in __set_sregs()
9920 struct kvm_sregs *sregs) in kvm_arch_vcpu_ioctl_set_sregs() argument
9925 ret = __set_sregs(vcpu, sregs); in kvm_arch_vcpu_ioctl_set_sregs()
10060 __get_sregs(vcpu, &vcpu->run->s.regs.sregs); in store_regs()
10077 if (__set_sregs(vcpu, &vcpu->run->s.regs.sregs)) in sync_regs()