|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC for-4.5 08/12] xen/passthrough: iommu: Split generic IOMMU code
>>> On 07.02.14 at 18:43, Julien Grall <julien.grall@xxxxxxxxxx> wrote:
> The generic IOMMU framework code (xen/drivers/passthrough/iommu.c) contains
> functions specific to x86 and PCI.
>
> Split the framework in 3 distincts files:
> - iommu.c: contains generic functions shared between x86 and ARM
> (when it will be supported)
> - iommu_pci.c: contains specific functions for PCI passthrough
> - iommu_x86.c: contains specific functions for x86
>
> iommu_pci.c will be only compiled when PCI is supported by the architecture
> (eg. HAS_PCI is defined).
>
> This patch is mostly code movement in new files.
>
> Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx>
> Cc: Xiantao Zhang <xiantao.zhang@xxxxxxxxx>
> Cc: Jan Beulich <jbeulich@xxxxxxxx>
> ---
> xen/drivers/passthrough/Makefile | 6 +-
> xen/drivers/passthrough/iommu.c | 473
> +----------------------------------
> xen/drivers/passthrough/iommu_pci.c | 468 ++++++++++++++++++++++++++++++++++
There's xen/drivers/passthrough/pci.c already - any reason not to
move the code there?
> xen/drivers/passthrough/iommu_x86.c | 65 +++++
Same here for xen/drivers/passthrough/x86/.
> @@ -696,125 +344,6 @@ void iommu_crash_shutdown(void)
> iommu_enabled = iommu_intremap = 0;
> }
>
> -int iommu_do_domctl(
> - struct xen_domctl *domctl, struct domain *d,
> - XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
The function itself should probably not be moved out. Either the
PCI-specific pieces of it should be made conditional, or a
descendant function be created. Since (afaict) you'll need all of
the domctl-s (with different arguments) too for pass-through on
ARM - what's your plan for them?
> --- a/xen/drivers/passthrough/vtd/iommu.c
> +++ b/xen/drivers/passthrough/vtd/iommu.c
> @@ -1784,31 +1784,31 @@ static int intel_iommu_unmap_page(struct domain *d,
> unsigned long gfn)
>
> void iommu_pte_flush(struct domain *d, u64 gfn, u64 *pte,
> int order, int present)
> -{
> - struct acpi_drhd_unit *drhd;
> - struct iommu *iommu = NULL;
> - struct hvm_iommu *hd = domain_hvm_iommu(d);
> - int flush_dev_iotlb;
> - int iommu_domid;
> + {
> + struct acpi_drhd_unit *drhd;
> + struct iommu *iommu = NULL;
> + struct hvm_iommu *hd = domain_hvm_iommu(d);
> + int flush_dev_iotlb;
> + int iommu_domid;
>
> - iommu_flush_cache_entry(pte, sizeof(struct dma_pte));
> + iommu_flush_cache_entry(pte, sizeof(struct dma_pte));
>
> - for_each_drhd_unit ( drhd )
> - {
> - iommu = drhd->iommu;
> - if ( !test_bit(iommu->index, &hd->iommu_bitmap) )
> - continue;
> + for_each_drhd_unit ( drhd )
> + {
> + iommu = drhd->iommu;
> + if ( !test_bit(iommu->index, &hd->iommu_bitmap) )
> + continue;
>
> - flush_dev_iotlb = find_ats_dev_drhd(iommu) ? 1 : 0;
> - iommu_domid= domain_iommu_domid(d, iommu);
> - if ( iommu_domid == -1 )
> - continue;
> - if ( iommu_flush_iotlb_psi(iommu, iommu_domid,
> - (paddr_t)gfn << PAGE_SHIFT_4K,
> - order, !present, flush_dev_iotlb) )
> - iommu_flush_write_buffer(iommu);
> + flush_dev_iotlb = find_ats_dev_drhd(iommu) ? 1 : 0;
> + iommu_domid= domain_iommu_domid(d, iommu);
> + if ( iommu_domid == -1 )
> + continue;
> + if ( iommu_flush_iotlb_psi(iommu, iommu_domid,
> + (paddr_t)gfn << PAGE_SHIFT_4K,
> + order, !present, flush_dev_iotlb) )
> + iommu_flush_write_buffer(iommu);
> + }
> }
> -}
What are these changes to indentation about? Are you
deliberately breaking common rules here, or is this some sort of
unintentional leftover?
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |