From: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>
To: Robin Murphy <robin.murphy-5wv7dgnIgG8@public.gmane.org>
Cc: joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
lorenzo.pieralisi-5wv7dgnIgG8@public.gmane.org,
jean-philippe.brucker-5wv7dgnIgG8@public.gmane.org,
punit.agrawal-5wv7dgnIgG8@public.gmane.org,
thunder.leizhen-hv44wF8Li93QT0dZR+AlfA@public.gmane.org,
eric.auger-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Subject: Re: [PATCH v5 04/19] iommu/of: Introduce iommu_fwspec
Date: Wed, 31 Aug 2016 18:28:57 +0100 [thread overview]
Message-ID: <20160831172856.GI29505@arm.com> (raw)
In-Reply-To: <3e8eaf4fd65833fecc62828214aee81f6ca6c190.1471975357.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
On Tue, Aug 23, 2016 at 08:05:15PM +0100, Robin Murphy wrote:
> Introduce a common structure to hold the per-device firmware data that
> non-architectural IOMMU drivers generally need to keep track of.
> Initially this is DT-specific to complement the existing of_iommu
> support code, but will generalise further once other firmware methods
> (e.g. ACPI IORT) come along.
>
> Ultimately the aim is to promote the fwspec to a first-class member of
> struct device, and handle the init/free automatically in the firmware
> code. That way we can have API calls look for dev->fwspec->iommu_ops
> before falling back to dev->bus->iommu_ops, and thus gracefully handle
> those troublesome multi-IOMMU systems which we currently cannot. To
> start with, though, make use of the existing archdata field and delegate
> the init/free to drivers to allow an incremental conversion rather than
> the impractical pain of trying to attempt everything in one go.
>
> Suggested-by: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>
> Signed-off-by: Robin Murphy <robin.murphy-5wv7dgnIgG8@public.gmane.org>
> ---
>
> v5: Fix shocking num_ids oversight.
>
> drivers/iommu/of_iommu.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++
> include/linux/of_iommu.h | 15 ++++++++++++++
> 2 files changed, 67 insertions(+)
>
> diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c
> index 1a65cc806898..bec51eb47b0d 100644
> --- a/drivers/iommu/of_iommu.c
> +++ b/drivers/iommu/of_iommu.c
> @@ -219,3 +219,55 @@ static int __init of_iommu_init(void)
> return 0;
> }
> postcore_initcall_sync(of_iommu_init);
> +
> +int iommu_fwspec_init(struct device *dev, struct device_node *iommu_np)
> +{
> + struct iommu_fwspec *fwspec = dev->archdata.iommu;
> +
> + if (fwspec)
> + return 0;
> +
> + fwspec = kzalloc(sizeof(*fwspec), GFP_KERNEL);
> + if (!fwspec)
> + return -ENOMEM;
> +
> + fwspec->iommu_np = of_node_get(iommu_np);
> + fwspec->iommu_ops = of_iommu_get_ops(iommu_np);
> + dev->archdata.iommu = fwspec;
> + return 0;
> +}
> +
> +void iommu_fwspec_free(struct device *dev)
> +{
> + struct iommu_fwspec *fwspec = dev->archdata.iommu;
> +
> + if (fwspec) {
> + of_node_put(fwspec->iommu_np);
> + kfree(fwspec);
> + }
> +}
> +
> +int iommu_fwspec_add_ids(struct device *dev, u32 *ids, int num_ids)
> +{
> + struct iommu_fwspec *fwspec = dev->archdata.iommu;
> + size_t size;
> +
> + if (!fwspec)
> + return -EINVAL;
> +
> + size = offsetof(struct iommu_fwspec, ids[fwspec->num_ids + num_ids]);
> + fwspec = krealloc(dev->archdata.iommu, size, GFP_KERNEL);
> + if (!fwspec)
> + return -ENOMEM;
> +
> + while (num_ids--)
> + fwspec->ids[fwspec->num_ids++] = *ids++;
> +
> + dev->archdata.iommu = fwspec;
It might just be me, but I find this really fiddly to read. The fact
that you realloc the whole fwspec, rather than just the array isn't
helping, but I also think that while loop would be much better off as
a for loop, using the index as, well, an index into the ids array and
fwspec->ids array.
Will
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2016-08-31 17:28 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-23 19:05 [PATCH v5 00/19] Generic DT bindings for PCI IOMMUs and ARM SMMU Robin Murphy
[not found] ` <cover.1471975357.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-08-23 19:05 ` [PATCH v5 01/19] Docs: dt: add PCI IOMMU map bindings Robin Murphy
2016-08-23 19:05 ` [PATCH v5 02/19] of/irq: Break out msi-map lookup (again) Robin Murphy
2016-08-23 19:05 ` [PATCH v5 03/19] iommu/of: Handle iommu-map property for PCI Robin Murphy
[not found] ` <93909648835867008b21cb688a1d7db238d3641a.1471975357.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-08-31 15:43 ` Will Deacon
2016-08-23 19:05 ` [PATCH v5 04/19] iommu/of: Introduce iommu_fwspec Robin Murphy
[not found] ` <3e8eaf4fd65833fecc62828214aee81f6ca6c190.1471975357.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-08-31 17:28 ` Will Deacon [this message]
[not found] ` <20160831172856.GI29505-5wv7dgnIgG8@public.gmane.org>
2016-09-01 12:07 ` Robin Murphy
[not found] ` <900f3dcb-217c-4fb3-2f7d-15572f31a0c0-5wv7dgnIgG8@public.gmane.org>
2016-09-01 12:31 ` Will Deacon
[not found] ` <20160901123158.GE6721-5wv7dgnIgG8@public.gmane.org>
2016-09-01 13:25 ` Robin Murphy
2016-08-23 19:05 ` [PATCH v5 05/19] iommu/arm-smmu: Implement of_xlate() for SMMUv3 Robin Murphy
[not found] ` <6088007f60a24b36a3bf965b62521f99cd908019.1471975357.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-09-01 17:06 ` Will Deacon
[not found] ` <20160901170604.GP6721-5wv7dgnIgG8@public.gmane.org>
2016-09-01 17:40 ` Robin Murphy
2016-08-23 19:05 ` [PATCH v5 06/19] iommu/arm-smmu: Support non-PCI devices with SMMUv3 Robin Murphy
[not found] ` <207d0ae38c5b01b7cf7e48231a4d01bac453b57c.1471975357.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-09-01 17:08 ` Will Deacon
2016-08-23 19:05 ` [PATCH v5 07/19] iommu/arm-smmu: Set PRIVCFG in stage 1 STEs Robin Murphy
[not found] ` <1cda9861ce3ede6c2de9c6c4f2294549808b421b.1471975357.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-09-01 17:19 ` Will Deacon
2016-08-23 19:05 ` [PATCH v5 08/19] iommu/arm-smmu: Handle stream IDs more dynamically Robin Murphy
[not found] ` <36f71a07fbc6037ca664bdcc540650f893081dd1.1471975357.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-09-01 18:17 ` Will Deacon
2016-08-23 19:05 ` [PATCH v5 09/19] iommu/arm-smmu: Consolidate stream map entry state Robin Murphy
[not found] ` <26fcf7d3138816b9546a3dcc2bbbc2f229f34c91.1471975357.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-09-01 18:32 ` Will Deacon
[not found] ` <20160901183257.GT6721-5wv7dgnIgG8@public.gmane.org>
2016-09-01 18:45 ` Robin Murphy
[not found] ` <6d3209ff-51ad-30ca-867b-ce62105e6699-5wv7dgnIgG8@public.gmane.org>
2016-09-01 18:54 ` Will Deacon
2016-08-23 19:05 ` [PATCH v5 10/19] iommu/arm-smmu: Keep track of S2CR state Robin Murphy
[not found] ` <e086741acfd0959671d184203ef758c824c8d7da.1471975357.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-09-01 18:42 ` Will Deacon
[not found] ` <20160901184259.GU6721-5wv7dgnIgG8@public.gmane.org>
2016-09-01 19:00 ` Robin Murphy
2016-08-23 19:05 ` [PATCH v5 11/19] iommu/arm-smmu: Refactor mmu-masters handling Robin Murphy
[not found] ` <00301aa60323bb94588d078f2962feea0cb45c72.1471975357.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-09-01 18:47 ` Will Deacon
2016-08-23 19:05 ` [PATCH v5 12/19] iommu/arm-smmu: Streamline SMMU data lookups Robin Murphy
2016-08-23 19:05 ` [PATCH v5 13/19] iommu/arm-smmu: Add a stream map entry iterator Robin Murphy
2016-08-23 19:05 ` [PATCH v5 14/19] iommu/arm-smmu: Intelligent SMR allocation Robin Murphy
[not found] ` <693b7fdd58be254297eb43ac8f5e035beb5226b2.1471975357.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-09-01 15:17 ` Lorenzo Pieralisi
2016-09-01 17:59 ` Robin Murphy
2016-08-23 19:05 ` [PATCH v5 15/19] iommu/arm-smmu: Convert to iommu_fwspec Robin Murphy
[not found] ` <221f668d606abdfb4d6ee6da2c5f568c57ceccdd.1471975357.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-09-01 18:53 ` Will Deacon
2016-08-23 19:05 ` [PATCH v5 16/19] Docs: dt: document ARM SMMU generic binding usage Robin Murphy
[not found] ` <b4f0eca93ac944c3430297b97c703e1bc54846d7.1471975357.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-08-29 15:44 ` Rob Herring
2016-08-23 19:05 ` [PATCH v5 17/19] iommu/arm-smmu: Wire up generic configuration support Robin Murphy
[not found] ` <4439250e01ac071bae8f03a5ccf107ed7ddc0b49.1471975357.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-09-01 19:02 ` Will Deacon
2016-08-23 19:05 ` [PATCH v5 18/19] iommu/arm-smmu: Set domain geometry Robin Murphy
[not found] ` <d6cedec16fe96a081ea2f9f27378dd1a6f406c72.1471975357.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-08-31 21:00 ` Auger Eric
2016-08-23 19:05 ` [PATCH v5 19/19] iommu/dma: Add support for mapping MSIs Robin Murphy
2016-08-23 19:05 ` Robin Murphy
[not found] ` <4c901ff0f6355039de55b0bc0df283065f02efa1.1471975357.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-08-24 8:16 ` Thomas Gleixner
2016-08-24 8:16 ` Thomas Gleixner
2016-08-24 10:06 ` Robin Murphy
2016-08-24 10:06 ` Robin Murphy
2016-08-25 22:25 ` Auger Eric
2016-08-25 22:25 ` Auger Eric
[not found] ` <5d8d4ae0-846a-2499-eb46-6f215b87ebd4-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-08-26 1:17 ` Robin Murphy
2016-08-26 1:17 ` Robin Murphy
[not found] ` <20160826021736.571a732f-h2/QxWiDqNo@public.gmane.org>
2016-08-31 20:51 ` Auger Eric
2016-08-31 20:51 ` Auger Eric
2016-08-23 19:15 ` [PATCH v5 00/19] Generic DT bindings for PCI IOMMUs and ARM SMMU Robin Murphy
2016-08-23 19:15 ` Robin Murphy
[not found] ` <3a9a9369-d8cd-66f4-9344-965c80894bb6-5wv7dgnIgG8@public.gmane.org>
2016-09-01 3:49 ` Anup Patel
2016-09-01 3:49 ` Anup Patel
[not found] ` <CAALAos-OzPG=+aU8eKEZtx6EFXytPXq09k3QweHvtYCD=mN0mQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-09-01 10:10 ` Robin Murphy
2016-09-01 10:10 ` Robin Murphy
2016-09-01 15:22 ` Lorenzo Pieralisi
2016-09-01 19:05 ` Will Deacon
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=20160831172856.GI29505@arm.com \
--to=will.deacon-5wv7dgnigg8@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=eric.auger-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=jean-philippe.brucker-5wv7dgnIgG8@public.gmane.org \
--cc=joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org \
--cc=lorenzo.pieralisi-5wv7dgnIgG8@public.gmane.org \
--cc=punit.agrawal-5wv7dgnIgG8@public.gmane.org \
--cc=robin.murphy-5wv7dgnIgG8@public.gmane.org \
--cc=thunder.leizhen-hv44wF8Li93QT0dZR+AlfA@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 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.