From 6235ac7b1cc4eca809d1f2297d4d70d3ddcf0f23 Mon Sep 17 00:00:00 2001 From: Matthew Wilcox Date: Mon, 3 Dec 2007 12:09:33 -0500 Subject: [PATCH] --- yaml --- r: 83333 b: refs/heads/master c: 2cae367e4854ff055c4f5e8aacd56b0eeec9f6cb h: refs/heads/master i: 83331: f76c5042a397547288a952677a3e727ecca109bd v: v3 --- [refs] | 2 +- trunk/mm/dmapool.c | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index f322dd9c63c0..03f54109beb7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e87aa773747fb5e4217d716ea22a573c03b6693a +refs/heads/master: 2cae367e4854ff055c4f5e8aacd56b0eeec9f6cb diff --git a/trunk/mm/dmapool.c b/trunk/mm/dmapool.c index 92e886d37e90..b5ff9ce8765b 100644 --- a/trunk/mm/dmapool.c +++ b/trunk/mm/dmapool.c @@ -275,8 +275,8 @@ void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags, size_t offset; void *retval; - restart: spin_lock_irqsave(&pool->lock, flags); + restart: list_for_each_entry(page, &pool->page_list, page_list) { int i; /* only cachable accesses here ... */ @@ -299,12 +299,13 @@ void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags, DECLARE_WAITQUEUE(wait, current); __set_current_state(TASK_INTERRUPTIBLE); - add_wait_queue(&pool->waitq, &wait); + __add_wait_queue(&pool->waitq, &wait); spin_unlock_irqrestore(&pool->lock, flags); schedule_timeout(POOL_TIMEOUT_JIFFIES); - remove_wait_queue(&pool->waitq, &wait); + spin_lock_irqsave(&pool->lock, flags); + __remove_wait_queue(&pool->waitq, &wait); goto restart; } retval = NULL; @@ -406,7 +407,7 @@ void dma_pool_free(struct dma_pool *pool, void *vaddr, dma_addr_t dma) page->in_use--; set_bit(block, &page->bitmap[map]); if (waitqueue_active(&pool->waitq)) - wake_up(&pool->waitq); + wake_up_locked(&pool->waitq); /* * Resist a temptation to do * if (!is_page_busy(bpp, page->bitmap)) pool_free_page(pool, page);