1 2#include <malloc.h> 3#include <memalign.h> 4#include <asm/cache.h> 5#include <linux/compat.h> 6 7struct p_current cur = { 8 .pid = 1, 9}; 10__maybe_unused struct p_current *current = &cur; 11 12unsigned long copy_from_user(void *dest, const void *src, 13 unsigned long count) 14{ 15 memcpy((void *)dest, (void *)src, count); 16 return 0; 17} 18 19void *kmalloc(size_t size, int flags) 20{ 21 void *p; 22 23 p = malloc_cache_aligned(size); 24 if (p && flags & __GFP_ZERO) 25 memset(p, 0, size); 26 27 return p; 28} 29 30struct kmem_cache *get_mem(int element_sz) 31{ 32 struct kmem_cache *ret; 33 34 ret = memalign(ARCH_DMA_MINALIGN, sizeof(struct kmem_cache)); 35 ret->sz = element_sz; 36 37 return ret; 38} 39 40void *kmem_cache_alloc(struct kmem_cache *obj, int flag) 41{ 42 return malloc_cache_aligned(obj->sz); 43} 44 45/** 46 * kmemdup - duplicate region of memory 47 * 48 * @src: memory region to duplicate 49 * @len: memory region length 50 * @gfp: GFP mask to use 51 * 52 * Return: newly allocated copy of @src or %NULL in case of error 53 */ 54void *kmemdup(const void *src, size_t len, gfp_t gfp) 55{ 56 void *p; 57 58 p = kmalloc(len, gfp); 59 if (p) 60 memcpy(p, src, len); 61 return p; 62} 63