Skip to content

Commit 74d2c3a

Browse files
oleg-nesterovtorvalds
authored andcommitted
mempolicy: introduce __get_vma_policy(), export get_task_policy()
Extract the code which looks for vma's policy from get_vma_policy() into the new helper, __get_vma_policy(). Export get_task_policy(). Signed-off-by: Oleg Nesterov <[email protected]> Cc: KAMEZAWA Hiroyuki <[email protected]> Cc: David Rientjes <[email protected]> Cc: KOSAKI Motohiro <[email protected]> Cc: Alexander Viro <[email protected]> Cc: Cyrill Gorcunov <[email protected]> Cc: "Eric W. Biederman" <[email protected]> Cc: "Kirill A. Shutemov" <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Hugh Dickins <[email protected]> Cc: Andi Kleen <[email protected]> Cc: Naoya Horiguchi <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 6b6482b commit 74d2c3a

File tree

2 files changed

+29
-18
lines changed

2 files changed

+29
-18
lines changed

include/linux/mempolicy.h

+3
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,9 @@ void mpol_free_shared_policy(struct shared_policy *p);
134134
struct mempolicy *mpol_shared_policy_lookup(struct shared_policy *sp,
135135
unsigned long idx);
136136

137+
struct mempolicy *get_task_policy(struct task_struct *p);
138+
struct mempolicy *__get_vma_policy(struct vm_area_struct *vma,
139+
unsigned long addr);
137140
struct mempolicy *get_vma_policy(struct task_struct *tsk,
138141
struct vm_area_struct *vma, unsigned long addr);
139142
bool vma_policy_mof(struct vm_area_struct *vma);

mm/mempolicy.c

+26-18
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ static struct mempolicy default_policy = {
123123

124124
static struct mempolicy preferred_node_policy[MAX_NUMNODES];
125125

126-
static struct mempolicy *get_task_policy(struct task_struct *p)
126+
struct mempolicy *get_task_policy(struct task_struct *p)
127127
{
128128
struct mempolicy *pol = p->mempolicy;
129129
int node;
@@ -1603,23 +1603,8 @@ COMPAT_SYSCALL_DEFINE6(mbind, compat_ulong_t, start, compat_ulong_t, len,
16031603

16041604
#endif
16051605

1606-
/*
1607-
* get_vma_policy(@task, @vma, @addr)
1608-
* @task: task for fallback if vma policy == default
1609-
* @vma: virtual memory area whose policy is sought
1610-
* @addr: address in @vma for shared policy lookup
1611-
*
1612-
* Returns effective policy for a VMA at specified address.
1613-
* Falls back to @task or system default policy, as necessary.
1614-
* Current or other task's task mempolicy and non-shared vma policies must be
1615-
* protected by task_lock(task) by the caller.
1616-
* Shared policies [those marked as MPOL_F_SHARED] require an extra reference
1617-
* count--added by the get_policy() vm_op, as appropriate--to protect against
1618-
* freeing by another task. It is the caller's responsibility to free the
1619-
* extra reference for shared policies.
1620-
*/
1621-
struct mempolicy *get_vma_policy(struct task_struct *task,
1622-
struct vm_area_struct *vma, unsigned long addr)
1606+
struct mempolicy *__get_vma_policy(struct vm_area_struct *vma,
1607+
unsigned long addr)
16231608
{
16241609
struct mempolicy *pol = NULL;
16251610

@@ -1640,6 +1625,29 @@ struct mempolicy *get_vma_policy(struct task_struct *task,
16401625
}
16411626
}
16421627

1628+
return pol;
1629+
}
1630+
1631+
/*
1632+
* get_vma_policy(@task, @vma, @addr)
1633+
* @task: task for fallback if vma policy == default
1634+
* @vma: virtual memory area whose policy is sought
1635+
* @addr: address in @vma for shared policy lookup
1636+
*
1637+
* Returns effective policy for a VMA at specified address.
1638+
* Falls back to @task or system default policy, as necessary.
1639+
* Current or other task's task mempolicy and non-shared vma policies must be
1640+
* protected by task_lock(task) by the caller.
1641+
* Shared policies [those marked as MPOL_F_SHARED] require an extra reference
1642+
* count--added by the get_policy() vm_op, as appropriate--to protect against
1643+
* freeing by another task. It is the caller's responsibility to free the
1644+
* extra reference for shared policies.
1645+
*/
1646+
struct mempolicy *get_vma_policy(struct task_struct *task,
1647+
struct vm_area_struct *vma, unsigned long addr)
1648+
{
1649+
struct mempolicy *pol = __get_vma_policy(vma, addr);
1650+
16431651
if (!pol)
16441652
pol = get_task_policy(task);
16451653

0 commit comments

Comments
 (0)