diff --git a/repos/dde_linux/src/include/lx_emul/alloc.h b/repos/dde_linux/src/include/lx_emul/alloc.h index 60bfa59a3e..5ab27da3cf 100644 --- a/repos/dde_linux/src/include/lx_emul/alloc.h +++ b/repos/dde_linux/src/include/lx_emul/alloc.h @@ -18,8 +18,6 @@ extern "C" { #endif -void * lx_emul_mem_alloc(unsigned long size); -void * lx_emul_mem_alloc_uncached(unsigned long size); void * lx_emul_mem_alloc_aligned(unsigned long size, unsigned long align); void * lx_emul_mem_alloc_aligned_uncached(unsigned long size, unsigned long align); unsigned long lx_emul_mem_dma_addr(void * addr); diff --git a/repos/dde_linux/src/lib/lx_emul/alloc.cc b/repos/dde_linux/src/lib/lx_emul/alloc.cc index fa46c24137..2ef487bcad 100644 --- a/repos/dde_linux/src/lib/lx_emul/alloc.cc +++ b/repos/dde_linux/src/lib/lx_emul/alloc.cc @@ -25,28 +25,9 @@ extern "C" void * lx_emul_mem_alloc_aligned(unsigned long size, unsigned long al }; -extern "C" void * lx_emul_mem_alloc(unsigned long size) -{ - /* always align memory objects to 32 bytes, like malloc, heap etc. */ - void * const ptr = Lx_kit::env().memory.alloc(size, 32); - lx_emul_forget_pages(ptr, size); - return ptr; -}; - - -extern "C" void * lx_emul_mem_alloc_uncached(unsigned long size) -{ - /* always align memory objects to 32 bytes, like malloc, heap etc. */ - void * const ptr = Lx_kit::env().uncached_memory.alloc(size, 32); - lx_emul_forget_pages(ptr, size); - return ptr; -}; - - extern "C" void * lx_emul_mem_alloc_aligned_uncached(unsigned long size, unsigned long align) { - /* always align memory objects to 32 bytes, like malloc, heap etc. */ void * const ptr = Lx_kit::env().uncached_memory.alloc(size, align); lx_emul_forget_pages(ptr, size); return ptr; diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/mm/memblock.c b/repos/dde_linux/src/lib/lx_emul/shadow/mm/memblock.c index 95337d3e15..a4e4ecf182 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/mm/memblock.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/mm/memblock.c @@ -11,6 +11,7 @@ * version 2. */ +#include #include #include @@ -20,5 +21,6 @@ void * __init memblock_alloc_try_nid(phys_addr_t size, phys_addr_t max_addr, int nid) { + align = max(align, (phys_addr_t)KMALLOC_MIN_SIZE); return lx_emul_mem_alloc_aligned(size, align); } diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/mm/percpu.c b/repos/dde_linux/src/lib/lx_emul/shadow/mm/percpu.c index 406f629675..0399fdc7f8 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/mm/percpu.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/mm/percpu.c @@ -12,10 +12,12 @@ */ #include +#include #include void __percpu * __alloc_percpu(size_t size, size_t align) { + align = max(align, (size_t)KMALLOC_MIN_SIZE); return lx_emul_mem_alloc_aligned(size, align); } diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/mm/slab_common.c b/repos/dde_linux/src/lib/lx_emul/shadow/mm/slab_common.c index 722ccd90a5..0054b70677 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/mm/slab_common.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/mm/slab_common.c @@ -32,7 +32,7 @@ void * krealloc(const void * p,size_t new_size,gfp_t flags) void *ret; if (new_size <= old_size) - return p; + return (void*) p; ret = kmalloc(new_size, flags); memcpy(ret, p, old_size); diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/mm/slub.c b/repos/dde_linux/src/lib/lx_emul/shadow/mm/slub.c index 422efce51b..acc54da72e 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/mm/slub.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/mm/slub.c @@ -40,7 +40,7 @@ void * __kmalloc(size_t size, gfp_t flags) if (flags & GFP_DMA) lx_emul_trace_and_stop(__func__); - return lx_emul_mem_alloc(size); + return lx_emul_mem_alloc_aligned(size, ARCH_KMALLOC_MINALIGN); } @@ -106,9 +106,13 @@ void __init kmem_cache_init(void) void * kmem_cache_alloc(struct kmem_cache * s, gfp_t flags) { + unsigned long align; + if (!s) lx_emul_trace_and_stop(__func__); - return lx_emul_mem_alloc_aligned(s->size, s->align ? s->align : 32); + + align = max(s->align, (unsigned int)ARCH_KMALLOC_MINALIGN); + return lx_emul_mem_alloc_aligned(s->size, align); }