linux-old/include/linux/mmzone.h
<<
>>
Prefs
   1#ifndef _LINUX_MMZONE_H
   2#define _LINUX_MMZONE_H
   3
   4#ifdef __KERNEL__
   5#ifndef __ASSEMBLY__
   6
   7#include <linux/config.h>
   8#include <linux/spinlock.h>
   9#include <linux/list.h>
  10
  11/*
  12 * Free memory management - zoned buddy allocator.
  13 */
  14
  15#define MAX_ORDER 10
  16
  17typedef struct free_area_struct {
  18        struct list_head        free_list;
  19        unsigned int            *map;
  20} free_area_t;
  21
  22struct pglist_data;
  23
  24typedef struct zone_struct {
  25        /*
  26         * Commonly accessed fields:
  27         */
  28        spinlock_t              lock;
  29        unsigned long           offset;
  30        unsigned long           free_pages;
  31        unsigned long           inactive_clean_pages;
  32        unsigned long           inactive_dirty_pages;
  33        unsigned long           pages_min, pages_low, pages_high;
  34
  35        /*
  36         * free areas of different sizes
  37         */
  38        struct list_head        inactive_clean_list;
  39        free_area_t             free_area[MAX_ORDER];
  40
  41        /*
  42         * rarely used fields:
  43         */
  44        char                    *name;
  45        unsigned long           size;
  46        /*
  47         * Discontig memory support fields.
  48         */
  49        struct pglist_data      *zone_pgdat;
  50        unsigned long           zone_start_paddr;
  51        unsigned long           zone_start_mapnr;
  52        struct page             *zone_mem_map;
  53} zone_t;
  54
  55#define ZONE_DMA                0
  56#define ZONE_NORMAL             1
  57#define ZONE_HIGHMEM            2
  58#define MAX_NR_ZONES            3
  59
  60/*
  61 * One allocation request operates on a zonelist. A zonelist
  62 * is a list of zones, the first one is the 'goal' of the
  63 * allocation, the other zones are fallback zones, in decreasing
  64 * priority.
  65 *
  66 * Right now a zonelist takes up less than a cacheline. We never
  67 * modify it apart from boot-up, and only a few indices are used,
  68 * so despite the zonelist table being relatively big, the cache
  69 * footprint of this construct is very small.
  70 */
  71typedef struct zonelist_struct {
  72        zone_t * zones [MAX_NR_ZONES+1]; // NULL delimited
  73        int gfp_mask;
  74} zonelist_t;
  75
  76#define NR_GFPINDEX             0x100
  77
  78struct bootmem_data;
  79typedef struct pglist_data {
  80        zone_t node_zones[MAX_NR_ZONES];
  81        zonelist_t node_zonelists[NR_GFPINDEX];
  82        struct page *node_mem_map;
  83        unsigned long *valid_addr_bitmap;
  84        struct bootmem_data *bdata;
  85        unsigned long node_start_paddr;
  86        unsigned long node_start_mapnr;
  87        unsigned long node_size;
  88        int node_id;
  89        struct pglist_data *node_next;
  90} pg_data_t;
  91
  92extern int numnodes;
  93extern pg_data_t *pgdat_list;
  94
  95#define memclass(pgzone, tzone) (((pgzone)->zone_pgdat == (tzone)->zone_pgdat) \
  96                        && (((pgzone) - (pgzone)->zone_pgdat->node_zones) <= \
  97                        ((tzone) - (pgzone)->zone_pgdat->node_zones)))
  98
  99/*
 100 * The following two are not meant for general usage. They are here as
 101 * prototypes for the discontig memory code.
 102 */
 103struct page;
 104extern void show_free_areas_core(pg_data_t *pgdat);
 105extern void free_area_init_core(int nid, pg_data_t *pgdat, struct page **gmap,
 106  unsigned long *zones_size, unsigned long paddr, unsigned long *zholes_size,
 107  struct page *pmap);
 108
 109extern pg_data_t contig_page_data;
 110
 111#ifndef CONFIG_DISCONTIGMEM
 112
 113#define NODE_DATA(nid)          (&contig_page_data)
 114#define NODE_MEM_MAP(nid)       mem_map
 115
 116#else /* !CONFIG_DISCONTIGMEM */
 117
 118#include <asm/mmzone.h>
 119
 120#endif /* !CONFIG_DISCONTIGMEM */
 121
 122#define MAP_ALIGN(x)    ((((x) % sizeof(mem_map_t)) == 0) ? (x) : ((x) + \
 123                sizeof(mem_map_t) - ((x) % sizeof(mem_map_t))))
 124
 125#endif /* !__ASSEMBLY__ */
 126#endif /* __KERNEL__ */
 127#endif /* _LINUX_MMZONE_H */
 128
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.