[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V4 2/8] iommu/arm: Add ability to handle deferred probing request
Hi Oleksandr, On 13/09/2019 16:35, Oleksandr Tyshchenko wrote: diff --git a/xen/drivers/passthrough/arm/iommu.c b/xen/drivers/passthrough/arm/iommu.c index f219de9..555acfc 100644 --- a/xen/drivers/passthrough/arm/iommu.c +++ b/xen/drivers/passthrough/arm/iommu.c @@ -20,6 +20,12 @@ #include <xen/device_tree.h> #include <asm/device.h>+/*+ * Deferred probe list is used to keep track of devices for which driver + * requested deferred probing (returned -EAGAIN). + */ +static __initdata LIST_HEAD(deferred_probe_list); + static const struct iommu_ops *iommu_ops;const struct iommu_ops *iommu_get_ops(void)@@ -42,7 +48,7 @@ void __init iommu_set_ops(const struct iommu_ops *ops)int __init iommu_hardware_setup(void){ - struct dt_device_node *np; + struct dt_device_node *np, *tmp; int rc; unsigned int num_iommus = 0;@@ -51,6 +57,21 @@ int __init iommu_hardware_setup(void)rc = device_init(np, DEVICE_IOMMU, NULL); if ( !rc ) num_iommus++; + else if ( rc == -EAGAIN ) + { + /* + * We expect nobody uses device's domain_list at such early stage, NIT: s/We expect nobody uses/Nobody should use/ + * so we can re-use it to link the device in the deferred list to + * avoid introducing extra list_head field in struct dt_device_node. + */ + ASSERT(list_empty(&np->domain_list)); [...] void __hwdom_init arch_iommu_check_autotranslated_hwdom(struct domain *d) diff --git a/xen/include/asm-arm/device.h b/xen/include/asm-arm/device.h index 63a0f36..ee1c3bc 100644 --- a/xen/include/asm-arm/device.h +++ b/xen/include/asm-arm/device.h @@ -44,7 +44,11 @@ struct device_desc { enum device_class class; /* List of devices supported by this driver */ const struct dt_device_match *dt_match; - /* Device initialization */ + /* + * Device initialization. + * + * -EAGAIN is used to indicate that device probing is deferred. + */ int (*init)(struct dt_device_node *dev, const void *data); };diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.hindex 9a7a8f2..3702e9b 100644 --- a/xen/include/xen/device_tree.h +++ b/xen/include/xen/device_tree.h @@ -92,6 +92,13 @@ struct dt_device_node {/* IOMMU specific fields */bool is_protected; + /* + * The main purpose of this list node is to link the structure in the list s/node//? + * of devices assigned to domain. + * + * Boot code (iommu_hardware_setup) re-uses this list to link the structure + * in the list of devices for which driver requested deferred probing. + */ struct list_head domain_list;struct device dev; With the two above addressed and pending the patch it depends on [1] is acked: Reviewed-by: Julien Grall <julien.grall@xxxxxxx> Cheers, [1] https://lists.xenproject.org/archives/html/xen-devel/2019-08/msg01924.html -- Julien Grall _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |