[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
On 19.09.19 12:44, Julien Grall wrote: Hi Oleksandr, Hi, Julien. On 13/09/2019 16:35, Oleksandr Tyshchenko wrote:diff --git a/xen/drivers/passthrough/arm/iommu.c b/xen/drivers/passthrough/arm/iommu.cindex 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/ ok + * 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 lists/node//? ok + * 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> Thank you. Can I do anything to speed up [1]? That patch was tested and worked fine. Cheers,[1] https://lists.xenproject.org/archives/html/xen-devel/2019-08/msg01924.html -- Regards, Oleksandr Tyshchenko _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |