diff options
author | 2014-01-23 15:52:06 -0500 | |
---|---|---|
committer | 2014-01-23 15:52:06 -0500 | |
commit | 41be702a542a0d14bb0b1c16e824fa9ed27616ec (patch) | |
tree | e48942a05882da47544e179c6a0c920e00137a6a /lib/genalloc.c | |
parent | SELinux: Fix memory leak upon loading policy (diff) | |
parent | Linux 3.13 (diff) | |
download | wireguard-linux-41be702a542a0d14bb0b1c16e824fa9ed27616ec.tar.xz wireguard-linux-41be702a542a0d14bb0b1c16e824fa9ed27616ec.zip |
Merge tag 'v3.13' into next
Linux 3.13
Minor fixup needed in selinux_inet_conn_request()
Conflicts:
security/selinux/hooks.c
Diffstat (limited to 'lib/genalloc.c')
-rw-r--r-- | lib/genalloc.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/genalloc.c b/lib/genalloc.c index 26cf20be72b7..dda31168844f 100644 --- a/lib/genalloc.c +++ b/lib/genalloc.c @@ -313,6 +313,34 @@ retry: EXPORT_SYMBOL(gen_pool_alloc); /** + * gen_pool_dma_alloc - allocate special memory from the pool for DMA usage + * @pool: pool to allocate from + * @size: number of bytes to allocate from the pool + * @dma: dma-view physical address + * + * Allocate the requested number of bytes from the specified pool. + * Uses the pool allocation function (with first-fit algorithm by default). + * Can not be used in NMI handler on architectures without + * NMI-safe cmpxchg implementation. + */ +void *gen_pool_dma_alloc(struct gen_pool *pool, size_t size, dma_addr_t *dma) +{ + unsigned long vaddr; + + if (!pool) + return NULL; + + vaddr = gen_pool_alloc(pool, size); + if (!vaddr) + return NULL; + + *dma = gen_pool_virt_to_phys(pool, vaddr); + + return (void *)vaddr; +} +EXPORT_SYMBOL(gen_pool_dma_alloc); + +/** * gen_pool_free - free allocated special memory back to the pool * @pool: pool to free to * @addr: starting address of memory to free back to pool |