From: Sricharan R <sricharan@codeaurora.org> To: will.deacon@arm.com, robin.murphy@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 Cc: sricharan@codeaurora.org Subject: [PATCH V3 8/8] arm64: dma-mapping: Remove the notifier trick to handle early setting of dma_ops Date: Tue, 4 Oct 2016 22:33:52 +0530 [thread overview] Message-ID: <1475600632-21289-9-git-send-email-sricharan@codeaurora.org> (raw) In-Reply-To: <1475600632-21289-1-git-send-email-sricharan@codeaurora.org> With arch_setup_dma_ops now being called late during device's probe after the device's iommu is probed, the notifier trick required to handle the early setup of dma_ops before the iommu group gets created is not required. So removing the notifier's here. Signed-off-by: Sricharan R <sricharan@codeaurora.org> --- arch/arm64/mm/dma-mapping.c | 100 ++------------------------------------------ 1 file changed, 3 insertions(+), 97 deletions(-) diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c index faf4b92..eb593af 100644 --- a/arch/arm64/mm/dma-mapping.c +++ b/arch/arm64/mm/dma-mapping.c @@ -799,24 +799,6 @@ static struct dma_map_ops iommu_dma_ops = { .mapping_error = iommu_dma_mapping_error, }; -/* - * TODO: Right now __iommu_setup_dma_ops() gets called too early to do - * everything it needs to - the device is only partially created and the - * IOMMU driver hasn't seen it yet, so it can't have a group. Thus we - * need this delayed attachment dance. Once IOMMU probe ordering is sorted - * to move the arch_setup_dma_ops() call later, all the notifier bits below - * become unnecessary, and will go away. - */ -struct iommu_dma_notifier_data { - struct list_head list; - struct device *dev; - const struct iommu_ops *ops; - u64 dma_base; - u64 size; -}; -static LIST_HEAD(iommu_dma_masters); -static DEFINE_MUTEX(iommu_dma_notifier_lock); - static bool do_iommu_attach(struct device *dev, const struct iommu_ops *ops, u64 dma_base, u64 size) { @@ -837,79 +819,9 @@ static bool do_iommu_attach(struct device *dev, const struct iommu_ops *ops, return true; } -static void queue_iommu_attach(struct device *dev, const struct iommu_ops *ops, - u64 dma_base, u64 size) -{ - struct iommu_dma_notifier_data *iommudata; - - iommudata = kzalloc(sizeof(*iommudata), GFP_KERNEL); - if (!iommudata) - return; - - iommudata->dev = dev; - iommudata->ops = ops; - iommudata->dma_base = dma_base; - iommudata->size = size; - - mutex_lock(&iommu_dma_notifier_lock); - list_add(&iommudata->list, &iommu_dma_masters); - mutex_unlock(&iommu_dma_notifier_lock); -} - -static int __iommu_attach_notifier(struct notifier_block *nb, - unsigned long action, void *data) -{ - struct iommu_dma_notifier_data *master, *tmp; - - if (action != BUS_NOTIFY_BIND_DRIVER) - return 0; - - mutex_lock(&iommu_dma_notifier_lock); - list_for_each_entry_safe(master, tmp, &iommu_dma_masters, list) { - if (data == master->dev && do_iommu_attach(master->dev, - master->ops, master->dma_base, master->size)) { - list_del(&master->list); - kfree(master); - break; - } - } - mutex_unlock(&iommu_dma_notifier_lock); - return 0; -} - -static int __init register_iommu_dma_ops_notifier(struct bus_type *bus) -{ - struct notifier_block *nb = kzalloc(sizeof(*nb), GFP_KERNEL); - int ret; - - if (!nb) - return -ENOMEM; - - nb->notifier_call = __iommu_attach_notifier; - - ret = bus_register_notifier(bus, nb); - if (ret) { - pr_warn("Failed to register DMA domain notifier; IOMMU DMA ops unavailable on bus '%s'\n", - bus->name); - kfree(nb); - } - return ret; -} - static int __init __iommu_dma_init(void) { - int ret; - - ret = iommu_dma_init(); - if (!ret) - ret = register_iommu_dma_ops_notifier(&platform_bus_type); - if (!ret) - ret = register_iommu_dma_ops_notifier(&amba_bustype); -#ifdef CONFIG_PCI - if (!ret) - ret = register_iommu_dma_ops_notifier(&pci_bus_type); -#endif - return ret; + return iommu_dma_init(); } arch_initcall(__iommu_dma_init); @@ -920,18 +832,12 @@ static void __iommu_setup_dma_ops(struct device *dev, u64 dma_base, u64 size, if (!ops) return; - /* - * TODO: As a concession to the future, we're ready to handle being - * called both early and late (i.e. after bus_add_device). Once all - * the platform bus code is reworked to call us late and the notifier - * junk above goes away, move the body of do_iommu_attach here. - */ + group = iommu_group_get(dev); + if (group) { do_iommu_attach(dev, ops, dma_base, size); iommu_group_put(group); - } else { - queue_iommu_attach(dev, ops, dma_base, size); } } -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
WARNING: multiple messages have this Message-ID (diff)
From: sricharan@codeaurora.org (Sricharan R) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH V3 8/8] arm64: dma-mapping: Remove the notifier trick to handle early setting of dma_ops Date: Tue, 4 Oct 2016 22:33:52 +0530 [thread overview] Message-ID: <1475600632-21289-9-git-send-email-sricharan@codeaurora.org> (raw) In-Reply-To: <1475600632-21289-1-git-send-email-sricharan@codeaurora.org> With arch_setup_dma_ops now being called late during device's probe after the device's iommu is probed, the notifier trick required to handle the early setup of dma_ops before the iommu group gets created is not required. So removing the notifier's here. Signed-off-by: Sricharan R <sricharan@codeaurora.org> --- arch/arm64/mm/dma-mapping.c | 100 ++------------------------------------------ 1 file changed, 3 insertions(+), 97 deletions(-) diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c index faf4b92..eb593af 100644 --- a/arch/arm64/mm/dma-mapping.c +++ b/arch/arm64/mm/dma-mapping.c @@ -799,24 +799,6 @@ static struct dma_map_ops iommu_dma_ops = { .mapping_error = iommu_dma_mapping_error, }; -/* - * TODO: Right now __iommu_setup_dma_ops() gets called too early to do - * everything it needs to - the device is only partially created and the - * IOMMU driver hasn't seen it yet, so it can't have a group. Thus we - * need this delayed attachment dance. Once IOMMU probe ordering is sorted - * to move the arch_setup_dma_ops() call later, all the notifier bits below - * become unnecessary, and will go away. - */ -struct iommu_dma_notifier_data { - struct list_head list; - struct device *dev; - const struct iommu_ops *ops; - u64 dma_base; - u64 size; -}; -static LIST_HEAD(iommu_dma_masters); -static DEFINE_MUTEX(iommu_dma_notifier_lock); - static bool do_iommu_attach(struct device *dev, const struct iommu_ops *ops, u64 dma_base, u64 size) { @@ -837,79 +819,9 @@ static bool do_iommu_attach(struct device *dev, const struct iommu_ops *ops, return true; } -static void queue_iommu_attach(struct device *dev, const struct iommu_ops *ops, - u64 dma_base, u64 size) -{ - struct iommu_dma_notifier_data *iommudata; - - iommudata = kzalloc(sizeof(*iommudata), GFP_KERNEL); - if (!iommudata) - return; - - iommudata->dev = dev; - iommudata->ops = ops; - iommudata->dma_base = dma_base; - iommudata->size = size; - - mutex_lock(&iommu_dma_notifier_lock); - list_add(&iommudata->list, &iommu_dma_masters); - mutex_unlock(&iommu_dma_notifier_lock); -} - -static int __iommu_attach_notifier(struct notifier_block *nb, - unsigned long action, void *data) -{ - struct iommu_dma_notifier_data *master, *tmp; - - if (action != BUS_NOTIFY_BIND_DRIVER) - return 0; - - mutex_lock(&iommu_dma_notifier_lock); - list_for_each_entry_safe(master, tmp, &iommu_dma_masters, list) { - if (data == master->dev && do_iommu_attach(master->dev, - master->ops, master->dma_base, master->size)) { - list_del(&master->list); - kfree(master); - break; - } - } - mutex_unlock(&iommu_dma_notifier_lock); - return 0; -} - -static int __init register_iommu_dma_ops_notifier(struct bus_type *bus) -{ - struct notifier_block *nb = kzalloc(sizeof(*nb), GFP_KERNEL); - int ret; - - if (!nb) - return -ENOMEM; - - nb->notifier_call = __iommu_attach_notifier; - - ret = bus_register_notifier(bus, nb); - if (ret) { - pr_warn("Failed to register DMA domain notifier; IOMMU DMA ops unavailable on bus '%s'\n", - bus->name); - kfree(nb); - } - return ret; -} - static int __init __iommu_dma_init(void) { - int ret; - - ret = iommu_dma_init(); - if (!ret) - ret = register_iommu_dma_ops_notifier(&platform_bus_type); - if (!ret) - ret = register_iommu_dma_ops_notifier(&amba_bustype); -#ifdef CONFIG_PCI - if (!ret) - ret = register_iommu_dma_ops_notifier(&pci_bus_type); -#endif - return ret; + return iommu_dma_init(); } arch_initcall(__iommu_dma_init); @@ -920,18 +832,12 @@ static void __iommu_setup_dma_ops(struct device *dev, u64 dma_base, u64 size, if (!ops) return; - /* - * TODO: As a concession to the future, we're ready to handle being - * called both early and late (i.e. after bus_add_device). Once all - * the platform bus code is reworked to call us late and the notifier - * junk above goes away, move the body of do_iommu_attach here. - */ + group = iommu_group_get(dev); + if (group) { do_iommu_attach(dev, ops, dma_base, size); iommu_group_put(group); - } else { - queue_iommu_attach(dev, ops, dma_base, size); } } -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
next prev parent reply other threads:[~2016-10-04 17:04 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 2016-10-27 5:16 ` Sricharan 2016-10-04 17:03 ` Sricharan R [this message] 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 [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=1475600632-21289-9-git-send-email-sricharan@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.