Lines Matching defs:sregs
11307 static void __get_sregs_common(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs)
11314 kvm_get_segment(vcpu, &sregs->cs, VCPU_SREG_CS);
11315 kvm_get_segment(vcpu, &sregs->ds, VCPU_SREG_DS);
11316 kvm_get_segment(vcpu, &sregs->es, VCPU_SREG_ES);
11317 kvm_get_segment(vcpu, &sregs->fs, VCPU_SREG_FS);
11318 kvm_get_segment(vcpu, &sregs->gs, VCPU_SREG_GS);
11319 kvm_get_segment(vcpu, &sregs->ss, VCPU_SREG_SS);
11321 kvm_get_segment(vcpu, &sregs->tr, VCPU_SREG_TR);
11322 kvm_get_segment(vcpu, &sregs->ldt, VCPU_SREG_LDTR);
11325 sregs->idt.limit = dt.size;
11326 sregs->idt.base = dt.address;
11328 sregs->gdt.limit = dt.size;
11329 sregs->gdt.base = dt.address;
11331 sregs->cr2 = vcpu->arch.cr2;
11332 sregs->cr3 = kvm_read_cr3(vcpu);
11335 sregs->cr0 = kvm_read_cr0(vcpu);
11336 sregs->cr4 = kvm_read_cr4(vcpu);
11337 sregs->cr8 = kvm_get_cr8(vcpu);
11338 sregs->efer = vcpu->arch.efer;
11339 sregs->apic_base = kvm_get_apic_base(vcpu);
11342 static void __get_sregs(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs)
11344 __get_sregs_common(vcpu, sregs);
11351 (unsigned long *)sregs->interrupt_bitmap);
11371 struct kvm_sregs *sregs)
11374 __get_sregs(vcpu, sregs);
11478 static bool kvm_is_valid_sregs(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs)
11480 if ((sregs->efer & EFER_LME) && (sregs->cr0 & X86_CR0_PG)) {
11486 if (!(sregs->cr4 & X86_CR4_PAE) || !(sregs->efer & EFER_LMA))
11488 if (kvm_vcpu_is_illegal_gpa(vcpu, sregs->cr3))
11495 if (sregs->efer & EFER_LMA || sregs->cs.l)
11499 return kvm_is_valid_cr4(vcpu, sregs->cr4) &&
11500 kvm_is_valid_cr0(vcpu, sregs->cr0);
11503 static int __set_sregs_common(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs,
11510 if (!kvm_is_valid_sregs(vcpu, sregs))
11513 apic_base_msr.data = sregs->apic_base;
11521 dt.size = sregs->idt.limit;
11522 dt.address = sregs->idt.base;
11524 dt.size = sregs->gdt.limit;
11525 dt.address = sregs->gdt.base;
11528 vcpu->arch.cr2 = sregs->cr2;
11529 *mmu_reset_needed |= kvm_read_cr3(vcpu) != sregs->cr3;
11530 vcpu->arch.cr3 = sregs->cr3;
11532 static_call_cond(kvm_x86_post_set_cr3)(vcpu, sregs->cr3);
11534 kvm_set_cr8(vcpu, sregs->cr8);
11536 *mmu_reset_needed |= vcpu->arch.efer != sregs->efer;
11537 static_call(kvm_x86_set_efer)(vcpu, sregs->efer);
11539 *mmu_reset_needed |= kvm_read_cr0(vcpu) != sregs->cr0;
11540 static_call(kvm_x86_set_cr0)(vcpu, sregs->cr0);
11541 vcpu->arch.cr0 = sregs->cr0;
11543 *mmu_reset_needed |= kvm_read_cr4(vcpu) != sregs->cr4;
11544 static_call(kvm_x86_set_cr4)(vcpu, sregs->cr4);
11555 kvm_set_segment(vcpu, &sregs->cs, VCPU_SREG_CS);
11556 kvm_set_segment(vcpu, &sregs->ds, VCPU_SREG_DS);
11557 kvm_set_segment(vcpu, &sregs->es, VCPU_SREG_ES);
11558 kvm_set_segment(vcpu, &sregs->fs, VCPU_SREG_FS);
11559 kvm_set_segment(vcpu, &sregs->gs, VCPU_SREG_GS);
11560 kvm_set_segment(vcpu, &sregs->ss, VCPU_SREG_SS);
11562 kvm_set_segment(vcpu, &sregs->tr, VCPU_SREG_TR);
11563 kvm_set_segment(vcpu, &sregs->ldt, VCPU_SREG_LDTR);
11569 sregs->cs.selector == 0xf000 && sregs->cs.base == 0xffff0000 &&
11576 static int __set_sregs(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs)
11580 int ret = __set_sregs_common(vcpu, sregs, &mmu_reset_needed, true);
11590 (const unsigned long *)sregs->interrupt_bitmap, max_bits);
11633 struct kvm_sregs *sregs)
11638 ret = __set_sregs(vcpu, sregs);
11804 __get_sregs(vcpu, &vcpu->run->s.regs.sregs);
11819 struct kvm_sregs sregs = vcpu->run->s.regs.sregs;
11821 if (__set_sregs(vcpu, &sregs))