From: "Sricharan" <sricharan@codeaurora.org> To: 'Robin Murphy' <robin.murphy@arm.com>, will.deacon@arm.com, joro@8bytes.org, iommu@lists.linux-foundation.org, linux-arm-kernel@lists.infradead.org, linux-arm-msm@vger.kernel.org, laurent.pinchart@ideasonboard.com, m.szyprowski@samsung.com, tfiga@chromium.org, srinivas.kandagatla@linaro.org Subject: RE: [PATCH V3 7/8] arm/arm64: dma-mapping: Call iommu's remove_device callback during device detach Date: Thu, 27 Oct 2016 10:46:45 +0530 [thread overview] Message-ID: <005301d23011$53e74b50$fbb5e1f0$@codeaurora.org> (raw) In-Reply-To: <2873304f-8b2e-b519-b3e6-d2b452b1df60@arm.com> Hi Robin, >> dma_deconfigure calls arch_teardown_dma_ops in the device_detach path, >> which is called when the device gets detached from the driver. >> When the device was added, iommu's add_device callback was used to >> add the device in to its iommu_group and setup the device to be ready >> to use its iommu. Similarly, call remove_device callback to remove the >> device from the group and reset any other device's iommu configurations. >> >> Signed-off-by: Sricharan R <sricharan@codeaurora.org> >> --- >> arch/arm/mm/dma-mapping.c | 8 ++++++++ >> arch/arm64/mm/dma-mapping.c | 7 +++++++ >> 2 files changed, 15 insertions(+) >> >> diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c >> index b9191f0..cbe22de 100644 >> --- a/arch/arm/mm/dma-mapping.c >> +++ b/arch/arm/mm/dma-mapping.c >> @@ -2289,11 +2289,19 @@ static bool arm_setup_iommu_dma_ops(struct device *dev, u64 dma_base, u64 size, >> static void arm_teardown_iommu_dma_ops(struct device *dev) >> { >> struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev); >> + const struct iommu_ops *ops; >> >> if (!mapping) >> return; >> >> __arm_iommu_detach_device(dev); >> + >> + if (dev->iommu_fwspec) { >> + ops = dev->iommu_fwspec->ops; >> + if (ops->remove_device) >> + ops->remove_device(dev); >> + } >> + > >Yuck. It's a little unfortunate that we have to do this at all, but I >see why. Still, it should be done in common code, not duplicated across >arch code, not least for symmetry with where the matching add_device >happened (although I think of_dma_deconfigure() would suffice, I'm not >sure we really need to add an of_iommu_deconfigure() just for this). > So one way is its already called via a the BUS_NOTIFY_REMOVED_DEVICE notifier in iommu_bus_notifier. I put it here, one for symmetry and another thinking that the remove_device callback should be done before the dma_ops is set to NULL. If thats not required then the existing iommu_bus_notifier itself can do the cleanup. The corresponding add_device in that notifier is dummy now, i will add a patch to remove that. If not the whole thing, we can add of_iommu_deconfigure as well. >It's also broken for IOMMU drivers which rely on the >of_iommu_configure() mechanism but have not yet been converted to use >iommu_fwspec (Exynos, MSM, etc.) > I did this, because fwspec was the right way to get ops in the future, but yes its getting broken for those which are not converted, will have to use dev->bus->iommu_ops in those cases. Will address this while changing the above. Regards, Sricharan
WARNING: multiple messages have this Message-ID (diff)
From: sricharan@codeaurora.org (Sricharan) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH V3 7/8] arm/arm64: dma-mapping: Call iommu's remove_device callback during device detach Date: Thu, 27 Oct 2016 10:46:45 +0530 [thread overview] Message-ID: <005301d23011$53e74b50$fbb5e1f0$@codeaurora.org> (raw) In-Reply-To: <2873304f-8b2e-b519-b3e6-d2b452b1df60@arm.com> Hi Robin, >> dma_deconfigure calls arch_teardown_dma_ops in the device_detach path, >> which is called when the device gets detached from the driver. >> When the device was added, iommu's add_device callback was used to >> add the device in to its iommu_group and setup the device to be ready >> to use its iommu. Similarly, call remove_device callback to remove the >> device from the group and reset any other device's iommu configurations. >> >> Signed-off-by: Sricharan R <sricharan@codeaurora.org> >> --- >> arch/arm/mm/dma-mapping.c | 8 ++++++++ >> arch/arm64/mm/dma-mapping.c | 7 +++++++ >> 2 files changed, 15 insertions(+) >> >> diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c >> index b9191f0..cbe22de 100644 >> --- a/arch/arm/mm/dma-mapping.c >> +++ b/arch/arm/mm/dma-mapping.c >> @@ -2289,11 +2289,19 @@ static bool arm_setup_iommu_dma_ops(struct device *dev, u64 dma_base, u64 size, >> static void arm_teardown_iommu_dma_ops(struct device *dev) >> { >> struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev); >> + const struct iommu_ops *ops; >> >> if (!mapping) >> return; >> >> __arm_iommu_detach_device(dev); >> + >> + if (dev->iommu_fwspec) { >> + ops = dev->iommu_fwspec->ops; >> + if (ops->remove_device) >> + ops->remove_device(dev); >> + } >> + > >Yuck. It's a little unfortunate that we have to do this at all, but I >see why. Still, it should be done in common code, not duplicated across >arch code, not least for symmetry with where the matching add_device >happened (although I think of_dma_deconfigure() would suffice, I'm not >sure we really need to add an of_iommu_deconfigure() just for this). > So one way is its already called via a the BUS_NOTIFY_REMOVED_DEVICE notifier in iommu_bus_notifier. I put it here, one for symmetry and another thinking that the remove_device callback should be done before the dma_ops is set to NULL. If thats not required then the existing iommu_bus_notifier itself can do the cleanup. The corresponding add_device in that notifier is dummy now, i will add a patch to remove that. If not the whole thing, we can add of_iommu_deconfigure as well. >It's also broken for IOMMU drivers which rely on the >of_iommu_configure() mechanism but have not yet been converted to use >iommu_fwspec (Exynos, MSM, etc.) > I did this, because fwspec was the right way to get ops in the future, but yes its getting broken for those which are not converted, will have to use dev->bus->iommu_ops in those cases. Will address this while changing the above. Regards, Sricharan
next prev parent reply other threads:[~2016-10-27 5:16 UTC|newest] Thread overview: 118+ messages / expand[flat|nested] mbox.gz Atom feed top [not found] <CGME20161004170414eucas1p141bebe16e1bf241862833e7ad0270c72@eucas1p1.samsung.com> 2016-10-04 17:03 ` [PATCH V3 0/8] IOMMU probe deferral support Sricharan R 2016-10-04 17:03 ` Sricharan R [not found] ` <1475600632-21289-1-git-send-email-sricharan-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> 2016-10-04 17:03 ` [PATCH V3 1/8] arm: dma-mapping: Don't override dma_ops in arch_setup_dma_ops() Sricharan R 2016-10-04 17:03 ` Sricharan R 2016-10-04 17:03 ` [PATCH V3 4/8] drivers: platform: Configure dma operations at probe time Sricharan R 2016-10-04 17:03 ` Sricharan R 2016-10-26 14:07 ` Robin Murphy 2016-10-26 14:07 ` Robin Murphy 2016-10-26 15:04 ` Sricharan 2016-10-26 15:04 ` Sricharan 2016-10-27 10:49 ` Lorenzo Pieralisi 2016-10-27 10:49 ` Lorenzo Pieralisi 2016-11-02 7:05 ` Sricharan 2016-11-02 7:05 ` Sricharan 2016-10-04 17:03 ` [PATCH V3 6/8] arm: dma-mapping: Reset the device's dma_ops Sricharan R 2016-10-04 17:03 ` Sricharan R 2016-10-26 15:07 ` Robin Murphy 2016-10-26 15:07 ` Robin Murphy [not found] ` <a3d4533f-165d-f444-7681-141479617a18-5wv7dgnIgG8@public.gmane.org> 2016-10-27 3:37 ` Sricharan 2016-10-27 3:37 ` Sricharan 2017-05-23 16:25 ` Russell King - ARM Linux 2017-05-23 16:25 ` Russell King - ARM Linux [not found] ` <20170523162507.GA1729-l+eeeJia6m9URfEZ8mYm6t73F7V6hmMc@public.gmane.org> 2017-05-23 16:55 ` Robin Murphy 2017-05-23 16:55 ` Robin Murphy 2017-05-23 17:53 ` Russell King - ARM Linux 2017-05-23 17:53 ` Russell King - ARM Linux [not found] ` <20170523175319.GA22219-l+eeeJia6m9URfEZ8mYm6t73F7V6hmMc@public.gmane.org> 2017-05-23 21:46 ` Laurent Pinchart 2017-05-23 21:46 ` Laurent Pinchart 2017-05-23 22:42 ` Russell King - ARM Linux 2017-05-23 22:42 ` Russell King - ARM Linux [not found] ` <20170523224216.GI22219-l+eeeJia6m9URfEZ8mYm6t73F7V6hmMc@public.gmane.org> 2017-05-24 10:31 ` Sricharan R 2017-05-24 10:31 ` Sricharan R [not found] ` <c4ad7341-fa9f-81b7-a41c-417144c4f842-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> 2017-05-24 11:26 ` Laurent Pinchart 2017-05-24 11:26 ` Laurent Pinchart 2017-05-24 11:38 ` Sricharan R 2017-05-24 11:38 ` Sricharan R 2017-05-25 15:05 ` Russell King - ARM Linux 2017-05-25 15:05 ` Russell King - ARM Linux [not found] ` <20170525150540.GJ22219-l+eeeJia6m9URfEZ8mYm6t73F7V6hmMc@public.gmane.org> 2017-05-26 5:18 ` Sricharan R 2017-05-26 5:18 ` Sricharan R 2017-05-26 14:04 ` Laurent Pinchart 2017-05-26 14:04 ` Laurent Pinchart 2016-10-10 12:36 ` [PATCH V3 0/8] IOMMU probe deferral support Marek Szyprowski 2016-10-10 12:36 ` Marek Szyprowski 2016-10-17 6:58 ` Sricharan 2016-10-17 6:58 ` Sricharan [not found] ` <12cfb59f-f7ca-d4df-eb7f-42348e357979-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> 2016-10-12 6:24 ` Sricharan 2016-10-12 6:24 ` Sricharan 2016-10-24 6:34 ` Marek Szyprowski 2016-10-24 6:34 ` Marek Szyprowski [not found] ` <b9e4e81f-3b3e-951f-df62-d640275aae71-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> 2016-10-24 12:30 ` Sricharan 2016-10-24 12:30 ` Sricharan 2016-10-17 7:02 ` Sricharan 2016-10-17 7:02 ` Sricharan 2016-10-25 6:25 ` Archit Taneja 2016-10-25 6:25 ` Archit Taneja 2016-10-04 17:03 ` [PATCH V3 2/8] of: dma: Move range size workaround to of_dma_get_range() Sricharan R 2016-10-04 17:03 ` Sricharan R 2016-10-04 17:03 ` [PATCH V3 3/8] of: dma: Make of_dma_deconfigure() public Sricharan R 2016-10-04 17:03 ` Sricharan R 2016-10-04 17:03 ` [PATCH V3 5/8] iommu: of: Handle IOMMU lookup failure with deferred probing or error Sricharan R 2016-10-04 17:03 ` Sricharan R [not found] ` <1475600632-21289-6-git-send-email-sricharan-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> 2016-10-26 14:52 ` Robin Murphy 2016-10-26 14:52 ` Robin Murphy [not found] ` <f08e65b4-f755-897c-f776-40f0d6788251-5wv7dgnIgG8@public.gmane.org> 2016-10-27 2:55 ` Sricharan 2016-10-27 2:55 ` Sricharan 2016-10-04 17:03 ` [PATCH V3 7/8] arm/arm64: dma-mapping: Call iommu's remove_device callback during device detach Sricharan R 2016-10-04 17:03 ` Sricharan R [not found] ` <1475600632-21289-8-git-send-email-sricharan-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> 2016-10-26 15:16 ` Robin Murphy 2016-10-26 15:16 ` Robin Murphy 2016-10-27 5:16 ` Sricharan [this message] 2016-10-27 5:16 ` Sricharan 2016-10-04 17:03 ` [PATCH V3 8/8] arm64: dma-mapping: Remove the notifier trick to handle early setting of dma_ops Sricharan R 2016-10-04 17:03 ` Sricharan R [not found] ` <1475600632-21289-9-git-send-email-sricharan-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> 2016-10-07 15:40 ` Sricharan 2016-10-07 15:40 ` Sricharan 2016-10-26 15:34 ` Robin Murphy 2016-10-26 15:34 ` Robin Murphy 2016-10-27 5:19 ` Sricharan 2016-10-27 5:19 ` Sricharan 2016-10-25 14:35 ` [PATCH V3 0/8] IOMMU probe deferral support Robin Murphy 2016-10-25 14:35 ` Robin Murphy [not found] ` <60ee8066-f167-e9df-ae3e-4138f1133bad-5wv7dgnIgG8@public.gmane.org> 2016-10-26 14:44 ` Sricharan 2016-10-26 14:44 ` Sricharan 2016-10-26 17:14 ` Robin Murphy 2016-10-26 17:14 ` Robin Murphy [not found] ` <421e2b14-0231-d376-02a0-097423120b3d-5wv7dgnIgG8@public.gmane.org> 2016-10-27 8:37 ` Sricharan 2016-10-27 8:37 ` Sricharan 2016-11-03 22:25 ` Sricharan 2016-11-03 22:25 ` Sricharan 2016-11-04 15:16 ` Sricharan 2016-11-04 15:16 ` Sricharan 2016-11-07 19:13 ` Will Deacon 2016-11-07 19:13 ` Will Deacon 2016-11-07 19:22 ` Robin Murphy 2016-11-07 19:22 ` Robin Murphy 2016-11-09 6:24 ` Sricharan 2016-11-09 6:24 ` Sricharan 2016-11-09 16:59 ` Will Deacon 2016-11-09 16:59 ` Will Deacon 2016-11-14 3:41 ` Sricharan 2016-11-14 3:41 ` Sricharan 2016-11-20 15:11 ` Sricharan 2016-11-20 15:11 ` Sricharan 2016-11-23 19:54 ` Robin Murphy 2016-11-23 19:54 ` Robin Murphy [not found] ` <918128b9-cdb0-1454-000a-146cee7a05ea-5wv7dgnIgG8@public.gmane.org> 2016-11-24 16:10 ` Sricharan 2016-11-24 16:10 ` Sricharan 2016-11-24 19:11 ` Robin Murphy 2016-11-24 19:11 ` Robin Murphy 2016-11-28 17:42 ` Sricharan 2016-11-28 17:42 ` Sricharan 2016-11-28 18:13 ` Lorenzo Pieralisi 2016-11-28 18:13 ` Lorenzo Pieralisi 2016-11-30 0:34 ` Sricharan 2016-11-30 0:34 ` Sricharan 2016-11-30 12:07 ` Lorenzo Pieralisi 2016-11-30 12:07 ` Lorenzo Pieralisi
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='005301d23011$53e74b50$fbb5e1f0$@codeaurora.org' \ --to=sricharan@codeaurora.org \ --cc=iommu@lists.linux-foundation.org \ --cc=joro@8bytes.org \ --cc=laurent.pinchart@ideasonboard.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-arm-msm@vger.kernel.org \ --cc=m.szyprowski@samsung.com \ --cc=robin.murphy@arm.com \ --cc=srinivas.kandagatla@linaro.org \ --cc=tfiga@chromium.org \ --cc=will.deacon@arm.com \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.