kmem.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #include <glue/gnulinux.h>
  2. #include <linux/printk.h>
  3. #include <linux/slab.h>
  4. #include <mach/machine/vm_types.h>
  5. void gnu_kmem_cache_init(struct gnu_kmem_cache *cache, const char *name,
  6. size_t obj_size, size_t align,
  7. gnu_kmem_cache_ctor_t ctor, int flags)
  8. {
  9. printk(KERN_CRIT "zone allocator name: %s size: %i\n",name,obj_size);
  10. cache->zone = kmem_cache_create (name, obj_size, 0 /* align */, SLAB_HWCACHE_ALIGN /* flags */, NULL /* ctor */);
  11. cache->size = obj_size;
  12. }
  13. /*
  14. * Allocate an object from a cache.
  15. */
  16. vm_offset_t gnu_kmem_cache_alloc(struct gnu_kmem_cache *cache)
  17. {
  18. void* mem = kmem_cache_alloc ((struct kmem_cache *) cache->zone, GFP_KERNEL);
  19. memset(mem,0,cache->size);
  20. return (vm_offset_t) mem;
  21. }
  22. /*
  23. * Release an object to its cache.
  24. */
  25. void gnu_kmem_cache_free(struct gnu_kmem_cache *cache, vm_offset_t obj)
  26. {
  27. kmem_cache_free ((struct kmem_cache *) cache->zone, obj);
  28. }
  29. vm_offset_t kalloc (vm_size_t size)
  30. {
  31. printk(KERN_CRIT "kalloc size: %i\n",size);
  32. return (vm_offset_t) kmalloc(size, GFP_KERNEL);
  33. }
  34. extern void linux_kfree(vm_offset_t table)
  35. {
  36. kfree(table);
  37. }