Lines Matching refs:vmcb
326 void kvm_vmcb_set_intercept(struct kvm_vmcb *vmcb, unsigned int id,
335 vmcb->intercepts[addr] |= bit;
337 vmcb->intercepts[addr] &= ~bit;
340 void kvm_init_guest_vmcb(struct kvm_vmcb *vmcb, uint32_t asid, uint16_t ss,
349 kvm_vmcb_set_intercept(vmcb, SVM_INTERCEPT_VMRUN, 1);
350 kvm_vmcb_set_intercept(vmcb, SVM_INTERCEPT_HLT, 1);
352 kvm_vmcb_copy_gdt_descriptor(&vmcb->es, sregs.es >> 3);
353 kvm_vmcb_copy_gdt_descriptor(&vmcb->cs, sregs.cs >> 3);
354 kvm_vmcb_copy_gdt_descriptor(&vmcb->ss, ss);
355 kvm_vmcb_copy_gdt_descriptor(&vmcb->ds, sregs.ds >> 3);
356 kvm_vmcb_copy_gdt_descriptor(&vmcb->fs, sregs.fs >> 3);
357 kvm_vmcb_copy_gdt_descriptor(&vmcb->gs, sregs.gs >> 3);
358 vmcb->gdtr.base = (uintptr_t)kvm_gdt;
359 vmcb->gdtr.limit = (KVM_GDT_SIZE*sizeof(struct segment_descriptor)) - 1;
360 vmcb->idtr.base = (uintptr_t)kvm_idt;
361 vmcb->idtr.limit = (X86_INTR_COUNT*sizeof(struct intr_descriptor)) - 1;
363 vmcb->guest_asid = asid;
364 vmcb->efer = kvm_rdmsr(MSR_EFER);
365 vmcb->cr0 = cregs.cr0;
366 vmcb->cr3 = cregs.cr3;
367 vmcb->cr4 = cregs.cr4;
368 vmcb->rip = (uintptr_t)kvm_svm_guest_entry;
369 vmcb->rax = (uintptr_t)guest_main;
370 vmcb->rsp = (uintptr_t)rsp;
371 vmcb->rflags = 0x200; /* Interrupts enabled */
379 struct kvm_vmcb *vmcb;
382 vmcb = kvm_alloc_vmcb();
390 kvm_init_guest_vmcb(vmcb, 1, ss, stack, guest_main);
393 ret->vmcb = vmcb;