at v4.0-rc2 3.4 kB view raw
1#ifndef _LINUX_COMPACTION_H 2#define _LINUX_COMPACTION_H 3 4/* Return values for compact_zone() and try_to_compact_pages() */ 5/* compaction didn't start as it was deferred due to past failures */ 6#define COMPACT_DEFERRED 0 7/* compaction didn't start as it was not possible or direct reclaim was more suitable */ 8#define COMPACT_SKIPPED 1 9/* compaction should continue to another pageblock */ 10#define COMPACT_CONTINUE 2 11/* direct compaction partially compacted a zone and there are suitable pages */ 12#define COMPACT_PARTIAL 3 13/* The full zone was compacted */ 14#define COMPACT_COMPLETE 4 15/* For more detailed tracepoint output */ 16#define COMPACT_NO_SUITABLE_PAGE 5 17#define COMPACT_NOT_SUITABLE_ZONE 6 18/* When adding new state, please change compaction_status_string, too */ 19 20/* Used to signal whether compaction detected need_sched() or lock contention */ 21/* No contention detected */ 22#define COMPACT_CONTENDED_NONE 0 23/* Either need_sched() was true or fatal signal pending */ 24#define COMPACT_CONTENDED_SCHED 1 25/* Zone lock or lru_lock was contended in async compaction */ 26#define COMPACT_CONTENDED_LOCK 2 27 28struct alloc_context; /* in mm/internal.h */ 29 30#ifdef CONFIG_COMPACTION 31extern int sysctl_compact_memory; 32extern int sysctl_compaction_handler(struct ctl_table *table, int write, 33 void __user *buffer, size_t *length, loff_t *ppos); 34extern int sysctl_extfrag_threshold; 35extern int sysctl_extfrag_handler(struct ctl_table *table, int write, 36 void __user *buffer, size_t *length, loff_t *ppos); 37 38extern int fragmentation_index(struct zone *zone, unsigned int order); 39extern unsigned long try_to_compact_pages(gfp_t gfp_mask, unsigned int order, 40 int alloc_flags, const struct alloc_context *ac, 41 enum migrate_mode mode, int *contended); 42extern void compact_pgdat(pg_data_t *pgdat, int order); 43extern void reset_isolation_suitable(pg_data_t *pgdat); 44extern unsigned long compaction_suitable(struct zone *zone, int order, 45 int alloc_flags, int classzone_idx); 46 47extern void defer_compaction(struct zone *zone, int order); 48extern bool compaction_deferred(struct zone *zone, int order); 49extern void compaction_defer_reset(struct zone *zone, int order, 50 bool alloc_success); 51extern bool compaction_restarting(struct zone *zone, int order); 52 53#else 54static inline unsigned long try_to_compact_pages(gfp_t gfp_mask, 55 unsigned int order, int alloc_flags, 56 const struct alloc_context *ac, 57 enum migrate_mode mode, int *contended) 58{ 59 return COMPACT_CONTINUE; 60} 61 62static inline void compact_pgdat(pg_data_t *pgdat, int order) 63{ 64} 65 66static inline void reset_isolation_suitable(pg_data_t *pgdat) 67{ 68} 69 70static inline unsigned long compaction_suitable(struct zone *zone, int order, 71 int alloc_flags, int classzone_idx) 72{ 73 return COMPACT_SKIPPED; 74} 75 76static inline void defer_compaction(struct zone *zone, int order) 77{ 78} 79 80static inline bool compaction_deferred(struct zone *zone, int order) 81{ 82 return true; 83} 84 85#endif /* CONFIG_COMPACTION */ 86 87#if defined(CONFIG_COMPACTION) && defined(CONFIG_SYSFS) && defined(CONFIG_NUMA) 88extern int compaction_register_node(struct node *node); 89extern void compaction_unregister_node(struct node *node); 90 91#else 92 93static inline int compaction_register_node(struct node *node) 94{ 95 return 0; 96} 97 98static inline void compaction_unregister_node(struct node *node) 99{ 100} 101#endif /* CONFIG_COMPACTION && CONFIG_SYSFS && CONFIG_NUMA */ 102 103#endif /* _LINUX_COMPACTION_H */