Re: [Xen-devel] [PATCH v13 1/9] iommu: introduce the concept of DFN...

2018-10-03 Thread Suthikulpanit, Suravee
Hi,

On 10/3/18 12:00 AM, Paul Durrant wrote:
> ...meaning 'device DMA frame number' i.e. a frame number mapped in the IOMMU
> (rather than the MMU) and hence used for DMA address translation.
> 
> This patch is a largely cosmetic change that substitutes the terms 'gfn'
> and 'gaddr' for 'dfn' and 'daddr' in all the places where the frame number
> or address relate to a device rather than the CPU.
> 
> The parts that are not purely cosmetic are:
> 
>   - the introduction of a type-safe declaration of dfn_t and definition of
> INVALID_DFN to make the substitution of gfn_x(INVALID_GFN) mechanical.
>   - the introduction of __dfn_to_daddr and __daddr_to_dfn (and type-safe
> variants without the leading __) with some use of the former.
> 
> Subsequent patches will convert code to make use of type-safe DFNs.
> 
> Signed-off-by: Paul Durrant
> Acked-by: Jan Beulich
> Reviewed-by: Kevin Tian
> Acked-by: Julien Grall
> ---
> Cc: Wei Liu
> Cc: Suravee Suthikulpanit
> Cc: Stefano Stabellini

Acked-by: Suravee Suthikulpanit 

Thanks,
Suravee
___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

[Xen-devel] [PATCH v13 1/9] iommu: introduce the concept of DFN...

2018-10-02 Thread Paul Durrant
...meaning 'device DMA frame number' i.e. a frame number mapped in the IOMMU
(rather than the MMU) and hence used for DMA address translation.

This patch is a largely cosmetic change that substitutes the terms 'gfn'
and 'gaddr' for 'dfn' and 'daddr' in all the places where the frame number
or address relate to a device rather than the CPU.

The parts that are not purely cosmetic are:

 - the introduction of a type-safe declaration of dfn_t and definition of
   INVALID_DFN to make the substitution of gfn_x(INVALID_GFN) mechanical.
 - the introduction of __dfn_to_daddr and __daddr_to_dfn (and type-safe
   variants without the leading __) with some use of the former.

Subsequent patches will convert code to make use of type-safe DFNs.

Signed-off-by: Paul Durrant 
Acked-by: Jan Beulich 
Reviewed-by: Kevin Tian 
Acked-by: Julien Grall 
---
Cc: Wei Liu 
Cc: Suravee Suthikulpanit 
Cc: Stefano Stabellini 

v9:
 - Re-word comment in mm.h.
 - Move definitions relating to daddr into asm-x86/iommu.h since these are
   not used by any ARM IOMMU implementation.
 - Fix __daddr_to_dfn() to properly parenthesize and remove cast.

v8:
 - Correct definition of INVALID_DFN.
 - Don't use _AC in definition of IOMMU_PAGE_SIZE.

v7:
 - Re-name BFN -> DFN as requested by Jan.
 - Dropped Wei's R-b because of name change.

v6:
 - Dropped changes to 'mfn' section in xen/mm.h as suggested by Kevin.

v3:
 - Get rid of intermediate 'frame' variables again.

v2:
 - Addressed comments from Jan.
---
 xen/drivers/passthrough/amd/iommu_cmd.c | 18 +++
 xen/drivers/passthrough/amd/iommu_map.c | 78 ++---
 xen/drivers/passthrough/amd/pci_amd_iommu.c |  2 +-
 xen/drivers/passthrough/arm/smmu.c  | 16 +++---
 xen/drivers/passthrough/iommu.c | 28 +--
 xen/drivers/passthrough/vtd/iommu.c | 30 +--
 xen/include/asm-x86/iommu.h | 12 +
 xen/include/xen/iommu.h | 26 +++---
 xen/include/xen/mm.h|  5 ++
 9 files changed, 123 insertions(+), 92 deletions(-)

diff --git a/xen/drivers/passthrough/amd/iommu_cmd.c 
b/xen/drivers/passthrough/amd/iommu_cmd.c
index 08247fa354..d4d071e53e 100644
--- a/xen/drivers/passthrough/amd/iommu_cmd.c
+++ b/xen/drivers/passthrough/amd/iommu_cmd.c
@@ -284,7 +284,7 @@ void invalidate_iommu_all(struct amd_iommu *iommu)
 }
 
 void amd_iommu_flush_iotlb(u8 devfn, const struct pci_dev *pdev,
-   uint64_t gaddr, unsigned int order)
+   daddr_t daddr, unsigned int order)
 {
 unsigned long flags;
 struct amd_iommu *iommu;
@@ -315,12 +315,12 @@ void amd_iommu_flush_iotlb(u8 devfn, const struct pci_dev 
*pdev,
 
 /* send INVALIDATE_IOTLB_PAGES command */
 spin_lock_irqsave(>lock, flags);
-invalidate_iotlb_pages(iommu, maxpend, 0, queueid, gaddr, req_id, order);
+invalidate_iotlb_pages(iommu, maxpend, 0, queueid, daddr, req_id, order);
 flush_command_buffer(iommu);
 spin_unlock_irqrestore(>lock, flags);
 }
 
-static void amd_iommu_flush_all_iotlbs(struct domain *d, uint64_t gaddr,
+static void amd_iommu_flush_all_iotlbs(struct domain *d, daddr_t daddr,
unsigned int order)
 {
 struct pci_dev *pdev;
@@ -333,7 +333,7 @@ static void amd_iommu_flush_all_iotlbs(struct domain *d, 
uint64_t gaddr,
 u8 devfn = pdev->devfn;
 
 do {
-amd_iommu_flush_iotlb(devfn, pdev, gaddr, order);
+amd_iommu_flush_iotlb(devfn, pdev, daddr, order);
 devfn += pdev->phantom_stride;
 } while ( devfn != pdev->devfn &&
   PCI_SLOT(devfn) == PCI_SLOT(pdev->devfn) );
@@ -342,7 +342,7 @@ static void amd_iommu_flush_all_iotlbs(struct domain *d, 
uint64_t gaddr,
 
 /* Flush iommu cache after p2m changes. */
 static void _amd_iommu_flush_pages(struct domain *d,
-   uint64_t gaddr, unsigned int order)
+   daddr_t daddr, unsigned int order)
 {
 unsigned long flags;
 struct amd_iommu *iommu;
@@ -352,13 +352,13 @@ static void _amd_iommu_flush_pages(struct domain *d,
 for_each_amd_iommu ( iommu )
 {
 spin_lock_irqsave(>lock, flags);
-invalidate_iommu_pages(iommu, gaddr, dom_id, order);
+invalidate_iommu_pages(iommu, daddr, dom_id, order);
 flush_command_buffer(iommu);
 spin_unlock_irqrestore(>lock, flags);
 }
 
 if ( ats_enabled )
-amd_iommu_flush_all_iotlbs(d, gaddr, order);
+amd_iommu_flush_all_iotlbs(d, daddr, order);
 }
 
 void amd_iommu_flush_all_pages(struct domain *d)
@@ -367,9 +367,9 @@ void amd_iommu_flush_all_pages(struct domain *d)
 }
 
 void amd_iommu_flush_pages(struct domain *d,
-   unsigned long gfn, unsigned int order)
+   unsigned long dfn, unsigned int order)
 {
-_amd_iommu_flush_pages(d, (uint64_t) gfn << PAGE_SHIFT, order);
+