dmapool.c (756a025f00091918d9d09ca3229defb160b409c0) dmapool.c (1170532bb49f9468aedabdc1d5a560e2521a2bcc)
1/*
2 * DMA Pool allocator
3 *
4 * Copyright 2001 David Brownell
5 * Copyright 2007 Intel Corporation
6 * Author: Matthew Wilcox <willy@linux.intel.com>
7 *
8 * This software may be redistributed and/or modified under the terms of

--- 280 unchanged lines hidden (view full) ---

289 page = list_entry(pool->page_list.next,
290 struct dma_page, page_list);
291 if (is_page_busy(page)) {
292 if (pool->dev)
293 dev_err(pool->dev,
294 "dma_pool_destroy %s, %p busy\n",
295 pool->name, page->vaddr);
296 else
1/*
2 * DMA Pool allocator
3 *
4 * Copyright 2001 David Brownell
5 * Copyright 2007 Intel Corporation
6 * Author: Matthew Wilcox <willy@linux.intel.com>
7 *
8 * This software may be redistributed and/or modified under the terms of

--- 280 unchanged lines hidden (view full) ---

289 page = list_entry(pool->page_list.next,
290 struct dma_page, page_list);
291 if (is_page_busy(page)) {
292 if (pool->dev)
293 dev_err(pool->dev,
294 "dma_pool_destroy %s, %p busy\n",
295 pool->name, page->vaddr);
296 else
297 printk(KERN_ERR
298 "dma_pool_destroy %s, %p busy\n",
297 pr_err("dma_pool_destroy %s, %p busy\n",
299 pool->name, page->vaddr);
300 /* leak the still-in-use consistent memory */
301 list_del(&page->page_list);
302 kfree(page);
303 } else
304 pool_free_page(pool, page);
305 }
306

--- 112 unchanged lines hidden (view full) ---

419 page = pool_find_page(pool, dma);
420 if (!page) {
421 spin_unlock_irqrestore(&pool->lock, flags);
422 if (pool->dev)
423 dev_err(pool->dev,
424 "dma_pool_free %s, %p/%lx (bad dma)\n",
425 pool->name, vaddr, (unsigned long)dma);
426 else
298 pool->name, page->vaddr);
299 /* leak the still-in-use consistent memory */
300 list_del(&page->page_list);
301 kfree(page);
302 } else
303 pool_free_page(pool, page);
304 }
305

--- 112 unchanged lines hidden (view full) ---

418 page = pool_find_page(pool, dma);
419 if (!page) {
420 spin_unlock_irqrestore(&pool->lock, flags);
421 if (pool->dev)
422 dev_err(pool->dev,
423 "dma_pool_free %s, %p/%lx (bad dma)\n",
424 pool->name, vaddr, (unsigned long)dma);
425 else
427 printk(KERN_ERR "dma_pool_free %s, %p/%lx (bad dma)\n",
426 pr_err("dma_pool_free %s, %p/%lx (bad dma)\n",
428 pool->name, vaddr, (unsigned long)dma);
429 return;
430 }
431
432 offset = vaddr - page->vaddr;
433#ifdef DMAPOOL_DEBUG
434 if ((dma - page->dma) != offset) {
435 spin_unlock_irqrestore(&pool->lock, flags);
436 if (pool->dev)
437 dev_err(pool->dev,
438 "dma_pool_free %s, %p (bad vaddr)/%Lx\n",
439 pool->name, vaddr, (unsigned long long)dma);
440 else
427 pool->name, vaddr, (unsigned long)dma);
428 return;
429 }
430
431 offset = vaddr - page->vaddr;
432#ifdef DMAPOOL_DEBUG
433 if ((dma - page->dma) != offset) {
434 spin_unlock_irqrestore(&pool->lock, flags);
435 if (pool->dev)
436 dev_err(pool->dev,
437 "dma_pool_free %s, %p (bad vaddr)/%Lx\n",
438 pool->name, vaddr, (unsigned long long)dma);
439 else
441 printk(KERN_ERR
442 "dma_pool_free %s, %p (bad vaddr)/%Lx\n",
440 pr_err("dma_pool_free %s, %p (bad vaddr)/%Lx\n",
443 pool->name, vaddr, (unsigned long long)dma);
444 return;
445 }
446 {
447 unsigned int chain = page->offset;
448 while (chain < pool->allocation) {
449 if (chain != offset) {
450 chain = *(int *)(page->vaddr + chain);
451 continue;
452 }
453 spin_unlock_irqrestore(&pool->lock, flags);
454 if (pool->dev)
455 dev_err(pool->dev, "dma_pool_free %s, dma %Lx already free\n",
456 pool->name, (unsigned long long)dma);
457 else
441 pool->name, vaddr, (unsigned long long)dma);
442 return;
443 }
444 {
445 unsigned int chain = page->offset;
446 while (chain < pool->allocation) {
447 if (chain != offset) {
448 chain = *(int *)(page->vaddr + chain);
449 continue;
450 }
451 spin_unlock_irqrestore(&pool->lock, flags);
452 if (pool->dev)
453 dev_err(pool->dev, "dma_pool_free %s, dma %Lx already free\n",
454 pool->name, (unsigned long long)dma);
455 else
458 printk(KERN_ERR "dma_pool_free %s, dma %Lx already free\n",
459 pool->name, (unsigned long long)dma);
456 pr_err("dma_pool_free %s, dma %Lx already free\n",
457 pool->name, (unsigned long long)dma);
460 return;
461 }
462 }
463 memset(vaddr, POOL_POISON_FREED, pool->size);
464#endif
465
466 page->in_use--;
467 *(int *)vaddr = page->offset;

--- 68 unchanged lines hidden ---
458 return;
459 }
460 }
461 memset(vaddr, POOL_POISON_FREED, pool->size);
462#endif
463
464 page->in_use--;
465 *(int *)vaddr = page->offset;

--- 68 unchanged lines hidden ---