Message ID | 1585078359-20124-3-git-send-email-kwankhede@nvidia.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KABIs to support migration for VFIO devices | expand |
On Wed, 25 Mar 2020 01:02:34 +0530 Kirti Wankhede <kwankhede@nvidia.com> wrote: > vfio_pfn.ref_count is always updated by holding iommu->lock, using atomic s/by/while/ > variable is overkill. > > Signed-off-by: Kirti Wankhede <kwankhede@nvidia.com> > Reviewed-by: Neo Jia <cjia@nvidia.com> > Reviewed-by: Eric Auger <eric.auger@redhat.com> > --- > drivers/vfio/vfio_iommu_type1.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > Reviewed-by: Cornelia Huck <cohuck@redhat.com>
On 3/26/2020 4:19 PM, Cornelia Huck wrote: > On Wed, 25 Mar 2020 01:02:34 +0530 > Kirti Wankhede <kwankhede@nvidia.com> wrote: > >> vfio_pfn.ref_count is always updated by holding iommu->lock, using atomic > > s/by/while/ > Ok. >> variable is overkill. >> >> Signed-off-by: Kirti Wankhede <kwankhede@nvidia.com> >> Reviewed-by: Neo Jia <cjia@nvidia.com> >> Reviewed-by: Eric Auger <eric.auger@redhat.com> >> --- >> drivers/vfio/vfio_iommu_type1.c | 9 +++++---- >> 1 file changed, 5 insertions(+), 4 deletions(-) >> > > Reviewed-by: Cornelia Huck <cohuck@redhat.com> > Thanks, Kirti
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); }