From: Joerg Roedel <joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org> To: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Cc: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>, Kukjin Kim <kgene-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>, David Woodhouse <dwmw2-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>, Heiko Stuebner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>, Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>, Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>, Thierry Reding <thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>, Alexandre Courbot <gnurou-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>, Alex Williamson <alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>, Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Joerg Roedel <joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>, jroedel-l3A5Bk7waGM@public.gmane.org Subject: [PATCH 01/15] iommu: Introduce domain_alloc and domain_free iommu_ops Date: Tue, 27 Jan 2015 00:51:31 +0100 [thread overview] Message-ID: <1422316305-19216-2-git-send-email-joro@8bytes.org> (raw) In-Reply-To: <1422316305-19216-1-git-send-email-joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org> From: Joerg Roedel <jroedel-l3A5Bk7waGM@public.gmane.org> These new call-backs defer the allocation and destruction of 'struct iommu_domain' to the iommu driver. This allows drivers to embed this struct into their private domain structures and to get rid of the domain_init and domain_destroy call-backs when all drivers have been converted. Signed-off-by: Joerg Roedel <jroedel-l3A5Bk7waGM@public.gmane.org> --- drivers/iommu/iommu.c | 29 +++++++++++++++++++++-------- include/linux/iommu.h | 5 +++++ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index f7718d7..684efc0 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -900,26 +900,34 @@ EXPORT_SYMBOL_GPL(iommu_set_fault_handler); struct iommu_domain *iommu_domain_alloc(struct bus_type *bus) { + const struct iommu_ops *ops; struct iommu_domain *domain; - int ret; if (bus == NULL || bus->iommu_ops == NULL) return NULL; - domain = kzalloc(sizeof(*domain), GFP_KERNEL); + ops = bus->iommu_ops; + + if (ops->domain_alloc) + domain = ops->domain_alloc(); + else + domain = kzalloc(sizeof(*domain), GFP_KERNEL); + if (!domain) return NULL; domain->ops = bus->iommu_ops; - ret = domain->ops->domain_init(domain); - if (ret) + if (ops->domain_init && domain->ops->domain_init(domain)) goto out_free; return domain; out_free: - kfree(domain); + if (ops->domain_free) + ops->domain_free(domain); + else + kfree(domain); return NULL; } @@ -927,10 +935,15 @@ EXPORT_SYMBOL_GPL(iommu_domain_alloc); void iommu_domain_free(struct iommu_domain *domain) { - if (likely(domain->ops->domain_destroy != NULL)) - domain->ops->domain_destroy(domain); + const struct iommu_ops *ops = domain->ops; - kfree(domain); + if (likely(ops->domain_destroy != NULL)) + ops->domain_destroy(domain); + + if (ops->domain_free) + ops->domain_free(domain); + else + kfree(domain); } EXPORT_SYMBOL_GPL(iommu_domain_free); diff --git a/include/linux/iommu.h b/include/linux/iommu.h index 38daa45..69d1d12 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -115,6 +115,11 @@ struct iommu_ops { bool (*capable)(enum iommu_cap); int (*domain_init)(struct iommu_domain *domain); void (*domain_destroy)(struct iommu_domain *domain); + + /* Domain allocation and freeing by the iommu driver */ + struct iommu_domain *(*domain_alloc)(void); + void (*domain_free)(struct iommu_domain *); + int (*attach_dev)(struct iommu_domain *domain, struct device *dev); void (*detach_dev)(struct iommu_domain *domain, struct device *dev); int (*map)(struct iommu_domain *domain, unsigned long iova, -- 1.8.4.5
WARNING: multiple messages have this Message-ID
From: Joerg Roedel <joro@8bytes.org> To: iommu@lists.linux-foundation.org Cc: Will Deacon <will.deacon@arm.com>, Kukjin Kim <kgene@kernel.org>, David Woodhouse <dwmw2@infradead.org>, Heiko Stuebner <heiko@sntech.de>, Hiroshi Doyu <hdoyu@nvidia.com>, Stephen Warren <swarren@wwwdotorg.org>, Thierry Reding <thierry.reding@gmail.com>, Alexandre Courbot <gnurou@gmail.com>, Alex Williamson <alex.williamson@redhat.com>, Arnd Bergmann <arnd@arndb.de>, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-tegra@vger.kernel.org, Joerg Roedel <joro@8bytes.org>, jroedel@suse.de Subject: [PATCH 01/15] iommu: Introduce domain_alloc and domain_free iommu_ops Date: Tue, 27 Jan 2015 00:51:31 +0100 [thread overview] Message-ID: <1422316305-19216-2-git-send-email-joro@8bytes.org> (raw) In-Reply-To: <1422316305-19216-1-git-send-email-joro@8bytes.org> From: Joerg Roedel <jroedel@suse.de> These new call-backs defer the allocation and destruction of 'struct iommu_domain' to the iommu driver. This allows drivers to embed this struct into their private domain structures and to get rid of the domain_init and domain_destroy call-backs when all drivers have been converted. Signed-off-by: Joerg Roedel <jroedel@suse.de> --- drivers/iommu/iommu.c | 29 +++++++++++++++++++++-------- include/linux/iommu.h | 5 +++++ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index f7718d7..684efc0 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -900,26 +900,34 @@ EXPORT_SYMBOL_GPL(iommu_set_fault_handler); struct iommu_domain *iommu_domain_alloc(struct bus_type *bus) { + const struct iommu_ops *ops; struct iommu_domain *domain; - int ret; if (bus == NULL || bus->iommu_ops == NULL) return NULL; - domain = kzalloc(sizeof(*domain), GFP_KERNEL); + ops = bus->iommu_ops; + + if (ops->domain_alloc) + domain = ops->domain_alloc(); + else + domain = kzalloc(sizeof(*domain), GFP_KERNEL); + if (!domain) return NULL; domain->ops = bus->iommu_ops; - ret = domain->ops->domain_init(domain); - if (ret) + if (ops->domain_init && domain->ops->domain_init(domain)) goto out_free; return domain; out_free: - kfree(domain); + if (ops->domain_free) + ops->domain_free(domain); + else + kfree(domain); return NULL; } @@ -927,10 +935,15 @@ EXPORT_SYMBOL_GPL(iommu_domain_alloc); void iommu_domain_free(struct iommu_domain *domain) { - if (likely(domain->ops->domain_destroy != NULL)) - domain->ops->domain_destroy(domain); + const struct iommu_ops *ops = domain->ops; - kfree(domain); + if (likely(ops->domain_destroy != NULL)) + ops->domain_destroy(domain); + + if (ops->domain_free) + ops->domain_free(domain); + else + kfree(domain); } EXPORT_SYMBOL_GPL(iommu_domain_free); diff --git a/include/linux/iommu.h b/include/linux/iommu.h index 38daa45..69d1d12 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -115,6 +115,11 @@ struct iommu_ops { bool (*capable)(enum iommu_cap); int (*domain_init)(struct iommu_domain *domain); void (*domain_destroy)(struct iommu_domain *domain); + + /* Domain allocation and freeing by the iommu driver */ + struct iommu_domain *(*domain_alloc)(void); + void (*domain_free)(struct iommu_domain *); + int (*attach_dev)(struct iommu_domain *domain, struct device *dev); void (*detach_dev)(struct iommu_domain *domain, struct device *dev); int (*map)(struct iommu_domain *domain, unsigned long iova, -- 1.8.4.5
WARNING: multiple messages have this Message-ID
From: joro@8bytes.org (Joerg Roedel) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 01/15] iommu: Introduce domain_alloc and domain_free iommu_ops Date: Tue, 27 Jan 2015 00:51:31 +0100 [thread overview] Message-ID: <1422316305-19216-2-git-send-email-joro@8bytes.org> (raw) In-Reply-To: <1422316305-19216-1-git-send-email-joro@8bytes.org> From: Joerg Roedel <jroedel@suse.de> These new call-backs defer the allocation and destruction of 'struct iommu_domain' to the iommu driver. This allows drivers to embed this struct into their private domain structures and to get rid of the domain_init and domain_destroy call-backs when all drivers have been converted. Signed-off-by: Joerg Roedel <jroedel@suse.de> --- drivers/iommu/iommu.c | 29 +++++++++++++++++++++-------- include/linux/iommu.h | 5 +++++ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index f7718d7..684efc0 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -900,26 +900,34 @@ EXPORT_SYMBOL_GPL(iommu_set_fault_handler); struct iommu_domain *iommu_domain_alloc(struct bus_type *bus) { + const struct iommu_ops *ops; struct iommu_domain *domain; - int ret; if (bus == NULL || bus->iommu_ops == NULL) return NULL; - domain = kzalloc(sizeof(*domain), GFP_KERNEL); + ops = bus->iommu_ops; + + if (ops->domain_alloc) + domain = ops->domain_alloc(); + else + domain = kzalloc(sizeof(*domain), GFP_KERNEL); + if (!domain) return NULL; domain->ops = bus->iommu_ops; - ret = domain->ops->domain_init(domain); - if (ret) + if (ops->domain_init && domain->ops->domain_init(domain)) goto out_free; return domain; out_free: - kfree(domain); + if (ops->domain_free) + ops->domain_free(domain); + else + kfree(domain); return NULL; } @@ -927,10 +935,15 @@ EXPORT_SYMBOL_GPL(iommu_domain_alloc); void iommu_domain_free(struct iommu_domain *domain) { - if (likely(domain->ops->domain_destroy != NULL)) - domain->ops->domain_destroy(domain); + const struct iommu_ops *ops = domain->ops; - kfree(domain); + if (likely(ops->domain_destroy != NULL)) + ops->domain_destroy(domain); + + if (ops->domain_free) + ops->domain_free(domain); + else + kfree(domain); } EXPORT_SYMBOL_GPL(iommu_domain_free); diff --git a/include/linux/iommu.h b/include/linux/iommu.h index 38daa45..69d1d12 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -115,6 +115,11 @@ struct iommu_ops { bool (*capable)(enum iommu_cap); int (*domain_init)(struct iommu_domain *domain); void (*domain_destroy)(struct iommu_domain *domain); + + /* Domain allocation and freeing by the iommu driver */ + struct iommu_domain *(*domain_alloc)(void); + void (*domain_free)(struct iommu_domain *); + int (*attach_dev)(struct iommu_domain *domain, struct device *dev); void (*detach_dev)(struct iommu_domain *domain, struct device *dev); int (*map)(struct iommu_domain *domain, unsigned long iova, -- 1.8.4.5
next prev parent reply other threads:[~2015-01-26 23:51 UTC|newest] Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-01-26 23:51 [PATCH 00/15] iommu: Move domain allocation into drivers Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel [not found] ` <1422316305-19216-1-git-send-email-joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org> 2015-01-26 23:51 ` Joerg Roedel [this message] 2015-01-26 23:51 ` [PATCH 01/15] iommu: Introduce domain_alloc and domain_free iommu_ops Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` [PATCH 02/15] iommu: Introduce iommu domain types Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel [not found] ` <1422316305-19216-3-git-send-email-joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org> 2015-01-28 14:19 ` Will Deacon 2015-01-28 14:19 ` Will Deacon 2015-01-28 14:19 ` Will Deacon [not found] ` <20150128141934.GP1569-5wv7dgnIgG8@public.gmane.org> 2015-01-30 12:22 ` Joerg Roedel 2015-01-30 12:22 ` Joerg Roedel 2015-01-30 12:22 ` Joerg Roedel 2015-01-26 23:51 ` [PATCH 03/15] iommu/amd: Make use of domain_alloc and domain_free Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` [PATCH 04/15] iommu/vt-d: " Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` [PATCH 05/15] iommu/omap: " Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` [PATCH 06/15] iommu/arm-smmu: " Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` [PATCH 07/15] iommu/exynos: " Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` [PATCH 08/15] iommu/tegra-smmu: " Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` [PATCH 09/15] iommu/tegra-gart: " Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` [PATCH 10/15] iommu/msm: " Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` [PATCH 11/15] iommu/shmobile: " Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` [PATCH 12/15] iommu/ipmmu-vmsa: " Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` [PATCH 13/15] iommu/rockchip: " Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` [PATCH 14/15] iommu/fsl: " Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` [PATCH 15/15] iommu: Remove domain_init and domain_free iommu_ops Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-01-26 23:51 ` Joerg Roedel 2015-03-20 9:24 ` [PATCH 00/15] iommu: Move domain allocation into drivers Yingjoe Chen 2015-03-20 9:24 ` Yingjoe Chen 2015-03-23 11:49 ` Joerg Roedel 2015-03-23 11:49 ` Joerg Roedel 2015-03-23 11:49 ` Joerg Roedel [not found] ` <20150323114921.GM4441-zLv9SwRftAIdnm+yROfE0A@public.gmane.org> 2015-03-23 13:35 ` Yingjoe Chen 2015-03-23 13:35 ` Yingjoe Chen 2015-03-23 13:35 ` Yingjoe Chen
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=1422316305-19216-2-git-send-email-joro@8bytes.org \ --to=joro-zlv9swrftaidnm+yrofe0a@public.gmane.org \ --cc=alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \ --cc=arnd-r2nGTMty4D4@public.gmane.org \ --cc=dwmw2-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org \ --cc=gnurou-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \ --cc=hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \ --cc=heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org \ --cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \ --cc=jroedel-l3A5Bk7waGM@public.gmane.org \ --cc=kgene-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \ --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \ --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \ --cc=linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org \ --cc=thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \ --cc=will.deacon-5wv7dgnIgG8@public.gmane.org \ --subject='Re: [PATCH 01/15] iommu: Introduce domain_alloc and domain_free iommu_ops' \ /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
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.