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