[v3,06/12] intel-iommu: pass in address space when page walk

Message ID 20180517085927.24925-7-peterx@redhat.com
State New
Headers show
Series
  • intel-iommu: nested vIOMMU, cleanups, bug fixes
Related show

Commit Message

Peter Xu May 17, 2018, 8:59 a.m.
We pass in the VTDAddressSpace too.  It'll be used in the follow up
patches.

Signed-off-by: Peter Xu <peterx@redhat.com>
---
 hw/i386/intel_iommu.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Auger Eric May 18, 2018, 8:23 a.m. | #1
Hi Peter,

On 05/17/2018 10:59 AM, Peter Xu wrote:
> We pass in the VTDAddressSpace too.  It'll be used in the follow up
> patches.
So you evetually preferred to keep .aw. I don't have a strong opinion
but maybe a small preference to v2 version.

Nevertheless
Reviewed-by: Eric Auger <eric.auger@redhat.com>

Eric
> 
> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
>  hw/i386/intel_iommu.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
> index 4953d02ed0..fe5ee77d46 100644
> --- a/hw/i386/intel_iommu.c
> +++ b/hw/i386/intel_iommu.c
> @@ -753,9 +753,11 @@ typedef int (*vtd_page_walk_hook)(IOMMUTLBEntry *entry, void *private);
>   * @hook_fn: hook func to be called when detected page
>   * @private: private data to be passed into hook func
>   * @notify_unmap: whether we should notify invalid entries
> + * @as: VT-d address space of the device
>   * @aw: maximum address width
>   */
>  typedef struct {
> +    VTDAddressSpace *as;
>      vtd_page_walk_hook hook_fn;
>      void *private;
>      bool notify_unmap;
> @@ -1460,6 +1462,7 @@ static void vtd_iotlb_page_invalidate_notify(IntelIOMMUState *s,
>                      .private = (void *)&vtd_as->iommu,
>                      .notify_unmap = true,
>                      .aw = s->aw_bits,
> +                    .as = vtd_as,
>                  };
>  
>                  /*
> @@ -2941,6 +2944,7 @@ static void vtd_iommu_replay(IOMMUMemoryRegion *iommu_mr, IOMMUNotifier *n)
>                  .private = (void *)n,
>                  .notify_unmap = false,
>                  .aw = s->aw_bits,
> +                .as = vtd_as,
>              };
>  
>              vtd_page_walk(&ce, 0, ~0ULL, &info);
>

Patch

diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
index 4953d02ed0..fe5ee77d46 100644
--- a/hw/i386/intel_iommu.c
+++ b/hw/i386/intel_iommu.c
@@ -753,9 +753,11 @@  typedef int (*vtd_page_walk_hook)(IOMMUTLBEntry *entry, void *private);
  * @hook_fn: hook func to be called when detected page
  * @private: private data to be passed into hook func
  * @notify_unmap: whether we should notify invalid entries
+ * @as: VT-d address space of the device
  * @aw: maximum address width
  */
 typedef struct {
+    VTDAddressSpace *as;
     vtd_page_walk_hook hook_fn;
     void *private;
     bool notify_unmap;
@@ -1460,6 +1462,7 @@  static void vtd_iotlb_page_invalidate_notify(IntelIOMMUState *s,
                     .private = (void *)&vtd_as->iommu,
                     .notify_unmap = true,
                     .aw = s->aw_bits,
+                    .as = vtd_as,
                 };
 
                 /*
@@ -2941,6 +2944,7 @@  static void vtd_iommu_replay(IOMMUMemoryRegion *iommu_mr, IOMMUNotifier *n)
                 .private = (void *)n,
                 .notify_unmap = false,
                 .aw = s->aw_bits,
+                .as = vtd_as,
             };
 
             vtd_page_walk(&ce, 0, ~0ULL, &info);