On Tue, 1 Sep 2020 19:08:44 +0200 Auger Eric <eric.au...@redhat.com> wrote:
> Hi Jacob, > On 8/22/20 6:35 AM, Jacob Pan wrote: > > IOASID core maintains the guest-host mapping in the form of SPID and > > IOASID. This patch assigns the guest PASID (if valid) as SPID while > > binding guest page table with a host PASID. This mapping will be > > used for lookup and notifications. > > > > Signed-off-by: Jacob Pan <jacob.jun....@linux.intel.com> > > --- > > drivers/iommu/intel/svm.c | 2 ++ > > 1 file changed, 2 insertions(+) > > > > diff --git a/drivers/iommu/intel/svm.c b/drivers/iommu/intel/svm.c > > index d8a5efa75095..4c958b1aec4c 100644 > > --- a/drivers/iommu/intel/svm.c > > +++ b/drivers/iommu/intel/svm.c > > @@ -406,6 +406,7 @@ int intel_svm_bind_gpasid(struct iommu_domain > > *domain, struct device *dev, if (data->flags & > > IOMMU_SVA_GPASID_VAL) { svm->gpasid = data->gpasid; > > svm->flags |= SVM_FLAG_GUEST_PASID; > > + ioasid_attach_spid(data->hpasid, > > data->gpasid); > don't you want to handle the returned value? Yes, I also need to add a check for duplicated SPID within a set. > > } > > svm->iommu = iommu; > > /* > > @@ -517,6 +518,7 @@ int intel_svm_unbind_gpasid(struct device *dev, > > int pasid) ioasid_attach_data(pasid, NULL); > > ioasid_notify(pasid, IOASID_UNBIND, > > IOASID_NOTIFY_SET); > > + ioasid_attach_spid(pasid, > > INVALID_IOASID); > So this answers my previous question ;-) but won't it enter the if > (!ioasid_data) path and fail to reset the spid? > Sorry, i am not following. If there is no ioasid_data then there is no SPID to be stored. BTW, I plan to separate the APIs into two. ioasid_attach_spid ioasid_detach_spid Only ioasid_detach_spid will be calling synchronize RCU, then ioasid_attach_spid can be called under spinlock. Thanks, > Eric > > kfree(svm); > > } > > } > > > > _______________________________________________ > iommu mailing list > io...@lists.linux-foundation.org > https://lists.linuxfoundation.org/mailman/listinfo/iommu [Jacob Pan]