On Wed, Aug 26, 2020 at 06:27:51AM -0400, FelixCuioc wrote:
> After acpi device in RMRR is detected,it is necessary
> to establish a mapping for these devices.
> In acpi_device_create_direct_mappings(),create a mapping
> for the acpi device in RMRR.
> Add a helper to achieve the acpi namespace device can
> access the RMRR region.
> 
> Signed-off-by: FelixCuioc <felixcui...@zhaoxin.com>
> ---
>  drivers/iommu/intel/iommu.c | 27 +++++++++++++++++++++++++++
>  drivers/iommu/iommu.c       |  6 ++++++
>  include/linux/iommu.h       |  3 +++
>  3 files changed, 36 insertions(+)
> 
> diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
> index f774ef63d473..b31f02f41c96 100644
> --- a/drivers/iommu/intel/iommu.c
> +++ b/drivers/iommu/intel/iommu.c
> @@ -4797,6 +4797,20 @@ static int __init platform_optin_force_iommu(void)
>  
>       return 1;
>  }
> +static int acpi_device_create_direct_mappings(struct device *pn_dev, struct 
> device *acpi_device)

Blank line.

> +{
> +     struct iommu_group *group;
> +
> +     acpi_device->bus->iommu_ops = &intel_iommu_ops;
> +     group = iommu_group_get(pn_dev);
> +     if (!group) {
> +             pr_warn("ACPI name space devices create direct mappings 
> wrong!\n");
> +             return -1;

Use a proper error code.  -ENOMEM?  -EINVAL?

> +     }
> +     __acpi_device_create_direct_mappings(group, acpi_device);
> +
> +     return 0;
> +}
>  
>  static int __init probe_acpi_namespace_devices(void)
>  {
> @@ -4812,6 +4826,7 @@ static int __init probe_acpi_namespace_devices(void)
>                       struct acpi_device_physical_node *pn;
>                       struct iommu_group *group;
>                       struct acpi_device *adev;
> +                     struct device *pn_dev = NULL;
>  
>                       if (dev->bus != &acpi_bus_type)
>                               continue;
> @@ -4822,6 +4837,7 @@ static int __init probe_acpi_namespace_devices(void)
>                                           &adev->physical_node_list, node) {
>                               group = iommu_group_get(pn->dev);
>                               if (group) {
> +                                     pn_dev = pn->dev;
>                                       iommu_group_put(group);
>                                       continue;
>                               }
> @@ -4830,7 +4846,18 @@ static int __init probe_acpi_namespace_devices(void)
>                               ret = iommu_probe_device(pn->dev);
>                               if (ret)
>                                       break;
> +                             pn_dev = pn->dev;
> +                     }
> +                     if (pn_dev == NULL) {

Run checkpatch.pl --strict on this patch.  Use "if (!pn_dev) {".

> +                             dev->bus->iommu_ops = &intel_iommu_ops;
> +                             ret = iommu_probe_device(dev);
> +                             if (ret) {
> +                                     pr_err("acpi_device probe fail! 
> ret:%d\n", ret);
> +                                     return ret;
                                        ^^^^^^^^^^
This should be goto unlock;

> +                             }
> +                             return 0;
                                ^^^^^^^^
>                       }
> +                     ret = acpi_device_create_direct_mappings(pn_dev, dev);

unlock:

>                       mutex_unlock(&adev->physical_node_lock);
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
regards,
dan carpenter

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to