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

Re: [Xen-devel] [PATCH 5/7] xen/arm: SMMU: Keep registering legacy master in SMMU probe



On Fri, 30 Jun 2017, Wei Chen wrote:
> The legacy IOMMU bindings place the SMMU MasterIDs in the SMMU device
> tree node. In current code, we register the SMMU masters while probing
> SMMU. It's better to keep registering legacy masters in the SMMU probing
> progress. If we move registering legacy SMMU masters to add_device or
> assign_device, we have to go through all SMMUs to find correct SMMU for
> master device. It's inefficient and doesn't bring any enhancement.
> 
> Similarly, if we want to register generic masters in SMMU probing, we
> have to go through whole device tree to find master devices for all
> SMMUs. So we only keep registering legacy master in SMMU probing.
> 
> Signed-off-by: Wei Chen <Wei.Chen@xxxxxxx>

Acked-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>


> ---
>  xen/drivers/passthrough/arm/smmu.c | 31 +++++++++++++++++++------------
>  1 file changed, 19 insertions(+), 12 deletions(-)
> 
> diff --git a/xen/drivers/passthrough/arm/smmu.c 
> b/xen/drivers/passthrough/arm/smmu.c
> index 441c296..895024c 100644
> --- a/xen/drivers/passthrough/arm/smmu.c
> +++ b/xen/drivers/passthrough/arm/smmu.c
> @@ -2375,21 +2375,28 @@ static int arm_smmu_device_dt_probe(struct 
> platform_device *pdev)
>       if (err)
>               return err;
>  
> -     i = 0;
>       smmu->masters = RB_ROOT;
> -     while (!of_parse_phandle_with_args(dev->of_node, "mmu-masters",
> -                                        "#stream-id-cells", i,
> -                                        &masterspec)) {
> -             err = register_smmu_master(smmu, dev, &masterspec);
> -             if (err) {
> -                     dev_err(dev, "failed to add master %s\n",
> -                             masterspec.np->name);
> -                     goto out_put_masters;
> -             }
> +     /*
> +      * The SMMU MasterIDs are listed in SMMU device tree node while using
> +      * the legacy IOMMU bindins. So in the SMMU probing progress, we will
> +      * register the SMMU master only for legacy bindings.
> +      */
> +     if (using_legacy_binding) {
> +             i = 0;
> +             while (!of_parse_phandle_with_args(dev->of_node, "mmu-masters",
> +                                                     "#stream-id-cells", i,
> +                                                     &masterspec)) {
> +                     err = register_smmu_master(smmu, dev, &masterspec);
> +                     if (err) {
> +                             dev_err(dev, "failed to add master %s\n",
> +                                     masterspec.np->name);
> +                             goto out_put_masters;
> +                     }
>  
> -             i++;
> +                     i++;
> +             }
> +             dev_notice(dev, "registered %d legacy master devices\n", i);
>       }
> -     dev_notice(dev, "registered %d master devices\n", i);
>  
>       parse_driver_options(smmu);
>  
> -- 
> 2.7.4
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> https://lists.xen.org/xen-devel
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.