The nodemasks in these structures may come from a variety of sources, including tasks and cpusets - and should never be modified by any code when being passed around inside another context.
Unified · Split
| @@ -83,7 +83,7 @@ extern bool cpuset_cpus_allowed_fallback(struct task_struct *p); · 82 unmodified lines | ||
| 83 | 83 | extern nodemask_t cpuset_mems_allowed(struct task_struct *p); |
| 84 | 84 | #define cpuset_current_mems_allowed (current->mems_allowed) |
| 85 | 85 | void cpuset_init_current_mems_allowed(void); |
| 86 | −int cpuset_nodemask_valid_mems_allowed(nodemask_t *nodemask); | |
| 86 | +int cpuset_nodemask_valid_mems_allowed(const nodemask_t *nodemask); | |
| 87 | 87 | |
| 88 | 88 | extern bool cpuset_current_node_allowed(int node, gfp_t gfp_mask); |
| 89 | 89 | |
| @@ -224,7 +224,7 @@ static inline nodemask_t cpuset_mems_allowed(struct task_struct *p) · 134 unmodified lines | ||
| 224 | 224 | #define cpuset_current_mems_allowed (node_states[N_MEMORY]) |
| 225 | 225 | static inline void cpuset_init_current_mems_allowed(void) {} |
| 226 | 226 | |
| 227 | −static inline int cpuset_nodemask_valid_mems_allowed(nodemask_t *nodemask) | |
| 227 | +static inline int cpuset_nodemask_valid_mems_allowed(const nodemask_t *nodemask) | |
| 228 | 228 | { |
| 229 | 229 | return 1; |
| 230 | 230 | } |
| @@ -4042,7 +4042,7 @@ extern int __meminit early_pfn_to_nid(unsigned long pfn); · 4041 unmodified lines | ||
| 4042 | 4042 | extern void mem_init(void); |
| 4043 | 4043 | extern void __init mmap_init(void); |
| 4044 | 4044 | |
| 4045 | −extern void __show_mem(unsigned int flags, nodemask_t *nodemask, int max_zone_idx); | |
| 4045 | +extern void __show_mem(unsigned int flags, const nodemask_t *nodemask, int max_zone_idx); | |
| 4046 | 4046 | static inline void show_mem(void) |
| 4047 | 4047 | { |
| 4048 | 4048 | __show_mem(0, NULL, MAX_NR_ZONES - 1); |
| @@ -4052,7 +4052,7 @@ extern void si_meminfo(struct sysinfo * val); · 3 unmodified lines | ||
| 4052 | 4052 | extern void si_meminfo_node(struct sysinfo *val, int nid); |
| 4053 | 4053 | |
| 4054 | 4054 | extern __printf(3, 4) |
| 4055 | −void warn_alloc(gfp_t gfp_mask, nodemask_t *nodemask, const char *fmt, ...); | |
| 4055 | +void warn_alloc(gfp_t gfp_mask, const nodemask_t *nodemask, const char *fmt, ...); | |
| 4056 | 4056 | |
| 4057 | 4057 | extern void setup_per_cpu_pageset(void); |
| 4058 | 4058 | |
| @@ -1815,7 +1815,7 @@ static inline int zonelist_node_idx(const struct zoneref *zoneref) · 1814 unmodified lines | ||
| 1815 | 1815 | |
| 1816 | 1816 | struct zoneref *__next_zones_zonelist(struct zoneref *z, |
| 1817 | 1817 | enum zone_type highest_zoneidx, |
| 1818 | − nodemask_t *nodes); | |
| 1818 | + const nodemask_t *nodes); | |
| 1819 | 1819 | |
| 1820 | 1820 | /** |
| 1821 | 1821 | * next_zones_zonelist - Returns the next zone at or below highest_zoneidx within the allowed nodemask using a cursor within a zonelist as a starting point |
| @@ -1834,7 +1834,7 @@ struct zoneref *__next_zones_zonelist(struct zoneref *z, · 12 unmodified lines | ||
| 1834 | 1834 | */ |
| 1835 | 1835 | static __always_inline struct zoneref *next_zones_zonelist(struct zoneref *z, |
| 1836 | 1836 | enum zone_type highest_zoneidx, |
| 1837 | − nodemask_t *nodes) | |
| 1837 | + const nodemask_t *nodes) | |
| 1838 | 1838 | { |
| 1839 | 1839 | if (likely(!nodes && zonelist_zone_idx(z) <= highest_zoneidx)) |
| 1840 | 1840 | return z; |
| @@ -1860,7 +1860,7 @@ static __always_inline struct zoneref *next_zones_zonelist(struct zoneref *z, · 19 unmodified lines | ||
| 1860 | 1860 | */ |
| 1861 | 1861 | static inline struct zoneref *first_zones_zonelist(struct zonelist *zonelist, |
| 1862 | 1862 | enum zone_type highest_zoneidx, |
| 1863 | − nodemask_t *nodes) | |
| 1863 | + const nodemask_t *nodes) | |
| 1864 | 1864 | { |
| 1865 | 1865 | return next_zones_zonelist(zonelist->_zonerefs, |
| 1866 | 1866 | highest_zoneidx, nodes); |
| @@ -30,7 +30,7 @@ struct oom_control { · 29 unmodified lines | ||
| 30 | 30 | struct zonelist *zonelist; |
| 31 | 31 | |
| 32 | 32 | /* Used to determine mempolicy */ |
| 33 | − nodemask_t *nodemask; | |
| 33 | + const nodemask_t *nodemask; | |
| 34 | 34 | |
| 35 | 35 | /* Memory cgroup in which oom is invoked, or NULL for global oom */ |
| 36 | 36 | struct mem_cgroup *memcg; |
| @@ -345,7 +345,7 @@ extern void swap_setup(void); · 344 unmodified lines | ||
| 345 | 345 | /* linux/mm/vmscan.c */ |
| 346 | 346 | extern unsigned long zone_reclaimable_pages(struct zone *zone); |
| 347 | 347 | extern unsigned long try_to_free_pages(struct zonelist *zonelist, int order, |
| 348 | − gfp_t gfp_mask, nodemask_t *mask); | |
| 348 | + gfp_t gfp_mask, const nodemask_t *mask); | |
| 349 | 349 | unsigned long lruvec_lru_size(struct lruvec *lruvec, enum lru_list lru, int zone_idx); |
| 350 | 350 | |
| 351 | 351 | #define MEMCG_RECLAIM_MAY_SWAP (1 << 1) |
| @@ -4162,7 +4162,7 @@ nodemask_t cpuset_mems_allowed(struct task_struct *tsk) · 4161 unmodified lines | ||
| 4162 | 4162 | * |
| 4163 | 4163 | * Are any of the nodes in the nodemask allowed in current->mems_allowed? |
| 4164 | 4164 | */ |
| 4165 | −int cpuset_nodemask_valid_mems_allowed(nodemask_t *nodemask) | |
| 4165 | +int cpuset_nodemask_valid_mems_allowed(const nodemask_t *nodemask) | |
| 4166 | 4166 | { |
| 4167 | 4167 | return nodes_intersects(*nodemask, current->mems_allowed); |
| 4168 | 4168 | } |
| @@ -675,7 +675,7 @@ void page_alloc_sysctl_init(void); · 674 unmodified lines | ||
| 675 | 675 | */ |
| 676 | 676 | struct alloc_context { |
| 677 | 677 | struct zonelist *zonelist; |
| 678 | − nodemask_t *nodemask; | |
| 678 | + const nodemask_t *nodemask; | |
| 679 | 679 | struct zoneref *preferred_zoneref; |
| 680 | 680 | int migratetype; |
| 681 | 681 | |
| @@ -43,7 +43,8 @@ struct zone *next_zone(struct zone *zone) · 42 unmodified lines | ||
| 43 | 43 | return zone; |
| 44 | 44 | } |
| 45 | 45 | |
| 46 | −static inline int zref_in_nodemask(struct zoneref *zref, nodemask_t *nodes) | |
| 46 | +static inline int zref_in_nodemask(struct zoneref *zref, | |
| 47 | + const nodemask_t *nodes) | |
| 47 | 48 | { |
| 48 | 49 | #ifdef CONFIG_NUMA |
| 49 | 50 | return node_isset(zonelist_node_idx(zref), *nodes); |
| @@ -55,7 +56,7 @@ static inline int zref_in_nodemask(struct zoneref *zref, nodemask_t *nodes) · 5 unmodified lines | ||
| 55 | 56 | /* Returns the next zone at or below highest_zoneidx in a zonelist */ |
| 56 | 57 | struct zoneref *__next_zones_zonelist(struct zoneref *z, |
| 57 | 58 | enum zone_type highest_zoneidx, |
| 58 | − nodemask_t *nodes) | |
| 59 | + const nodemask_t *nodes) | |
| 59 | 60 | { |
| 60 | 61 | /* |
| 61 | 62 | * Find the next suitable zone to use for the allocation. |
| @@ -3978,7 +3978,7 @@ try_this_zone: · 3977 unmodified lines | ||
| 3978 | 3978 | return NULL; |
| 3979 | 3979 | } |
| 3980 | 3980 | |
| 3981 | −static void warn_alloc_show_mem(gfp_t gfp_mask, nodemask_t *nodemask) | |
| 3981 | +static void warn_alloc_show_mem(gfp_t gfp_mask, const nodemask_t *nodemask) | |
| 3982 | 3982 | { |
| 3983 | 3983 | unsigned int filter = SHOW_MEM_FILTER_NODES; |
| 3984 | 3984 | |
| @@ -3998,7 +3998,7 @@ static void warn_alloc_show_mem(gfp_t gfp_mask, nodemask_t *nodemask) · 13 unmodified lines | ||
| 3998 | 3998 | mem_cgroup_show_protected_memory(NULL); |
| 3999 | 3999 | } |
| 4000 | 4000 | |
| 4001 | −void warn_alloc(gfp_t gfp_mask, nodemask_t *nodemask, const char *fmt, ...) | |
| 4001 | +void warn_alloc(gfp_t gfp_mask, const nodemask_t *nodemask, const char *fmt, ...) | |
| 4002 | 4002 | { |
| 4003 | 4003 | struct va_format vaf; |
| 4004 | 4004 | va_list args; |
| @@ -4680,7 +4680,7 @@ check_retry_cpuset(int cpuset_mems_cookie, struct alloc_context *ac) · 675 unmodified lines | ||
| 4680 | 4680 | return false; |
| 4681 | 4681 | } |
| 4682 | 4682 | |
| 4683 | −static void check_alloc_stall_warn(gfp_t gfp_mask, nodemask_t *nodemask, | |
| 4683 | +static void check_alloc_stall_warn(gfp_t gfp_mask, const nodemask_t *nodemask, | |
| 4684 | 4684 | unsigned int order, unsigned long alloc_start_time) |
| 4685 | 4685 | { |
| 4686 | 4686 | static DEFINE_SPINLOCK(alloc_stall_lock); |
| @@ -116,7 +116,8 @@ void si_meminfo_node(struct sysinfo *val, int nid) · 115 unmodified lines | ||
| 116 | 116 | * Determine whether the node should be displayed or not, depending on whether |
| 117 | 117 | * SHOW_MEM_FILTER_NODES was passed to show_free_areas(). |
| 118 | 118 | */ |
| 119 | −static bool show_mem_node_skip(unsigned int flags, int nid, nodemask_t *nodemask) | |
| 119 | +static bool show_mem_node_skip(unsigned int flags, int nid, | |
| 120 | + const nodemask_t *nodemask) | |
| 120 | 121 | { |
| 121 | 122 | if (!(flags & SHOW_MEM_FILTER_NODES)) |
| 122 | 123 | return false; |
| @@ -177,7 +178,8 @@ static bool node_has_managed_zones(pg_data_t *pgdat, int max_zone_idx) · 54 unmodified lines | ||
| 177 | 178 | * SHOW_MEM_FILTER_NODES: suppress nodes that are not allowed by current's |
| 178 | 179 | * cpuset. |
| 179 | 180 | */ |
| 180 | −static void show_free_areas(unsigned int filter, nodemask_t *nodemask, int max_zone_idx) | |
| 181 | +static void show_free_areas(unsigned int filter, const nodemask_t *nodemask, | |
| 182 | + int max_zone_idx) | |
| 181 | 183 | { |
| 182 | 184 | unsigned long free_pcp = 0; |
| 183 | 185 | int cpu, nid; |
| @@ -402,7 +404,8 @@ static void show_free_areas(unsigned int filter, nodemask_t *nodemask, int max_z · 218 unmodified lines | ||
| 402 | 404 | show_swap_cache_info(); |
| 403 | 405 | } |
| 404 | 406 | |
| 405 | −void __show_mem(unsigned int filter, nodemask_t *nodemask, int max_zone_idx) | |
| 407 | +void __show_mem(unsigned int filter, const nodemask_t *nodemask, | |
| 408 | + int max_zone_idx) | |
| 406 | 409 | { |
| 407 | 410 | unsigned long total = 0, reserved = 0, highmem = 0; |
| 408 | 411 | struct zone *zone; |
| @@ -79,7 +79,7 @@ struct scan_control { · 78 unmodified lines | ||
| 79 | 79 | * Nodemask of nodes allowed by the caller. If NULL, all nodes |
| 80 | 80 | * are scanned. |
| 81 | 81 | */ |
| 82 | − nodemask_t *nodemask; | |
| 82 | + const nodemask_t *nodemask; | |
| 83 | 83 | |
| 84 | 84 | /* |
| 85 | 85 | * The memory cgroup that hit its limit and as a result is the |
| @@ -6591,7 +6591,7 @@ static bool allow_direct_reclaim(pg_data_t *pgdat) · 6505 unmodified lines | ||
| 6591 | 6591 | * happens, the page allocator should not consider triggering the OOM killer. |
| 6592 | 6592 | */ |
| 6593 | 6593 | static bool throttle_direct_reclaim(gfp_t gfp_mask, struct zonelist *zonelist, |
| 6594 | − nodemask_t *nodemask) | |
| 6594 | + const nodemask_t *nodemask) | |
| 6595 | 6595 | { |
| 6596 | 6596 | struct zoneref *z; |
| 6597 | 6597 | struct zone *zone; |
| @@ -6671,7 +6671,7 @@ out: · 73 unmodified lines | ||
| 6671 | 6671 | } |
| 6672 | 6672 | |
| 6673 | 6673 | unsigned long try_to_free_pages(struct zonelist *zonelist, int order, |
| 6674 | − gfp_t gfp_mask, nodemask_t *nodemask) | |
| 6674 | + gfp_t gfp_mask, const nodemask_t *nodemask) | |
| 6675 | 6675 | { |
| 6676 | 6676 | unsigned long nr_reclaimed; |
| 6677 | 6677 | struct scan_control sc = { |