[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1382978662.4097.35.camel@ul30vt.home>
Date: Mon, 28 Oct 2013 10:44:22 -0600
From: Alex Williamson <alex.williamson@...hat.com>
To: Antonios Motakis <a.motakis@...tualopensystems.com>
Cc: Will Deacon <will.deacon@....com>, Joerg Roedel <joro@...tes.org>,
"moderated list:ARM SMMU DRIVER"
<linux-arm-kernel@...ts.infradead.org>,
"open list:IOMMU DRIVERS" <iommu@...ts.linux-foundation.org>,
open list <linux-kernel@...r.kernel.org>,
kvmarm@...ts.cs.columbia.edu, tech@...tualopensystems.com
Subject: Re: [PATCH v2] ARM: SMMU: add devices attached to the SMMU to an
IOMMU group
On Fri, 2013-10-18 at 17:08 +0200, Antonios Motakis wrote:
> IOMMU groups are expected by certain users of the IOMMU API,
> e.g. VFIO. Add new devices found by the SMMU driver to an IOMMU
> group to satisfy those users.
>
> Changes from v1:
> * Added check that dev->archdata.iommu has not been set already by an IOMMU
> driver. This way we can also skip checking for an existing IOMMU group.
>
> Signed-off-by: Antonios Motakis <a.motakis@...tualopensystems.com>
Looks ok to me.
Acked-by: Alex Williamson <alex.williamson@...hat.com>
> ---
> drivers/iommu/arm-smmu.c | 19 ++++++++++++++++++-
> 1 file changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
> index 0f45a48..6762885 100644
> --- a/drivers/iommu/arm-smmu.c
> +++ b/drivers/iommu/arm-smmu.c
> @@ -1502,6 +1502,13 @@ static int arm_smmu_add_device(struct device *dev)
> {
> struct arm_smmu_device *child, *parent, *smmu;
> struct arm_smmu_master *master = NULL;
> + struct iommu_group *group;
> + int ret;
> +
> + if (dev->archdata.iommu) {
> + dev_warn(dev, "IOMMU driver already assigned to device\n");
> + return -EINVAL;
> + }
>
> spin_lock(&arm_smmu_devices_lock);
> list_for_each_entry(parent, &arm_smmu_devices, list) {
> @@ -1534,13 +1541,23 @@ static int arm_smmu_add_device(struct device *dev)
> if (!master)
> return -ENODEV;
>
> + group = iommu_group_alloc();
> + if (IS_ERR(group)) {
> + dev_err(dev, "Failed to allocate IOMMU group\n");
> + return PTR_ERR(group);
> + }
> +
> + ret = iommu_group_add_device(group, dev);
> + iommu_group_put(group);
> dev->archdata.iommu = smmu;
> - return 0;
> +
> + return ret;
> }
>
> static void arm_smmu_remove_device(struct device *dev)
> {
> dev->archdata.iommu = NULL;
> + iommu_group_remove_device(dev);
> }
>
> static struct iommu_ops arm_smmu_ops = {
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists