| Viewing file:  mm.h (1.82 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
/** linux/compr_mm.h
 *
 * Memory management for pre-boot and ramdisk uncompressors
 *
 * Authors: Alain Knaff <alain@knaff.lu>
 *
 */
 
 #ifndef DECOMPR_MM_H
 #define DECOMPR_MM_H
 
 #ifdef STATIC
 
 /* Code active when included from pre-boot environment: */
 
 /*
 * Some architectures want to ensure there is no local data in their
 * pre-boot environment, so that data can arbitrarily relocated (via
 * GOT references).  This is achieved by defining STATIC_RW_DATA to
 * be null.
 */
 #ifndef STATIC_RW_DATA
 #define STATIC_RW_DATA static
 #endif
 
 /* A trivial malloc implementation, adapted from
 *  malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994
 */
 STATIC_RW_DATA unsigned long malloc_ptr;
 STATIC_RW_DATA int malloc_count;
 
 static void *malloc(int size)
 {
 void *p;
 
 if (size < 0)
 return NULL;
 if (!malloc_ptr)
 malloc_ptr = free_mem_ptr;
 
 malloc_ptr = (malloc_ptr + 3) & ~3;     /* Align */
 
 p = (void *)malloc_ptr;
 malloc_ptr += size;
 
 if (free_mem_end_ptr && malloc_ptr >= free_mem_end_ptr)
 return NULL;
 
 malloc_count++;
 return p;
 }
 
 static void free(void *where)
 {
 malloc_count--;
 if (!malloc_count)
 malloc_ptr = free_mem_ptr;
 }
 
 #define large_malloc(a) malloc(a)
 #define large_free(a) free(a)
 
 #define INIT
 
 #else /* STATIC */
 
 /* Code active when compiled standalone for use when loading ramdisk: */
 
 #include <linux/kernel.h>
 #include <linux/fs.h>
 #include <linux/string.h>
 #include <linux/slab.h>
 #include <linux/vmalloc.h>
 
 /* Use defines rather than static inline in order to avoid spurious
 * warnings when not needed (indeed large_malloc / large_free are not
 * needed by inflate */
 
 #define malloc(a) kmalloc(a, GFP_KERNEL)
 #define free(a) kfree(a)
 
 #define large_malloc(a) vmalloc(a)
 #define large_free(a) vfree(a)
 
 #define INIT __init
 #define STATIC
 
 #include <linux/init.h>
 
 #endif /* STATIC */
 
 #endif /* DECOMPR_MM_H */
 
 |