[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [v7][RFC][PATCH 06/13] hvmloader/ram: check if guest memory is out of reserved device memory maps
>>> On 07.11.14 at 11:27, <tiejun.chen@xxxxxxxxx> wrote: > Are you saying Xen restrict some BDFs specific to emulate some devices? > But I don't see these associated codes. I didn't say so. All I said that some of the SBDFs are being used by them. >>> --- a/xen/include/xen/iommu.h >>> +++ b/xen/include/xen/iommu.h >>> @@ -158,14 +158,14 @@ struct iommu_ops { >>> void (*crash_shutdown)(void); >>> void (*iotlb_flush)(struct domain *d, unsigned long gfn, unsigned >>> int page_count); >>> void (*iotlb_flush_all)(struct domain *d); >>> - int (*get_reserved_device_memory)(iommu_grdm_t *, void *); >>> + int (*get_reserved_device_memory)(iommu_grdm_t *, struct domain *, >>> void *); >>> void (*dump_p2m_table)(struct domain *d); >>> }; >>> >>> void iommu_suspend(void); >>> void iommu_resume(void); >>> void iommu_crash_shutdown(void); >>> -int iommu_get_reserved_device_memory(iommu_grdm_t *, void *); >>> +int iommu_get_reserved_device_memory(iommu_grdm_t *, struct domain *, void >>> *); >> >> I don't see why these generic interfaces would need to change; >> the only thing that would seem to need changing is the callback >> function (and of course the context passed to it). > > I'm not 100% sure if we can call current->domain in all scenarios. If > you can help me confirm this I'd really like to remove this change :) > Now I assume this should be true as follows: Which is wrong, and not what I said. Instead you should pass the domain as part of the context that gets made available to the callback function. > --- a/xen/drivers/passthrough/pci.c > +++ b/xen/drivers/passthrough/pci.c > @@ -1540,6 +1540,34 @@ int iommu_do_pci_domctl( > } > break; > > + case XEN_DOMCTL_set_rdm: > + { > + struct xen_domctl_set_rdm *xdsr = &domctl->u.set_rdm; > + struct xen_guest_pcidev_info *pcidevs; > + int i; > + > + pcidevs = xmalloc_array(xen_guest_pcidev_info_t, > + domctl->u.set_rdm.num_pcidevs); > + if ( pcidevs == NULL ) > + { > + return -ENOMEM; > + } > + > + for ( i = 0; i < xdsr->num_pcidevs; ++i ) > + { > + if ( __copy_from_guest_offset(pcidevs, xdsr->pcidevs, i, 1) ) > + { > + xfree(pcidevs); > + return -EFAULT; > + } > + } I don't see the need for a loop here. And you definitely can't use the double-underscore-prefixed variant the way you do. > --- a/xen/include/asm-x86/hvm/domain.h > +++ b/xen/include/asm-x86/hvm/domain.h > @@ -90,6 +90,10 @@ struct hvm_domain { > /* Cached CF8 for guest PCI config cycles */ > uint32_t pci_cf8; > > + uint32_t pci_rdmforce; I still don't see why this is a uint32_t. > --- a/xen/include/public/domctl.h > +++ b/xen/include/public/domctl.h > @@ -484,6 +484,24 @@ struct xen_domctl_assign_device { > typedef struct xen_domctl_assign_device xen_domctl_assign_device_t; > DEFINE_XEN_GUEST_HANDLE(xen_domctl_assign_device_t); > > +struct xen_guest_pcidev_info { > + uint8_t func; > + uint8_t dev; > + uint8_t bus; > + int domain; > + int rdmforce; > +}; Please see struct physdev_pci_device_add for how to properly and space efficiently express what you need. And of course I'd expect the code to actually use all fields you specify here - neither domain (which really ought to be named segment if it is what I think it is meant to be) nor rdmforce are being used anywhere. Plus - again - just "force" would be sufficient as a name, provided the field is needed at all. > +struct xen_domctl_set_rdm { > + uint32_t pci_rdmforce; Same comment as on the field added to "struct hvm_domain". > + uint32_t num_pcidevs; > + XEN_GUEST_HANDLE(xen_guest_pcidev_info_t) pcidevs; Did you _at all_ look at any of the other domctls when adding this? There's not a single use of XEN_GUEST_HANDLE() in the whole file. > @@ -1118,7 +1137,8 @@ struct xen_domctl { > struct xen_domctl_gdbsx_domstatus gdbsx_domstatus; > struct xen_domctl_vnuma vnuma; > struct xen_domctl_psr_cmt_op psr_cmt_op; > - uint8_t pad[128]; > + struct xen_domctl_set_rdm set_rdm; > + uint8_t pad[112]; Why are you altering the padding size here? Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |