#include <linux/kernel.h>
#include <linux/mmzone.h>
#include <linux/quicklist.h>
DEFINE_PER_CPU(struct quicklist [CONFIG_NR_QUICK], quicklist);
#define FRACTION_OF_NODE_MEM 16
static unsigned long max_pages(unsigned long min_pages)
unsigned long node_free_pages, max;
int node = numa_node_id();
struct zone *zones = NODE_DATA(node)->node_zones;
zone_page_state(&zones[ZONE_DMA], NR_FREE_PAGES) +
zone_page_state(&zones[ZONE_DMA32], NR_FREE_PAGES) +
zone_page_state(&zones[ZONE_NORMAL], NR_FREE_PAGES);
max = node_free_pages / FRACTION_OF_NODE_MEM;
num_cpus_on_node = cpumask_weight(cpumask_of_node(node));
return max(max, min_pages);
static long min_pages_to_free(struct quicklist *q,
unsigned long min_pages, long max_free)
pages_to_free = q->nr_pages - max_pages(min_pages);
return min(pages_to_free, max_free);