diff options
Diffstat (limited to 'mm/mempolicy.c')
-rw-r--r-- | mm/mempolicy.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/mm/mempolicy.c b/mm/mempolicy.c index b62cab575a84..3171f884d245 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c | |||
@@ -1359,6 +1359,30 @@ restart: | |||
1359 | return 0; | 1359 | return 0; |
1360 | } | 1360 | } |
1361 | 1361 | ||
1362 | void mpol_shared_policy_init(struct shared_policy *info, int policy, | ||
1363 | nodemask_t *policy_nodes) | ||
1364 | { | ||
1365 | info->root = RB_ROOT; | ||
1366 | spin_lock_init(&info->lock); | ||
1367 | |||
1368 | if (policy != MPOL_DEFAULT) { | ||
1369 | struct mempolicy *newpol; | ||
1370 | |||
1371 | /* Falls back to MPOL_DEFAULT on any error */ | ||
1372 | newpol = mpol_new(policy, policy_nodes); | ||
1373 | if (!IS_ERR(newpol)) { | ||
1374 | /* Create pseudo-vma that contains just the policy */ | ||
1375 | struct vm_area_struct pvma; | ||
1376 | |||
1377 | memset(&pvma, 0, sizeof(struct vm_area_struct)); | ||
1378 | /* Policy covers entire file */ | ||
1379 | pvma.vm_end = TASK_SIZE; | ||
1380 | mpol_set_shared_policy(info, &pvma, newpol); | ||
1381 | mpol_free(newpol); | ||
1382 | } | ||
1383 | } | ||
1384 | } | ||
1385 | |||
1362 | int mpol_set_shared_policy(struct shared_policy *info, | 1386 | int mpol_set_shared_policy(struct shared_policy *info, |
1363 | struct vm_area_struct *vma, struct mempolicy *npol) | 1387 | struct vm_area_struct *vma, struct mempolicy *npol) |
1364 | { | 1388 | { |