Il 14/05/2013 11:13, David Gibson ha scritto:
> Currently, the IOMMUTLBEntry structure contains the translated address,
> but not the IOVA (original untranslated address).  We're going to need it
> for upcoming changes, so add it in here, and populate it correctly in our
> one existing iommu implementation.
> 
> Signed-off-by: David Gibson <da...@gibson.dropbear.id.au>
> ---
>  hw/ppc/spapr_iommu.c  |    2 ++
>  include/exec/memory.h |    2 +-
>  2 files changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/ppc/spapr_iommu.c b/hw/ppc/spapr_iommu.c
> index 90469b3..07a6307 100644
> --- a/hw/ppc/spapr_iommu.c
> +++ b/hw/ppc/spapr_iommu.c
> @@ -80,6 +80,7 @@ static IOMMUTLBEntry spapr_tce_translate_iommu(MemoryRegion 
> *iommu, hwaddr addr)
>  
>      if (tcet->bypass) {
>          return (IOMMUTLBEntry) {
> +            .iova = 0,
>              .translated_addr = 0,
>              .addr_mask = ~(hwaddr)0,
>              .perm = { true, true },
> @@ -102,6 +103,7 @@ static IOMMUTLBEntry 
> spapr_tce_translate_iommu(MemoryRegion *iommu, hwaddr addr)
>  #endif
>  
>      return (IOMMUTLBEntry) {
> +        .iova = addr & ~SPAPR_TCE_PAGE_MASK,
>          .translated_addr = tce & ~SPAPR_TCE_PAGE_MASK,
>          .addr_mask = SPAPR_TCE_PAGE_MASK,
>          .perm = { [0] = tce & SPAPR_TCE_RO, [1] = tce & SPAPR_TCE_WO },
> diff --git a/include/exec/memory.h b/include/exec/memory.h
> index b97ace7..cd33439 100644
> --- a/include/exec/memory.h
> +++ b/include/exec/memory.h
> @@ -116,7 +116,7 @@ typedef struct IOMMUTLBEntry IOMMUTLBEntry;
>  typedef struct MemoryRegionIOMMUOps MemoryRegionIOMMUOps;
>  
>  struct IOMMUTLBEntry {
> -    hwaddr translated_addr;
> +    hwaddr iova, translated_addr;
>      hwaddr addr_mask;  /* 0xfff = 4k translation */
>      bool perm[2]; /* permissions, [0] for read, [1] for write */
>  };
> 

Split and squashed into various patches of my iommu tree.

Paolo

Reply via email to