From: "Sricharan" <sricharan-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
To: 'Rob Clark' <robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
'linux-arm-msm'
<linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
'Will Deacon' <will.deacon-5wv7dgnIgG8@public.gmane.org>,
'Jordan Crouse' <jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>,
'Mark Rutland' <mark.rutland-5wv7dgnIgG8@public.gmane.org>
Subject: RE: [RFC 3/3] iommu/arm-smmu: detach DMA domain if driver is managing iommu
Date: Thu, 2 Feb 2017 09:40:21 +0530 [thread overview]
Message-ID: <010801d27d0a$488e8390$d9ab8ab0$@codeaurora.org> (raw)
In-Reply-To: <CAF6AEGvXc1dUaqQ6=yp9XCZTv6y1r7jNJohrksO0=EJ1+UFY5g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
Hi Rob,
>On Wed, Feb 1, 2017 at 10:23 AM, Rob Clark <robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
>> Before the driver is probed, arm_smmu_add_device() helpfully attaches
>> an IOMMU_DOMAIN_DMA domain. Which ofc does not support stalling, and
>> when the driver later attaches a domain that can_stall to an smmu that
>> can stall, the default _DMA domain prevents stalling from being enabled.
>> (And will cause further problems later)
>>
>> One simple way to deal with this is simply toss the default _DMA domain
>> if the driver attaches it's own domain.
>>
>> TODO maybe the tracking of list of attached domains should be done in
>> iommu core, so the detach can happen outside of group->mutex.
>>
>> Signed-off-by: Rob Clark <robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>> ---
>> drivers/iommu/arm-smmu.c | 15 +++++++++++++++
>> 1 file changed, 15 insertions(+)
>>
>> diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
>> index 96a1be6..50bf135 100644
>> --- a/drivers/iommu/arm-smmu.c
>> +++ b/drivers/iommu/arm-smmu.c
>> @@ -1323,6 +1323,21 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
>>
>> smmu = fwspec_smmu(fwspec);
>>
>> + /*
>> + * If driver is explicitly managing the iommu, detatch any previously
>> + * attached _DMA domains.
>> + *
>> + * TODO maybe this logic should be in iommu_attach_device() so it can
>> + * happen outside of holding group->mutex??
>> + */
>> + if (domain->type != IOMMU_DOMAIN_DMA) {
>> + struct arm_smmu_domain *other_domain, *n;
>> +
>> + list_for_each_entry_safe(other_domain, n, &smmu->domain_list, domain_node)
>> + if (other_domain->domain.type == IOMMU_DOMAIN_DMA)
>> + arm_smmu_detach_dev(&other_domain->domain, dev);
>
So the arm_smmu_detach_dev api is no more there and is removed now.
Also this will be a problem when multiple devices share the iommu, we end up
removing domains used by other devices. Should this not be done
per-device which does not want to use the DMA domain ?
>hmm, we might want to unhook dev->archdata.dma_ops here too..
>
>I'm thinking maybe on arm64 __generic_dma_ops() should fall back to
>swiotlb ops instead of dummy_ops if archdata.dma_ops is NULL, so that
>we could just set it to NULL here?
>
hmm, both not attaching the default dma domain and not setting the dma_ops
is tried in this series as well [1]
[1] https://www.spinics.net/lists/arm-kernel/msg556081.html
>(Is there really any purpose for having the dummy-ops??)
>
To enforce setting arch_setup_dma_ops for device so that the
devices can do cache coherent transactions, otherwise disable the dma
capability of the device. I see that this was introduced as a part of
making ACPI_CCA_REQUIRED to be set in arm64 and later
generalized.
Regards,
Sricharan
>BR,
>-R
>
>> + }
>> +
>> if (WARN_ON(!list_empty(&smmu_domain->domain_node)))
>> return -EINVAL;
>>
>> --
>> 2.9.3
>>
next prev parent reply other threads:[~2017-02-02 4:10 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-01 15:23 [RFC 0/3] iommu/arm-smmu: stalling support (v2) Rob Clark
[not found] ` <20170201152341.29142-1-robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-02-01 15:23 ` [RFC 1/3] iommu: introduce stall/resume support Rob Clark
2017-02-01 15:23 ` [RFC 2/3] iommu/arm-smmu: Add support to opt-in to stalling Rob Clark
2017-02-01 15:23 ` [RFC 3/3] iommu/arm-smmu: detach DMA domain if driver is managing iommu Rob Clark
[not found] ` <20170201152341.29142-4-robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-02-01 15:30 ` Rob Clark
[not found] ` <CAF6AEGvXc1dUaqQ6=yp9XCZTv6y1r7jNJohrksO0=EJ1+UFY5g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-02-02 4:10 ` Sricharan [this message]
2017-02-02 12:14 ` Rob Clark
2017-02-02 16:20 ` Rob Clark
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='010801d27d0a$488e8390$d9ab8ab0$@codeaurora.org' \
--to=sricharan-sgv2jx0feol9jmxxk+q4oq@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
--cc=linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
--cc=robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=will.deacon-5wv7dgnIgG8@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).