Re: [PATCH v4 3/9] dmapool: cleanup dma_pool_destroy

2018-11-12 Thread Matthew Wilcox
On Mon, Nov 12, 2018 at 10:42:48AM -0500, Tony Battersby wrote:
> Remove a small amount of code duplication between dma_pool_destroy() and
> pool_free_page() in preparation for adding more code without having to
> duplicate it.  No functional changes.
> 
> Signed-off-by: Tony Battersby 

Acked-by: Matthew Wilcox 
___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu


[PATCH v4 3/9] dmapool: cleanup dma_pool_destroy

2018-11-12 Thread Tony Battersby
Remove a small amount of code duplication between dma_pool_destroy() and
pool_free_page() in preparation for adding more code without having to
duplicate it.  No functional changes.

Signed-off-by: Tony Battersby 
---
--- linux/mm/dmapool.c.orig 2018-08-02 09:59:15.0 -0400
+++ linux/mm/dmapool.c  2018-08-02 10:01:26.0 -0400
@@ -249,13 +249,22 @@ static inline bool is_page_busy(struct d
 
 static void pool_free_page(struct dma_pool *pool, struct dma_page *page)
 {
+   void *vaddr = page->vaddr;
dma_addr_t dma = page->dma;
 
+   list_del(>page_list);
+
+   if (is_page_busy(page)) {
+   dev_err(pool->dev,
+   "dma_pool_destroy %s, %p busy\n",
+   pool->name, vaddr);
+   /* leak the still-in-use consistent memory */
+   } else {
 #ifdef DMAPOOL_DEBUG
-   memset(page->vaddr, POOL_POISON_FREED, pool->allocation);
+   memset(vaddr, POOL_POISON_FREED, pool->allocation);
 #endif
-   dma_free_coherent(pool->dev, pool->allocation, page->vaddr, dma);
-   list_del(>page_list);
+   dma_free_coherent(pool->dev, pool->allocation, vaddr, dma);
+   }
kfree(page);
 }
 
@@ -269,6 +278,7 @@ static void pool_free_page(struct dma_po
  */
 void dma_pool_destroy(struct dma_pool *pool)
 {
+   struct dma_page *page;
bool empty = false;
 
if (unlikely(!pool))
@@ -284,19 +294,10 @@ void dma_pool_destroy(struct dma_pool *p
device_remove_file(pool->dev, _attr_pools);
mutex_unlock(_reg_lock);
 
-   while (!list_empty(>page_list)) {
-   struct dma_page *page;
-   page = list_entry(pool->page_list.next,
- struct dma_page, page_list);
-   if (is_page_busy(page)) {
-   dev_err(pool->dev,
-   "dma_pool_destroy %s, %p busy\n",
-   pool->name, page->vaddr);
-   /* leak the still-in-use consistent memory */
-   list_del(>page_list);
-   kfree(page);
-   } else
-   pool_free_page(pool, page);
+   while ((page = list_first_entry_or_null(>page_list,
+   struct dma_page,
+   page_list))) {
+   pool_free_page(pool, page);
}
 
kfree(pool);

___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu