[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [XEN][RFC PATCH v3 07/14] xen/iommu: Move spin_lock from iommu_dt_device_is_assigned to caller



Hi,

On 08/03/2022 19:46, Vikram Garhwal wrote:
Rename iommu_dt_device_is_assigned() to iommu_dt_device_is_assigned_lock().

Moving spin_lock to caller was done to prevent the concurrent access to
iommu_dt_device_is_assigned while doing add/remove/assign/deassign.

Signed-off-by: Vikram Garhwal <fnu.vikram@xxxxxxxxxx>
---
  xen/drivers/passthrough/device_tree.c | 11 +++++++----
  1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/xen/drivers/passthrough/device_tree.c 
b/xen/drivers/passthrough/device_tree.c
index 98f2aa0dad..b3b04f8e03 100644
--- a/xen/drivers/passthrough/device_tree.c
+++ b/xen/drivers/passthrough/device_tree.c
@@ -83,16 +83,14 @@ fail:
      return rc;
  }
-static bool_t iommu_dt_device_is_assigned(const struct dt_device_node *dev)
+static bool_t iommu_dt_device_is_assigned_lock(const struct dt_device_node 
*dev)

NIT: We tend to use "_locked" when a function should be called with the lock taken.

  {
      bool_t assigned = 0;
if ( !dt_device_is_protected(dev) )
          return 0;
- spin_lock(&dtdevs_lock);
      assigned = !list_empty(&dev->domain_list);
-    spin_unlock(&dtdevs_lock);
return assigned;
  }
@@ -225,12 +223,17 @@ int iommu_do_dt_domctl(struct xen_domctl *domctl, struct 
domain *d,
if ( domctl->cmd == XEN_DOMCTL_test_assign_device )
          {
-            if ( iommu_dt_device_is_assigned(dev) )
+            spin_lock(&dtdevs_lock);

Is this actually sufficient? IOW what will ensure that the "dev" doesn't disappear between the time we look it up (see dt_find_node_by_gpath()) and we check the assignment?

Cheers,

--
Julien Grall



 


Rackspace

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