Thread (37 messages) 37 messages, 3 authors, 2021-08-24

Re: [PATCH v5 02/11] powerpc/kernel/iommu: Add new iommu_table_in_use() helper

From: Frederic Barrat <hidden>
Date: 2021-07-19 13:54:18
Also in: lkml


On 16/07/2021 10:27, Leonardo Bras wrote:
quoted hunk ↗ jump to hunk
@@ -1099,18 +1105,13 @@ int iommu_take_ownership(struct iommu_table *tbl)
  	for (i = 0; i < tbl->nr_pools; i++)
  		spin_lock_nest_lock(&tbl->pools[i].lock, &tbl->large_pool.lock);
  
-	iommu_table_release_pages(tbl);
-
-	if (!bitmap_empty(tbl->it_map, tbl->it_size)) {
+	if (iommu_table_in_use(tbl)) {
  		pr_err("iommu_tce: it_map is not empty");
  		ret = -EBUSY;
-		/* Undo iommu_table_release_pages, i.e. restore bit#0, etc */
-		iommu_table_reserve_pages(tbl, tbl->it_reserved_start,
-				tbl->it_reserved_end);
-	} else {
-		memset(tbl->it_map, 0xff, sz);
  	}
  
+	memset(tbl->it_map, 0xff, sz);
+

So if the table is not empty, we fail (EBUSY) but we now also completely 
overwrite the bitmap. It was in an unexpected state, but we're making it 
worse. Or am I missing something?

   Fred

  	for (i = 0; i < tbl->nr_pools; i++)
  		spin_unlock(&tbl->pools[i].lock);
  	spin_unlock_irqrestore(&tbl->large_pool.lock, flags);
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help