
Hello Masahiro,
Am 08.07.2015 um 06:29 schrieb Masahiro Yamada:
It does not seem efficient to always return cache-aligned memory. Return aligned memory only when GFP_DMA flag is given.
My main motivation for this commit is to refactor device_probe() and device_free() in the next commit. DM_FLAG_ALLOC_PRIV_DMA should be handled more easily.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com
include/linux/compat.h | 1 + lib/linux_compat.c | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-)
Hmm... I think there are a lot of places in code, where implicit is supposed, that kmalloc returns aligned memory ... so this patch needs testing (USB, DFU and ethernet coming in my mind)
bye, Heiko
diff --git a/include/linux/compat.h b/include/linux/compat.h index 64988bf..8b7f8ef 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h @@ -41,6 +41,7 @@ extern struct p_current *current; #define GFP_NOFS ((gfp_t) 0) #define GFP_USER ((gfp_t) 0) #define __GFP_NOWARN ((gfp_t) 0) +#define GFP_DMA ((__force gfp_t)0x01u) #define __GFP_ZERO ((__force gfp_t)0x8000u) /* Return zeroed page on success */
void *kmalloc(size_t size, int flags); diff --git a/lib/linux_compat.c b/lib/linux_compat.c index a936a7e..6da0cfa 100644 --- a/lib/linux_compat.c +++ b/lib/linux_compat.c @@ -18,7 +18,10 @@ void *kmalloc(size_t size, int flags) { void *p;
- p = memalign(ARCH_DMA_MINALIGN, size);
- if (flags & GFP_DMA)
p = memalign(ARCH_DMA_MINALIGN, size);
- else
if (flags & __GFP_ZERO) memset(p, 0, size);p = malloc(size);