lkml.org 
[lkml]   [2013]   [Oct]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH v2] ARM: SMMU: add devices attached to the SMMU to an IOMMU group
From
Date
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@virtualopensystems.com>


Looks ok to me.

Acked-by: Alex Williamson <alex.williamson@redhat.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 = {




\
 
 \ /
  Last update: 2013-10-28 18:21    [W:0.056 / U:0.780 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site