Message ID | 20180607084420.29513-2-aik@ozlabs.ru |
---|---|
State | Not Applicable |
Headers | show |
Series | [RFC,kernel,1/5] vfio/spapr_tce: Simplify page contained test | expand |
On Thu, Jun 07, 2018 at 06:44:16PM +1000, Alexey Kardashevskiy wrote: > The test function takes a page struct pointer which is not used by > either of two callers in any other way, make it simple and just pass > a physical address there. > > This should cause no behavioral change now but later we may start > supporting host addresses for memory devices which are not backed > with page structs. > > Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> > --- > drivers/vfio/vfio_iommu_spapr_tce.c | 11 ++++------- > 1 file changed, 4 insertions(+), 7 deletions(-) > > diff --git a/drivers/vfio/vfio_iommu_spapr_tce.c b/drivers/vfio/vfio_iommu_spapr_tce.c > index 759a5bd..2c4a048 100644 > --- a/drivers/vfio/vfio_iommu_spapr_tce.c > +++ b/drivers/vfio/vfio_iommu_spapr_tce.c > @@ -249,8 +249,9 @@ static void tce_iommu_userspace_view_free(struct iommu_table *tbl, > decrement_locked_vm(mm, cb >> PAGE_SHIFT); > } > > -static bool tce_page_is_contained(struct page *page, unsigned page_shift) > +static bool tce_page_is_contained(unsigned long hpa, unsigned page_shift) > { > + struct page *page = pfn_to_page(hpa >> PAGE_SHIFT); > /* > * Check that the TCE table granularity is not bigger than the size of > * a page we just found. Otherwise the hardware can get access to > @@ -549,7 +550,6 @@ static long tce_iommu_build(struct tce_container *container, > enum dma_data_direction direction) > { > long i, ret = 0; > - struct page *page; > unsigned long hpa; > enum dma_data_direction dirtmp; > > @@ -560,8 +560,7 @@ static long tce_iommu_build(struct tce_container *container, > if (ret) > break; > > - page = pfn_to_page(hpa >> PAGE_SHIFT); > - if (!tce_page_is_contained(page, tbl->it_page_shift)) { > + if (!tce_page_is_contained(hpa, tbl->it_page_shift)) { > ret = -EPERM; > break; > } > @@ -595,7 +594,6 @@ static long tce_iommu_build_v2(struct tce_container *container, > enum dma_data_direction direction) > { > long i, ret = 0; > - struct page *page; > unsigned long hpa; > enum dma_data_direction dirtmp; > > @@ -615,8 +613,7 @@ static long tce_iommu_build_v2(struct tce_container *container, > if (ret) > break; > > - page = pfn_to_page(hpa >> PAGE_SHIFT); > - if (!tce_page_is_contained(page, tbl->it_page_shift)) { > + if (!tce_page_is_contained(hpa, tbl->it_page_shift)) { > ret = -EPERM; > break; > }
diff --git a/drivers/vfio/vfio_iommu_spapr_tce.c b/drivers/vfio/vfio_iommu_spapr_tce.c index 759a5bd..2c4a048 100644 --- a/drivers/vfio/vfio_iommu_spapr_tce.c +++ b/drivers/vfio/vfio_iommu_spapr_tce.c @@ -249,8 +249,9 @@ static void tce_iommu_userspace_view_free(struct iommu_table *tbl, decrement_locked_vm(mm, cb >> PAGE_SHIFT); } -static bool tce_page_is_contained(struct page *page, unsigned page_shift) +static bool tce_page_is_contained(unsigned long hpa, unsigned page_shift) { + struct page *page = pfn_to_page(hpa >> PAGE_SHIFT); /* * Check that the TCE table granularity is not bigger than the size of * a page we just found. Otherwise the hardware can get access to @@ -549,7 +550,6 @@ static long tce_iommu_build(struct tce_container *container, enum dma_data_direction direction) { long i, ret = 0; - struct page *page; unsigned long hpa; enum dma_data_direction dirtmp; @@ -560,8 +560,7 @@ static long tce_iommu_build(struct tce_container *container, if (ret) break; - page = pfn_to_page(hpa >> PAGE_SHIFT); - if (!tce_page_is_contained(page, tbl->it_page_shift)) { + if (!tce_page_is_contained(hpa, tbl->it_page_shift)) { ret = -EPERM; break; } @@ -595,7 +594,6 @@ static long tce_iommu_build_v2(struct tce_container *container, enum dma_data_direction direction) { long i, ret = 0; - struct page *page; unsigned long hpa; enum dma_data_direction dirtmp; @@ -615,8 +613,7 @@ static long tce_iommu_build_v2(struct tce_container *container, if (ret) break; - page = pfn_to_page(hpa >> PAGE_SHIFT); - if (!tce_page_is_contained(page, tbl->it_page_shift)) { + if (!tce_page_is_contained(hpa, tbl->it_page_shift)) { ret = -EPERM; break; }
The test function takes a page struct pointer which is not used by either of two callers in any other way, make it simple and just pass a physical address there. This should cause no behavioral change now but later we may start supporting host addresses for memory devices which are not backed with page structs. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> --- drivers/vfio/vfio_iommu_spapr_tce.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-)