Message ID | 1584560474-19946-3-git-send-email-kwankhede@nvidia.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KABIs to support migration for VFIO devices | expand |
Hi Kirti, On 3/18/20 8:41 PM, Kirti Wankhede wrote: > vfio_pfn.ref_count is always updated by holding iommu->lock, using atomic > variable is overkill. > > Signed-off-by: Kirti Wankhede <kwankhede@nvidia.com> > Reviewed-by: Neo Jia <cjia@nvidia.com> > --- > drivers/vfio/vfio_iommu_type1.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c > index 9fdfae1cb17a..70aeab921d0f 100644 > --- a/drivers/vfio/vfio_iommu_type1.c > +++ b/drivers/vfio/vfio_iommu_type1.c > @@ -112,7 +112,7 @@ struct vfio_pfn { > struct rb_node node; > dma_addr_t iova; /* Device address */ > unsigned long pfn; /* Host pfn */ > - atomic_t ref_count; > + unsigned int ref_count; > }; > > struct vfio_regions { > @@ -233,7 +233,7 @@ static int vfio_add_to_pfn_list(struct vfio_dma *dma, dma_addr_t iova, > > vpfn->iova = iova; > vpfn->pfn = pfn; > - atomic_set(&vpfn->ref_count, 1); > + vpfn->ref_count = 1; > vfio_link_pfn(dma, vpfn); > return 0; > } > @@ -251,7 +251,7 @@ static struct vfio_pfn *vfio_iova_get_vfio_pfn(struct vfio_dma *dma, > struct vfio_pfn *vpfn = vfio_find_vpfn(dma, iova); > > if (vpfn) > - atomic_inc(&vpfn->ref_count); > + vpfn->ref_count++; > return vpfn; > } > > @@ -259,7 +259,8 @@ static int vfio_iova_put_vfio_pfn(struct vfio_dma *dma, struct vfio_pfn *vpfn) > { > int ret = 0; > > - if (atomic_dec_and_test(&vpfn->ref_count)) { > + vpfn->ref_count--; > + if (!vpfn->ref_count) { > ret = put_pfn(vpfn->pfn, dma->prot); > vfio_remove_from_pfn_list(dma, vpfn); > } > Reviewed-by: Eric Auger <eric.auger@redhat.com> Thanks Eric
diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c index 9fdfae1cb17a..70aeab921d0f 100644 --- a/drivers/vfio/vfio_iommu_type1.c +++ b/drivers/vfio/vfio_iommu_type1.c @@ -112,7 +112,7 @@ struct vfio_pfn { struct rb_node node; dma_addr_t iova; /* Device address */ unsigned long pfn; /* Host pfn */ - atomic_t ref_count; + unsigned int ref_count; }; struct vfio_regions { @@ -233,7 +233,7 @@ static int vfio_add_to_pfn_list(struct vfio_dma *dma, dma_addr_t iova, vpfn->iova = iova; vpfn->pfn = pfn; - atomic_set(&vpfn->ref_count, 1); + vpfn->ref_count = 1; vfio_link_pfn(dma, vpfn); return 0; } @@ -251,7 +251,7 @@ static struct vfio_pfn *vfio_iova_get_vfio_pfn(struct vfio_dma *dma, struct vfio_pfn *vpfn = vfio_find_vpfn(dma, iova); if (vpfn) - atomic_inc(&vpfn->ref_count); + vpfn->ref_count++; return vpfn; } @@ -259,7 +259,8 @@ static int vfio_iova_put_vfio_pfn(struct vfio_dma *dma, struct vfio_pfn *vpfn) { int ret = 0; - if (atomic_dec_and_test(&vpfn->ref_count)) { + vpfn->ref_count--; + if (!vpfn->ref_count) { ret = put_pfn(vpfn->pfn, dma->prot); vfio_remove_from_pfn_list(dma, vpfn); }