xen/arm: domain_build: Don't expose IOMMU specific properties to hwdom

We always skip the IOMMU device when creating DT for hwdom if there is
an appropriate driver for it in Xen (device_get_class(iommu_node)
returns DEVICE_IOMMU). So, even if it is not used by Xen it will be skipped.

We should also skip the IOMMU specific properties of the master device
behind that IOMMU in order to avoid exposing an half complete IOMMU
bindings to hwdom.

According to the Linux's docs:
1. Documentation/devicetree/bindings/iommu/iommu.txt
2. Documentation/devicetree/bindings/pci/pci-iommu.txt

Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
Acked-by: Julien Grall <julien.grall@arm.com>
Release-acked-by: Juergen Gross <jgross@suse.com>
This commit is contained in:
Oleksandr Tyshchenko authored and Julien Grall committed 2019-10-24 13:28:02 +01:00
1 parent 3f82eb9740
commit 818927ecfb
1 file changed
+28
+28
View File
@@ -480,10 +480,25 @@ static int __init write_properties(struct domain *d, struct kernel_info *kinfo,
const struct dt_property *prop, *status = NULL;
int res = 0;
int had_dom0_bootargs = 0;
struct dt_device_node *iommu_node;
if ( kinfo->cmdline && kinfo->cmdline[0] )
bootargs = &kinfo->cmdline[0];
/*
* We always skip the IOMMU device when creating DT for hwdom if there is
* an appropriate driver for it in Xen (device_get_class(iommu_node)
* returns DEVICE_IOMMU).
* We should also skip the IOMMU specific properties of the master device
* behind that IOMMU in order to avoid exposing an half complete IOMMU
* bindings to hwdom.
* Use "iommu_node" as an indicator of the master device which properties
* should be skipped.
*/
iommu_node = dt_parse_phandle(node, "iommus", 0);
if ( iommu_node && device_get_class(iommu_node) != DEVICE_IOMMU )
iommu_node = NULL;
dt_for_each_property_node (node, prop)
{
const void *prop_data = prop->value;
@@ -540,6 +555,19 @@ static int __init write_properties(struct domain *d, struct kernel_info *kinfo,
continue;
}
if ( iommu_node )
{
/* Don't expose IOMMU specific properties to hwdom */
if ( dt_property_name_is_equal(prop, "iommus") )
continue;
if ( dt_property_name_is_equal(prop, "iommu-map") )
continue;
if ( dt_property_name_is_equal(prop, "iommu-map-mask") )
continue;
}
res = fdt_property(kinfo->fdt, prop->name, prop_data, prop_len);
if ( res )
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.