linux_compat.c 1.1 KB

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