aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/mempolicy.h19
-rw-r--r--include/linux/shmem_fs.h2
-rw-r--r--mm/mempolicy.c29
-rw-r--r--mm/shmem.c9
4 files changed, 33 insertions, 26 deletions
diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h
index b8b3da7a3315..389a06e8ee21 100644
--- a/include/linux/mempolicy.h
+++ b/include/linux/mempolicy.h
@@ -9,12 +9,13 @@
9 */ 9 */
10 10
11/* Policies */ 11/* Policies */
12#define MPOL_DEFAULT 0 12enum {
13#define MPOL_PREFERRED 1 13 MPOL_DEFAULT,
14#define MPOL_BIND 2 14 MPOL_PREFERRED,
15#define MPOL_INTERLEAVE 3 15 MPOL_BIND,
16 16 MPOL_INTERLEAVE,
17#define MPOL_MAX MPOL_INTERLEAVE 17 MPOL_MAX, /* always last member of enum */
18};
18 19
19/* Flags for get_mem_policy */ 20/* Flags for get_mem_policy */
20#define MPOL_F_NODE (1<<0) /* return next IL mode instead of node mask */ 21#define MPOL_F_NODE (1<<0) /* return next IL mode instead of node mask */
@@ -64,7 +65,7 @@ struct mm_struct;
64 */ 65 */
65struct mempolicy { 66struct mempolicy {
66 atomic_t refcnt; 67 atomic_t refcnt;
67 short policy; /* See MPOL_* above */ 68 unsigned short policy; /* See MPOL_* above */
68 union { 69 union {
69 short preferred_node; /* preferred */ 70 short preferred_node; /* preferred */
70 nodemask_t nodes; /* interleave/bind */ 71 nodemask_t nodes; /* interleave/bind */
@@ -134,7 +135,7 @@ struct shared_policy {
134 spinlock_t lock; 135 spinlock_t lock;
135}; 136};
136 137
137void mpol_shared_policy_init(struct shared_policy *info, int policy, 138void mpol_shared_policy_init(struct shared_policy *info, unsigned short policy,
138 nodemask_t *nodes); 139 nodemask_t *nodes);
139int mpol_set_shared_policy(struct shared_policy *info, 140int mpol_set_shared_policy(struct shared_policy *info,
140 struct vm_area_struct *vma, 141 struct vm_area_struct *vma,
@@ -202,7 +203,7 @@ static inline int mpol_set_shared_policy(struct shared_policy *info,
202} 203}
203 204
204static inline void mpol_shared_policy_init(struct shared_policy *info, 205static inline void mpol_shared_policy_init(struct shared_policy *info,
205 int policy, nodemask_t *nodes) 206 unsigned short policy, nodemask_t *nodes)
206{ 207{
207} 208}
208 209
diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h
index 8d5fb36ea047..639a4070708e 100644
--- a/include/linux/shmem_fs.h
+++ b/include/linux/shmem_fs.h
@@ -34,7 +34,7 @@ struct shmem_sb_info {
34 uid_t uid; /* Mount uid for root directory */ 34 uid_t uid; /* Mount uid for root directory */
35 gid_t gid; /* Mount gid for root directory */ 35 gid_t gid; /* Mount gid for root directory */
36 mode_t mode; /* Mount mode for root directory */ 36 mode_t mode; /* Mount mode for root directory */
37 int policy; /* Default NUMA memory alloc policy */ 37 unsigned short policy; /* Default NUMA memory alloc policy */
38 nodemask_t policy_nodes; /* nodemask for preferred and bind */ 38 nodemask_t policy_nodes; /* nodemask for preferred and bind */
39}; 39};
40 40
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index acb5ee3587c3..1311dc4a3888 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -114,7 +114,7 @@ static void mpol_rebind_policy(struct mempolicy *pol,
114 const nodemask_t *newmask); 114 const nodemask_t *newmask);
115 115
116/* Do sanity checking on a policy */ 116/* Do sanity checking on a policy */
117static int mpol_check_policy(int mode, nodemask_t *nodes) 117static int mpol_check_policy(unsigned short mode, nodemask_t *nodes)
118{ 118{
119 int was_empty, is_empty; 119 int was_empty, is_empty;
120 120
@@ -159,6 +159,8 @@ static int mpol_check_policy(int mode, nodemask_t *nodes)
159 if (!was_empty && is_empty) 159 if (!was_empty && is_empty)
160 return -EINVAL; 160 return -EINVAL;
161 break; 161 break;
162 default:
163 BUG();
162 } 164 }
163 return 0; 165 return 0;
164} 166}
@@ -185,7 +187,7 @@ static int is_valid_nodemask(nodemask_t *nodemask)
185} 187}
186 188
187/* Create a new policy */ 189/* Create a new policy */
188static struct mempolicy *mpol_new(int mode, nodemask_t *nodes) 190static struct mempolicy *mpol_new(unsigned short mode, nodemask_t *nodes)
189{ 191{
190 struct mempolicy *policy; 192 struct mempolicy *policy;
191 193
@@ -218,6 +220,8 @@ static struct mempolicy *mpol_new(int mode, nodemask_t *nodes)
218 } 220 }
219 policy->v.nodes = *nodes; 221 policy->v.nodes = *nodes;
220 break; 222 break;
223 default:
224 BUG();
221 } 225 }
222 policy->policy = mode; 226 policy->policy = mode;
223 policy->cpuset_mems_allowed = cpuset_mems_allowed(current); 227 policy->cpuset_mems_allowed = cpuset_mems_allowed(current);
@@ -462,7 +466,7 @@ static void mpol_set_task_struct_flag(void)
462} 466}
463 467
464/* Set the process memory policy */ 468/* Set the process memory policy */
465static long do_set_mempolicy(int mode, nodemask_t *nodes) 469static long do_set_mempolicy(unsigned short mode, nodemask_t *nodes)
466{ 470{
467 struct mempolicy *new; 471 struct mempolicy *new;
468 472
@@ -759,7 +763,7 @@ static struct page *new_vma_page(struct page *page, unsigned long private, int *
759#endif 763#endif
760 764
761static long do_mbind(unsigned long start, unsigned long len, 765static long do_mbind(unsigned long start, unsigned long len,
762 unsigned long mode, nodemask_t *nmask, 766 unsigned short mode, nodemask_t *nmask,
763 unsigned long flags) 767 unsigned long flags)
764{ 768{
765 struct vm_area_struct *vma; 769 struct vm_area_struct *vma;
@@ -769,9 +773,8 @@ static long do_mbind(unsigned long start, unsigned long len,
769 int err; 773 int err;
770 LIST_HEAD(pagelist); 774 LIST_HEAD(pagelist);
771 775
772 if ((flags & ~(unsigned long)(MPOL_MF_STRICT | 776 if (flags & ~(unsigned long)(MPOL_MF_STRICT |
773 MPOL_MF_MOVE | MPOL_MF_MOVE_ALL)) 777 MPOL_MF_MOVE | MPOL_MF_MOVE_ALL))
774 || mode > MPOL_MAX)
775 return -EINVAL; 778 return -EINVAL;
776 if ((flags & MPOL_MF_MOVE_ALL) && !capable(CAP_SYS_NICE)) 779 if ((flags & MPOL_MF_MOVE_ALL) && !capable(CAP_SYS_NICE))
777 return -EPERM; 780 return -EPERM;
@@ -804,7 +807,7 @@ static long do_mbind(unsigned long start, unsigned long len,
804 if (!new) 807 if (!new)
805 flags |= MPOL_MF_DISCONTIG_OK; 808 flags |= MPOL_MF_DISCONTIG_OK;
806 809
807 pr_debug("mbind %lx-%lx mode:%ld nodes:%lx\n",start,start+len, 810 pr_debug("mbind %lx-%lx mode:%d nodes:%lx\n", start, start + len,
808 mode, nmask ? nodes_addr(*nmask)[0] : -1); 811 mode, nmask ? nodes_addr(*nmask)[0] : -1);
809 812
810 down_write(&mm->mmap_sem); 813 down_write(&mm->mmap_sem);
@@ -905,6 +908,8 @@ asmlinkage long sys_mbind(unsigned long start, unsigned long len,
905 nodemask_t nodes; 908 nodemask_t nodes;
906 int err; 909 int err;
907 910
911 if (mode >= MPOL_MAX)
912 return -EINVAL;
908 err = get_nodes(&nodes, nmask, maxnode); 913 err = get_nodes(&nodes, nmask, maxnode);
909 if (err) 914 if (err)
910 return err; 915 return err;
@@ -918,7 +923,7 @@ asmlinkage long sys_set_mempolicy(int mode, unsigned long __user *nmask,
918 int err; 923 int err;
919 nodemask_t nodes; 924 nodemask_t nodes;
920 925
921 if (mode < 0 || mode > MPOL_MAX) 926 if (mode < 0 || mode >= MPOL_MAX)
922 return -EINVAL; 927 return -EINVAL;
923 err = get_nodes(&nodes, nmask, maxnode); 928 err = get_nodes(&nodes, nmask, maxnode);
924 if (err) 929 if (err)
@@ -1201,7 +1206,7 @@ static unsigned interleave_nodes(struct mempolicy *policy)
1201 */ 1206 */
1202unsigned slab_node(struct mempolicy *policy) 1207unsigned slab_node(struct mempolicy *policy)
1203{ 1208{
1204 int pol = policy ? policy->policy : MPOL_DEFAULT; 1209 unsigned short pol = policy ? policy->policy : MPOL_DEFAULT;
1205 1210
1206 switch (pol) { 1211 switch (pol) {
1207 case MPOL_INTERLEAVE: 1212 case MPOL_INTERLEAVE:
@@ -1635,7 +1640,7 @@ restart:
1635 return 0; 1640 return 0;
1636} 1641}
1637 1642
1638void mpol_shared_policy_init(struct shared_policy *info, int policy, 1643void mpol_shared_policy_init(struct shared_policy *info, unsigned short policy,
1639 nodemask_t *policy_nodes) 1644 nodemask_t *policy_nodes)
1640{ 1645{
1641 info->root = RB_ROOT; 1646 info->root = RB_ROOT;
@@ -1830,7 +1835,7 @@ static inline int mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol)
1830 char *p = buffer; 1835 char *p = buffer;
1831 int l; 1836 int l;
1832 nodemask_t nodes; 1837 nodemask_t nodes;
1833 int mode = pol ? pol->policy : MPOL_DEFAULT; 1838 unsigned short mode = pol ? pol->policy : MPOL_DEFAULT;
1834 1839
1835 switch (mode) { 1840 switch (mode) {
1836 case MPOL_DEFAULT: 1841 case MPOL_DEFAULT:
diff --git a/mm/shmem.c b/mm/shmem.c
index f514dd392cd9..d8ef7ba831a5 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -1079,7 +1079,8 @@ redirty:
1079 1079
1080#ifdef CONFIG_NUMA 1080#ifdef CONFIG_NUMA
1081#ifdef CONFIG_TMPFS 1081#ifdef CONFIG_TMPFS
1082static int shmem_parse_mpol(char *value, int *policy, nodemask_t *policy_nodes) 1082static int shmem_parse_mpol(char *value, unsigned short *policy,
1083 nodemask_t *policy_nodes)
1083{ 1084{
1084 char *nodelist = strchr(value, ':'); 1085 char *nodelist = strchr(value, ':');
1085 int err = 1; 1086 int err = 1;
@@ -1128,7 +1129,7 @@ out:
1128 return err; 1129 return err;
1129} 1130}
1130 1131
1131static void shmem_show_mpol(struct seq_file *seq, int policy, 1132static void shmem_show_mpol(struct seq_file *seq, unsigned short policy,
1132 const nodemask_t policy_nodes) 1133 const nodemask_t policy_nodes)
1133{ 1134{
1134 char *policy_string; 1135 char *policy_string;
@@ -1197,13 +1198,13 @@ static struct page *shmem_alloc_page(gfp_t gfp,
1197} 1198}
1198#else /* !CONFIG_NUMA */ 1199#else /* !CONFIG_NUMA */
1199#ifdef CONFIG_TMPFS 1200#ifdef CONFIG_TMPFS
1200static inline int shmem_parse_mpol(char *value, int *policy, 1201static inline int shmem_parse_mpol(char *value, unsigned short *policy,
1201 nodemask_t *policy_nodes) 1202 nodemask_t *policy_nodes)
1202{ 1203{
1203 return 1; 1204 return 1;
1204} 1205}
1205 1206
1206static inline void shmem_show_mpol(struct seq_file *seq, int policy, 1207static inline void shmem_show_mpol(struct seq_file *seq, unsigned short policy,
1207 const nodemask_t policy_nodes) 1208 const nodemask_t policy_nodes)
1208{ 1209{
1209} 1210}