[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.h
index 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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.