linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH][RESEND] lib/genalloc: add a helper function for DMA buffer allocation
@ 2013-10-31  9:16 Nicolin Chen
  2013-10-31 21:26 ` Andrew Morton
  0 siblings, 1 reply; 3+ messages in thread
From: Nicolin Chen @ 2013-10-31  9:16 UTC (permalink / raw)
  To: akpm, joe; +Cc: linux-kernel

When using pool space for DMA buffer, there might be duplicated calling
of gen_pool_alloc() and gen_pool_virt_to_phys() in each implementation.

Thus it's better to add a simple helper function, a compatible one to
the common dma_alloc_coherent(), to save some code.

Signed-off-by: Nicolin Chen <b42378@freescale.com>
---
 include/linux/genalloc.h |  2 ++
 lib/genalloc.c           | 28 ++++++++++++++++++++++++++++
 2 files changed, 30 insertions(+)

diff --git a/include/linux/genalloc.h b/include/linux/genalloc.h
index f8d41cb..1eda33d 100644
--- a/include/linux/genalloc.h
+++ b/include/linux/genalloc.h
@@ -94,6 +94,8 @@ static inline int gen_pool_add(struct gen_pool *pool, unsigned long addr,
 }
 extern void gen_pool_destroy(struct gen_pool *);
 extern unsigned long gen_pool_alloc(struct gen_pool *, size_t);
+extern void *gen_pool_dma_alloc(struct gen_pool *pool, size_t size,
+		dma_addr_t *dma);
 extern void gen_pool_free(struct gen_pool *, unsigned long, size_t);
 extern void gen_pool_for_each_chunk(struct gen_pool *,
 	void (*)(struct gen_pool *, struct gen_pool_chunk *, void *), void *);
diff --git a/lib/genalloc.c b/lib/genalloc.c
index 26cf20b..dda3116 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
-- 
1.8.4



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH][RESEND] lib/genalloc: add a helper function for DMA buffer allocation
  2013-10-31  9:16 [PATCH][RESEND] lib/genalloc: add a helper function for DMA buffer allocation Nicolin Chen
@ 2013-10-31 21:26 ` Andrew Morton
  2013-11-01  5:27   ` Nicolin Chen
  0 siblings, 1 reply; 3+ messages in thread
From: Andrew Morton @ 2013-10-31 21:26 UTC (permalink / raw)
  To: Nicolin Chen; +Cc: joe, linux-kernel

On Thu, 31 Oct 2013 17:16:07 +0800 Nicolin Chen <b42378@freescale.com> wrote:

> When using pool space for DMA buffer, there might be duplicated calling
> of gen_pool_alloc() and gen_pool_virt_to_phys() in each implementation.
> 
> Thus it's better to add a simple helper function, a compatible one to
> the common dma_alloc_coherent(), to save some code.
> 

Well OK, but this new function doesn't have any callers.  So it
increases kernel size and is untestable.

Do you have any conversion patches which we can merge to address these
problems?


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH][RESEND] lib/genalloc: add a helper function for DMA buffer allocation
  2013-10-31 21:26 ` Andrew Morton
@ 2013-11-01  5:27   ` Nicolin Chen
  0 siblings, 0 replies; 3+ messages in thread
From: Nicolin Chen @ 2013-11-01  5:27 UTC (permalink / raw)
  To: Andrew Morton; +Cc: joe, linux-kernel

Sir,

On Thu, Oct 31, 2013 at 02:26:19PM -0700, Andrew Morton wrote:
> On Thu, 31 Oct 2013 17:16:07 +0800 Nicolin Chen <b42378@freescale.com> wrote:
> 
> > When using pool space for DMA buffer, there might be duplicated calling
> > of gen_pool_alloc() and gen_pool_virt_to_phys() in each implementation.
> > 
> > Thus it's better to add a simple helper function, a compatible one to
> > the common dma_alloc_coherent(), to save some code.
> > 
> 
> Well OK, but this new function doesn't have any callers.  So it
> increases kernel size and is untestable.
> 
> Do you have any conversion patches which we can merge to address these
> problems?
> 
>

I'll later send a patch to convert all the combinations of gen_pool_alloc()
and gen_pool_virt_to_phys(), within the entire kernel, to this helper func.

This would need quite a lot people engaged to test it.

If anything unexpected happens during the test, we can refine and fix it.
Surely, if some owners of modified driver don't want their code be altered,
I can drop those modification to their drivers.

Is this okay?

Thank you,
Nicolin Chen



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-11-01  5:40 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-10-31  9:16 [PATCH][RESEND] lib/genalloc: add a helper function for DMA buffer allocation Nicolin Chen
2013-10-31 21:26 ` Andrew Morton
2013-11-01  5:27   ` Nicolin Chen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).