From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Magnus Damm <magnus.damm@gmail.com>
Cc: iommu@lists.linux-foundation.org,
laurent.pinchart+renesas@ideasonboard.com,
geert+renesas@glider.be, linux-sh@vger.kernel.org,
joro@8bytes.org, linux-kernel@vger.kernel.org,
horms+renesas@verge.net.au
Subject: Re: [PATCH 02/06] iommu/ipmmu-vmsa: Convert to dev_data
Date: Tue, 29 Dec 2015 02:04:04 +0200 [thread overview]
Message-ID: <4817218.RlfHpgC8v6@avalon> (raw)
In-Reply-To: <20151215120230.26216.8126.sendpatchset@little-apple>
Hi Magnus,
Thank you for the patch.
On Tuesday 15 December 2015 21:02:30 Magnus Damm wrote:
> From: Magnus Damm <damm+renesas@opensource.se>
>
> Rename ipmmu_vmsa_archdata to ipmmu_vmsa_dev_data to avoid
> confusion when using the driver on multiple architectures.
I'm sorry but this patches makes the driver more confusing to me. archdata is
a well established concept for IOMMU on ARM, I don't see how hiding help would
help.
> The data now stored in ipmmu_vmsa_dev_data is used to point
> various on-chip devices to the actual IPMMU instances.
>
> Signed-off-by: Magnus Damm <damm+renesas@opensource.se>
> ---
>
> drivers/iommu/ipmmu-vmsa.c | 58 +++++++++++++++++++++++++----------------
> 1 file changed, 36 insertions(+), 22 deletions(-)
>
> --- 0003/drivers/iommu/ipmmu-vmsa.c
> +++ work/drivers/iommu/ipmmu-vmsa.c 2015-12-15 13:16:27.160513000 +0900
> @@ -47,7 +47,7 @@ struct ipmmu_vmsa_domain {
> spinlock_t lock; /* Protects mappings */
> };
>
> -struct ipmmu_vmsa_archdata {
> +struct ipmmu_vmsa_dev_data {
> struct ipmmu_vmsa_device *mmu;
> unsigned int *utlbs;
> unsigned int num_utlbs;
> @@ -182,6 +182,20 @@ static struct ipmmu_vmsa_domain *to_vmsa
> #define IMUASID_ASID0_SHIFT 0
>
> /* ------------------------------------------------------------------------
> + * Consumer device side private data handling
> + */
> +
> +static struct ipmmu_vmsa_dev_data *get_dev_data(struct device *dev)
> +{
> + return dev->archdata.iommu;
> +}
> +
> +static void set_dev_data(struct device *dev, struct ipmmu_vmsa_dev_data
> *data)
> +{
> + dev->archdata.iommu = data;
> +}
> +
> +/* ------------------------------------------------------------------------
> * Read/Write Access
> */
>
> @@ -485,8 +499,8 @@ static void ipmmu_domain_free(struct iom
> static int ipmmu_attach_device(struct iommu_domain *io_domain,
> struct device *dev)
> {
> - struct ipmmu_vmsa_archdata *archdata = dev->archdata.iommu;
> - struct ipmmu_vmsa_device *mmu = archdata->mmu;
> + struct ipmmu_vmsa_dev_data *dev_data = get_dev_data(dev);
> + struct ipmmu_vmsa_device *mmu = dev_data->mmu;
> struct ipmmu_vmsa_domain *domain = to_vmsa_domain(io_domain);
> unsigned long flags;
> unsigned int i;
> @@ -518,8 +532,8 @@ static int ipmmu_attach_device(struct io
> if (ret < 0)
> return ret;
>
> - for (i = 0; i < archdata->num_utlbs; ++i)
> - ipmmu_utlb_enable(domain, archdata->utlbs[i]);
> + for (i = 0; i < dev_data->num_utlbs; ++i)
> + ipmmu_utlb_enable(domain, dev_data->utlbs[i]);
>
> return 0;
> }
> @@ -527,12 +541,12 @@ static int ipmmu_attach_device(struct io
> static void ipmmu_detach_device(struct iommu_domain *io_domain,
> struct device *dev)
> {
> - struct ipmmu_vmsa_archdata *archdata = dev->archdata.iommu;
> + struct ipmmu_vmsa_dev_data *dev_data = get_dev_data(dev);
> struct ipmmu_vmsa_domain *domain = to_vmsa_domain(io_domain);
> unsigned int i;
>
> - for (i = 0; i < archdata->num_utlbs; ++i)
> - ipmmu_utlb_disable(domain, archdata->utlbs[i]);
> + for (i = 0; i < dev_data->num_utlbs; ++i)
> + ipmmu_utlb_disable(domain, dev_data->utlbs[i]);
>
> /*
> * TODO: Optimize by disabling the context when no device is attached.
> @@ -595,7 +609,7 @@ static int ipmmu_find_utlbs(struct ipmmu
>
> static int ipmmu_add_device(struct device *dev)
> {
> - struct ipmmu_vmsa_archdata *archdata;
> + struct ipmmu_vmsa_dev_data *dev_data = get_dev_data(dev);
> struct ipmmu_vmsa_device *mmu;
> struct iommu_group *group = NULL;
> unsigned int *utlbs;
> @@ -603,7 +617,7 @@ static int ipmmu_add_device(struct devic
> int num_utlbs;
> int ret = -ENODEV;
>
> - if (dev->archdata.iommu) {
> + if (dev_data) {
> dev_warn(dev, "IOMMU driver already assigned to device %s\n",
> dev_name(dev));
> return -EINVAL;
> @@ -662,16 +676,16 @@ static int ipmmu_add_device(struct devic
> goto error;
> }
>
> - archdata = kzalloc(sizeof(*archdata), GFP_KERNEL);
> - if (!archdata) {
> + dev_data = kzalloc(sizeof(*dev_data), GFP_KERNEL);
> + if (!dev_data) {
> ret = -ENOMEM;
> goto error;
> }
>
> - archdata->mmu = mmu;
> - archdata->utlbs = utlbs;
> - archdata->num_utlbs = num_utlbs;
> - dev->archdata.iommu = archdata;
> + dev_data->mmu = mmu;
> + dev_data->utlbs = utlbs;
> + dev_data->num_utlbs = num_utlbs;
> + set_dev_data(dev, dev_data);
>
> /*
> * Create the ARM mapping, used by the ARM DMA mapping core to allocate
> @@ -708,10 +722,10 @@ static int ipmmu_add_device(struct devic
> error:
> arm_iommu_release_mapping(mmu->mapping);
>
> - kfree(dev->archdata.iommu);
> + kfree(dev_data);
> kfree(utlbs);
>
> - dev->archdata.iommu = NULL;
> + set_dev_data(dev, NULL);
>
> if (!IS_ERR_OR_NULL(group))
> iommu_group_remove_device(dev);
> @@ -721,15 +735,15 @@ error:
>
> static void ipmmu_remove_device(struct device *dev)
> {
> - struct ipmmu_vmsa_archdata *archdata = dev->archdata.iommu;
> + struct ipmmu_vmsa_dev_data *dev_data = get_dev_data(dev);
>
> arm_iommu_detach_device(dev);
> iommu_group_remove_device(dev);
>
> - kfree(archdata->utlbs);
> - kfree(archdata);
> + kfree(dev_data->utlbs);
> + kfree(dev_data);
>
> - dev->archdata.iommu = NULL;
> + set_dev_data(dev, NULL);
> }
>
> static const struct iommu_ops ipmmu_ops = {
--
Regards,
Laurent Pinchart
WARNING: multiple messages have this Message-ID (diff)
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Magnus Damm <magnus.damm@gmail.com>
Cc: iommu@lists.linux-foundation.org,
laurent.pinchart+renesas@ideasonboard.com,
geert+renesas@glider.be, linux-sh@vger.kernel.org,
joro@8bytes.org, linux-kernel@vger.kernel.org,
horms+renesas@verge.net.au
Subject: Re: [PATCH 02/06] iommu/ipmmu-vmsa: Convert to dev_data
Date: Tue, 29 Dec 2015 00:04:04 +0000 [thread overview]
Message-ID: <4817218.RlfHpgC8v6@avalon> (raw)
In-Reply-To: <20151215120230.26216.8126.sendpatchset@little-apple>
Hi Magnus,
Thank you for the patch.
On Tuesday 15 December 2015 21:02:30 Magnus Damm wrote:
> From: Magnus Damm <damm+renesas@opensource.se>
>
> Rename ipmmu_vmsa_archdata to ipmmu_vmsa_dev_data to avoid
> confusion when using the driver on multiple architectures.
I'm sorry but this patches makes the driver more confusing to me. archdata is
a well established concept for IOMMU on ARM, I don't see how hiding help would
help.
> The data now stored in ipmmu_vmsa_dev_data is used to point
> various on-chip devices to the actual IPMMU instances.
>
> Signed-off-by: Magnus Damm <damm+renesas@opensource.se>
> ---
>
> drivers/iommu/ipmmu-vmsa.c | 58 +++++++++++++++++++++++++----------------
> 1 file changed, 36 insertions(+), 22 deletions(-)
>
> --- 0003/drivers/iommu/ipmmu-vmsa.c
> +++ work/drivers/iommu/ipmmu-vmsa.c 2015-12-15 13:16:27.160513000 +0900
> @@ -47,7 +47,7 @@ struct ipmmu_vmsa_domain {
> spinlock_t lock; /* Protects mappings */
> };
>
> -struct ipmmu_vmsa_archdata {
> +struct ipmmu_vmsa_dev_data {
> struct ipmmu_vmsa_device *mmu;
> unsigned int *utlbs;
> unsigned int num_utlbs;
> @@ -182,6 +182,20 @@ static struct ipmmu_vmsa_domain *to_vmsa
> #define IMUASID_ASID0_SHIFT 0
>
> /* ------------------------------------------------------------------------
> + * Consumer device side private data handling
> + */
> +
> +static struct ipmmu_vmsa_dev_data *get_dev_data(struct device *dev)
> +{
> + return dev->archdata.iommu;
> +}
> +
> +static void set_dev_data(struct device *dev, struct ipmmu_vmsa_dev_data
> *data)
> +{
> + dev->archdata.iommu = data;
> +}
> +
> +/* ------------------------------------------------------------------------
> * Read/Write Access
> */
>
> @@ -485,8 +499,8 @@ static void ipmmu_domain_free(struct iom
> static int ipmmu_attach_device(struct iommu_domain *io_domain,
> struct device *dev)
> {
> - struct ipmmu_vmsa_archdata *archdata = dev->archdata.iommu;
> - struct ipmmu_vmsa_device *mmu = archdata->mmu;
> + struct ipmmu_vmsa_dev_data *dev_data = get_dev_data(dev);
> + struct ipmmu_vmsa_device *mmu = dev_data->mmu;
> struct ipmmu_vmsa_domain *domain = to_vmsa_domain(io_domain);
> unsigned long flags;
> unsigned int i;
> @@ -518,8 +532,8 @@ static int ipmmu_attach_device(struct io
> if (ret < 0)
> return ret;
>
> - for (i = 0; i < archdata->num_utlbs; ++i)
> - ipmmu_utlb_enable(domain, archdata->utlbs[i]);
> + for (i = 0; i < dev_data->num_utlbs; ++i)
> + ipmmu_utlb_enable(domain, dev_data->utlbs[i]);
>
> return 0;
> }
> @@ -527,12 +541,12 @@ static int ipmmu_attach_device(struct io
> static void ipmmu_detach_device(struct iommu_domain *io_domain,
> struct device *dev)
> {
> - struct ipmmu_vmsa_archdata *archdata = dev->archdata.iommu;
> + struct ipmmu_vmsa_dev_data *dev_data = get_dev_data(dev);
> struct ipmmu_vmsa_domain *domain = to_vmsa_domain(io_domain);
> unsigned int i;
>
> - for (i = 0; i < archdata->num_utlbs; ++i)
> - ipmmu_utlb_disable(domain, archdata->utlbs[i]);
> + for (i = 0; i < dev_data->num_utlbs; ++i)
> + ipmmu_utlb_disable(domain, dev_data->utlbs[i]);
>
> /*
> * TODO: Optimize by disabling the context when no device is attached.
> @@ -595,7 +609,7 @@ static int ipmmu_find_utlbs(struct ipmmu
>
> static int ipmmu_add_device(struct device *dev)
> {
> - struct ipmmu_vmsa_archdata *archdata;
> + struct ipmmu_vmsa_dev_data *dev_data = get_dev_data(dev);
> struct ipmmu_vmsa_device *mmu;
> struct iommu_group *group = NULL;
> unsigned int *utlbs;
> @@ -603,7 +617,7 @@ static int ipmmu_add_device(struct devic
> int num_utlbs;
> int ret = -ENODEV;
>
> - if (dev->archdata.iommu) {
> + if (dev_data) {
> dev_warn(dev, "IOMMU driver already assigned to device %s\n",
> dev_name(dev));
> return -EINVAL;
> @@ -662,16 +676,16 @@ static int ipmmu_add_device(struct devic
> goto error;
> }
>
> - archdata = kzalloc(sizeof(*archdata), GFP_KERNEL);
> - if (!archdata) {
> + dev_data = kzalloc(sizeof(*dev_data), GFP_KERNEL);
> + if (!dev_data) {
> ret = -ENOMEM;
> goto error;
> }
>
> - archdata->mmu = mmu;
> - archdata->utlbs = utlbs;
> - archdata->num_utlbs = num_utlbs;
> - dev->archdata.iommu = archdata;
> + dev_data->mmu = mmu;
> + dev_data->utlbs = utlbs;
> + dev_data->num_utlbs = num_utlbs;
> + set_dev_data(dev, dev_data);
>
> /*
> * Create the ARM mapping, used by the ARM DMA mapping core to allocate
> @@ -708,10 +722,10 @@ static int ipmmu_add_device(struct devic
> error:
> arm_iommu_release_mapping(mmu->mapping);
>
> - kfree(dev->archdata.iommu);
> + kfree(dev_data);
> kfree(utlbs);
>
> - dev->archdata.iommu = NULL;
> + set_dev_data(dev, NULL);
>
> if (!IS_ERR_OR_NULL(group))
> iommu_group_remove_device(dev);
> @@ -721,15 +735,15 @@ error:
>
> static void ipmmu_remove_device(struct device *dev)
> {
> - struct ipmmu_vmsa_archdata *archdata = dev->archdata.iommu;
> + struct ipmmu_vmsa_dev_data *dev_data = get_dev_data(dev);
>
> arm_iommu_detach_device(dev);
> iommu_group_remove_device(dev);
>
> - kfree(archdata->utlbs);
> - kfree(archdata);
> + kfree(dev_data->utlbs);
> + kfree(dev_data);
>
> - dev->archdata.iommu = NULL;
> + set_dev_data(dev, NULL);
> }
>
> static const struct iommu_ops ipmmu_ops = {
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2015-12-29 0:04 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-15 12:02 [PATCH 00/06] iommu/ipmmu-vmsa: IPMMU multi-arch update Magnus Damm
2015-12-15 12:02 ` Magnus Damm
2015-12-15 12:02 ` [PATCH 01/06] iommu/ipmmu-vmsa: Remove platform data handling Magnus Damm
2015-12-15 12:02 ` Magnus Damm
2015-12-29 0:00 ` Laurent Pinchart
2015-12-29 0:00 ` Laurent Pinchart
2015-12-15 12:02 ` [PATCH 02/06] iommu/ipmmu-vmsa: Convert to dev_data Magnus Damm
2015-12-15 12:02 ` Magnus Damm
2015-12-29 0:04 ` Laurent Pinchart [this message]
2015-12-29 0:04 ` Laurent Pinchart
2015-12-15 12:02 ` [PATCH 03/06] iommu/ipmmu-vmsa: Break out utlb control function Magnus Damm
2015-12-15 12:02 ` Magnus Damm
2015-12-15 12:02 ` Magnus Damm
2015-12-15 15:48 ` Geert Uytterhoeven
2015-12-15 15:48 ` Geert Uytterhoeven
2015-12-29 0:05 ` Laurent Pinchart
2015-12-29 0:05 ` Laurent Pinchart
2015-12-15 12:02 ` [PATCH 04/06] iommu/ipmmu-vmsa: Rework interrupt code and use bitmap for context Magnus Damm
2015-12-15 12:02 ` Magnus Damm
2015-12-15 12:02 ` Magnus Damm
2015-12-29 0:14 ` Laurent Pinchart
2015-12-29 0:14 ` Laurent Pinchart
2016-03-15 2:36 ` Magnus Damm
2016-03-15 2:36 ` Magnus Damm
2015-12-15 12:02 ` [PATCH 05/06] iommu/ipmmu-vmsa: Break out 32-bit ARM mapping code Magnus Damm
2015-12-15 12:02 ` Magnus Damm
2015-12-15 12:02 ` Magnus Damm
2015-12-29 0:26 ` Laurent Pinchart
2015-12-29 0:26 ` Laurent Pinchart
2015-12-15 12:03 ` [PATCH 06/06] iommu/ipmmu-vmsa: Drop LPAE Kconfig dependency Magnus Damm
2015-12-15 12:03 ` Magnus Damm
2015-12-15 12:03 ` Magnus Damm
2015-12-29 0:26 ` Laurent Pinchart
2015-12-29 0:26 ` Laurent Pinchart
2015-12-29 0:26 ` Laurent Pinchart
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=4817218.RlfHpgC8v6@avalon \
--to=laurent.pinchart@ideasonboard.com \
--cc=geert+renesas@glider.be \
--cc=horms+renesas@verge.net.au \
--cc=iommu@lists.linux-foundation.org \
--cc=joro@8bytes.org \
--cc=laurent.pinchart+renesas@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sh@vger.kernel.org \
--cc=magnus.damm@gmail.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: link
Be 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.