|
@@ -123,7 +123,7 @@ static struct mempolicy default_policy = {
|
|
|
|
|
|
static struct mempolicy preferred_node_policy[MAX_NUMNODES];
|
|
|
|
|
|
-static struct mempolicy *get_task_policy(struct task_struct *p)
|
|
|
+struct mempolicy *get_task_policy(struct task_struct *p)
|
|
|
{
|
|
|
struct mempolicy *pol = p->mempolicy;
|
|
|
int node;
|
|
@@ -1603,23 +1603,8 @@ COMPAT_SYSCALL_DEFINE6(mbind, compat_ulong_t, start, compat_ulong_t, len,
|
|
|
|
|
|
#endif
|
|
|
|
|
|
-/*
|
|
|
- * get_vma_policy(@task, @vma, @addr)
|
|
|
- * @task: task for fallback if vma policy == default
|
|
|
- * @vma: virtual memory area whose policy is sought
|
|
|
- * @addr: address in @vma for shared policy lookup
|
|
|
- *
|
|
|
- * Returns effective policy for a VMA at specified address.
|
|
|
- * Falls back to @task or system default policy, as necessary.
|
|
|
- * Current or other task's task mempolicy and non-shared vma policies must be
|
|
|
- * protected by task_lock(task) by the caller.
|
|
|
- * Shared policies [those marked as MPOL_F_SHARED] require an extra reference
|
|
|
- * count--added by the get_policy() vm_op, as appropriate--to protect against
|
|
|
- * freeing by another task. It is the caller's responsibility to free the
|
|
|
- * extra reference for shared policies.
|
|
|
- */
|
|
|
-struct mempolicy *get_vma_policy(struct task_struct *task,
|
|
|
- struct vm_area_struct *vma, unsigned long addr)
|
|
|
+struct mempolicy *__get_vma_policy(struct vm_area_struct *vma,
|
|
|
+ unsigned long addr)
|
|
|
{
|
|
|
struct mempolicy *pol = NULL;
|
|
|
|
|
@@ -1640,6 +1625,29 @@ struct mempolicy *get_vma_policy(struct task_struct *task,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ return pol;
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * get_vma_policy(@task, @vma, @addr)
|
|
|
+ * @task: task for fallback if vma policy == default
|
|
|
+ * @vma: virtual memory area whose policy is sought
|
|
|
+ * @addr: address in @vma for shared policy lookup
|
|
|
+ *
|
|
|
+ * Returns effective policy for a VMA at specified address.
|
|
|
+ * Falls back to @task or system default policy, as necessary.
|
|
|
+ * Current or other task's task mempolicy and non-shared vma policies must be
|
|
|
+ * protected by task_lock(task) by the caller.
|
|
|
+ * Shared policies [those marked as MPOL_F_SHARED] require an extra reference
|
|
|
+ * count--added by the get_policy() vm_op, as appropriate--to protect against
|
|
|
+ * freeing by another task. It is the caller's responsibility to free the
|
|
|
+ * extra reference for shared policies.
|
|
|
+ */
|
|
|
+struct mempolicy *get_vma_policy(struct task_struct *task,
|
|
|
+ struct vm_area_struct *vma, unsigned long addr)
|
|
|
+{
|
|
|
+ struct mempolicy *pol = __get_vma_policy(vma, addr);
|
|
|
+
|
|
|
if (!pol)
|
|
|
pol = get_task_policy(task);
|
|
|
|