Message ID | 20180924004153.8232-19-digetx@gmail.com |
---|---|
State | Deferred |
Headers | show |
Series | IOMMU: Tegra GART driver clean up and optimization | expand |
On Mon, Sep 24, 2018 at 03:41:51AM +0300, Dmitry Osipenko wrote: > There could be unlimited number of allocated domains, but only one domain > can be active at a time. Hence devices must be detached only from the > active domain. > > Signed-off-by: Dmitry Osipenko <digetx@gmail.com> > --- > drivers/iommu/tegra-gart.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) Do we have a mechanism of switching out different domains? I don't think we do, so I'm wondering if perhaps a better solution to this would be to just refuse to create more than one domain in the first place. That would also allow us to get rid of the global variable gart_handle. Thierry
On 9/24/18 2:00 PM, Thierry Reding wrote: > On Mon, Sep 24, 2018 at 03:41:51AM +0300, Dmitry Osipenko wrote: >> There could be unlimited number of allocated domains, but only one domain >> can be active at a time. Hence devices must be detached only from the >> active domain. >> >> Signed-off-by: Dmitry Osipenko <digetx@gmail.com> >> --- >> drivers/iommu/tegra-gart.c | 8 +++++--- >> 1 file changed, 5 insertions(+), 3 deletions(-) > > Do we have a mechanism of switching out different domains? I don't think > we do, so I'm wondering if perhaps a better solution to this would be to > just refuse to create more than one domain in the first place. That > would also allow us to get rid of the global variable gart_handle. That's what was done in v1, Robin Murphy suggested that it will be better not to restrict allocation of unpopulated domains. It is mentioned in the changelog, see comment to v2 changes.
On Mon, Sep 24, 2018 at 09:05:48PM +0300, Dmitry Osipenko wrote: > On 9/24/18 2:00 PM, Thierry Reding wrote: > > On Mon, Sep 24, 2018 at 03:41:51AM +0300, Dmitry Osipenko wrote: > >> There could be unlimited number of allocated domains, but only one domain > >> can be active at a time. Hence devices must be detached only from the > >> active domain. > >> > >> Signed-off-by: Dmitry Osipenko <digetx@gmail.com> > >> --- > >> drivers/iommu/tegra-gart.c | 8 +++++--- > >> 1 file changed, 5 insertions(+), 3 deletions(-) > > > > Do we have a mechanism of switching out different domains? I don't think > > we do, so I'm wondering if perhaps a better solution to this would be to > > just refuse to create more than one domain in the first place. That > > would also allow us to get rid of the global variable gart_handle. > > That's what was done in v1, Robin Murphy suggested that it will be > better not to restrict allocation of unpopulated domains. It is > mentioned in the changelog, see comment to v2 changes. Okay, fine. Thierry
On 9/25/18 1:04 PM, Thierry Reding wrote: > On Mon, Sep 24, 2018 at 09:05:48PM +0300, Dmitry Osipenko wrote: >> On 9/24/18 2:00 PM, Thierry Reding wrote: >>> On Mon, Sep 24, 2018 at 03:41:51AM +0300, Dmitry Osipenko wrote: >>>> There could be unlimited number of allocated domains, but only one domain >>>> can be active at a time. Hence devices must be detached only from the >>>> active domain. >>>> >>>> Signed-off-by: Dmitry Osipenko <digetx@gmail.com> >>>> --- >>>> drivers/iommu/tegra-gart.c | 8 +++++--- >>>> 1 file changed, 5 insertions(+), 3 deletions(-) >>> >>> Do we have a mechanism of switching out different domains? I don't think >>> we do, so I'm wondering if perhaps a better solution to this would be to >>> just refuse to create more than one domain in the first place. That >>> would also allow us to get rid of the global variable gart_handle. >> >> That's what was done in v1, Robin Murphy suggested that it will be >> better not to restrict allocation of unpopulated domains. It is >> mentioned in the changelog, see comment to v2 changes. > > Okay, fine. Thanks, taking as ACK.
diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c index 284cddf90888..306e9644a676 100644 --- a/drivers/iommu/tegra-gart.c +++ b/drivers/iommu/tegra-gart.c @@ -167,7 +167,7 @@ static int gart_iommu_attach_dev(struct iommu_domain *domain, struct device *dev) { struct gart_domain *gart_domain = to_gart_domain(domain); - struct gart_device *gart = gart_domain->gart; + struct gart_device *gart = gart_handle; struct gart_client *client, *c; int err = 0; @@ -192,6 +192,7 @@ static int gart_iommu_attach_dev(struct iommu_domain *domain, goto fail; } gart->active_domain = domain; + gart_domain->gart = gart; list_add(&client->list, &gart->client); spin_unlock(&gart->client_lock); dev_dbg(gart->dev, "GART: Attached %s\n", dev_name(dev)); @@ -214,8 +215,10 @@ static void __gart_iommu_detach_dev(struct iommu_domain *domain, if (c->dev == dev) { list_del(&c->list); kfree(c); - if (list_empty(&gart->client)) + if (list_empty(&gart->client)) { gart->active_domain = NULL; + gart_domain->gart = NULL; + } dev_dbg(gart->dev, "GART: Detached %s\n", dev_name(dev)); return; @@ -253,7 +256,6 @@ static struct iommu_domain *gart_iommu_domain_alloc(unsigned type) if (!gart_domain) return NULL; - gart_domain->gart = gart; gart_domain->domain.geometry.aperture_start = gart->iovmm_base; gart_domain->domain.geometry.aperture_end = gart->iovmm_base + gart->page_count * GART_PAGE_SIZE - 1;
There could be unlimited number of allocated domains, but only one domain can be active at a time. Hence devices must be detached only from the active domain. Signed-off-by: Dmitry Osipenko <digetx@gmail.com> --- drivers/iommu/tegra-gart.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)