Message ID | 1584649004-8285-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/19/20 9:16 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> Reviewed-by: Eric Auger <eric.auger@redhat.com> Thanks Eric > --- > 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); > } >
On 3/24/2020 2:00 AM, Auger Eric wrote: > Hi Kirti, > > On 3/19/20 9:16 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> > Reviewed-by: Eric Auger <eric.auger@redhat.com> > Thanks. Kirti. > Thanks > > Eric >> --- >> 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); >> } >> >
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); }