[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 14/18] Nested Virtualization: svm specific implementation
> +static int nsvm_vmrun_permissionmap(struct vcpu *v) > +{ > + struct arch_svm_struct *arch_svm = &v->arch.hvm_svm; > + struct vmcb_struct *ns_vmcb = VCPU_NESTEDHVM(v).nh_vmcb; > + struct vmcb_struct *host_vmcb = arch_svm->vmcb; > + unsigned long *ns_iopm_ptr, *ns_msrpm_ptr; > + unsigned int i; > + /* Must be static or hvm_copy_from_guest_phys fails, otherwise. */ > + static uint8_t ns_iopm[IOPM_SIZE] __attribute__((__aligned__)); > + static uint8_t ns_msrpm[MSRPM_SIZE] __attribute__((__aligned__)); *boggle* Maybe I missed the locking that makes this safe. Tim. > + > + ns_iopm_ptr = (unsigned long *)ns_iopm; > + ns_msrpm_ptr = (unsigned long *)ns_msrpm; > + > + hvm_copy_from_guest_phys(ns_iopm, ns_vmcb->iopm_base_pa, IOPM_SIZE); > + hvm_copy_from_guest_phys(ns_msrpm, ns_vmcb->msrpm_base_pa, MSRPM_SIZE); > + /* hvm_io_bitmap has type unsigned long, thus > + * BYTES_PER_LONG. > + */ > + for (i = 0; i < IOPM_SIZE / BYTES_PER_LONG; i++) > + VCPU_NESTEDHVM(v).nh_iopm[i] = hvm_io_bitmap[i] | ns_iopm_ptr[i]; > + > + /* v->arch.hvm_svm.msrpm has type unsigned long, thus > + * BYTES_PER_LONG. > + */ > + for (i = 0; i < MSRPM_SIZE / BYTES_PER_LONG; i++) > + VCPU_NESTEDHVM(v).nh_msrpm[i] = arch_svm->msrpm[i] | ns_msrpm_ptr[i]; > + > + host_vmcb->iopm_base_pa = > + (uint64_t)virt_to_maddr(VCPU_NESTEDHVM(v).nh_iopm); > + host_vmcb->msrpm_base_pa = > + (uint64_t)virt_to_maddr(VCPU_NESTEDHVM(v).nh_msrpm); > + > + return 0; > +} -- Tim Deegan <Tim.Deegan@xxxxxxxxxx> Principal Software Engineer, XenServer Engineering Citrix Systems UK Ltd. (Company #02937203, SL9 0BG) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |