Re: [PATCH v4 18/18] iommu: exynos: add callback for initializing devices from device tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Marek,

I wanted to test your IOMMU series on an Exynos5420 Peach Pit but the
kernel hangs with your series + dependencies on top of 3.19-rc5.

Bisecting I found that $subject is the offending commit. I've pushed
my test branch [0] in case I missed something.

On Fri, Jan 16, 2015 at 10:13 AM, Marek Szyprowski
<m.szyprowski@xxxxxxxxxxx> wrote:
> This patch adds implementation of of_xlate callback, which prepares
> masters device for attaching to IOMMU. This callback is called during
> creating devices from device tree.
>
> Signed-off-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx>
> ---
>  drivers/iommu/exynos-iommu.c | 28 ++++++++++++++++++++++++++++
>  1 file changed, 28 insertions(+)
>
> diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
> index ea2659159e63..5432b443abfc 100644
> --- a/drivers/iommu/exynos-iommu.c
> +++ b/drivers/iommu/exynos-iommu.c
> @@ -1077,6 +1077,33 @@ static phys_addr_t exynos_iommu_iova_to_phys(struct iommu_domain *iommu_domain,
>         return phys;
>  }
>
> +static int exynos_iommu_of_xlate(struct device *dev,
> +                                struct of_phandle_args *spec)
> +{
> +       struct exynos_iommu_owner *owner = dev->archdata.iommu;
> +       struct platform_device *sysmmu = of_find_device_by_node(spec->np);
> +       struct sysmmu_drvdata *data;
> +
> +       if (!sysmmu)
> +               return -ENODEV;
> +
> +       data = platform_get_drvdata(sysmmu);
> +       if (!data)
> +               return -ENODEV;
> +
> +       if (!owner) {
> +               owner = kzalloc(sizeof(*owner), GFP_KERNEL);
> +               if (!owner)
> +                       return -ENOMEM;
> +
> +               INIT_LIST_HEAD(&owner->clients);
> +               dev->archdata.iommu = owner;
> +       }
> +
> +       list_add_tail(&data->owner_node, &owner->clients);

This is the line that causes the kernel to hang, if I comment the
list_add_tail() call then the kernel boots.

I checked that neither data nor owner are NULL and that the
owner->clients list_head is initialized. Do you have any ideas what
could be happening?

Thanks a lot and best regards,
Javier

[0]: git://git.collabora.co.uk/git/user/javier/linux.git exynos-sysmmu-3.19-rc5
--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux SoC Development]     [Linux Rockchip Development]     [Linux USB Development]     [Video for Linux]     [Linux Audio Users]     [Linux SCSI]     [Yosemite News]

  Powered by Linux