Commit b7b2a0afacada237005068294cb0ccc49d32889e resulted in a build failure for nommu builds: fs/built-in.o: In function `nommu_vma_show': task_nommu.c:(.text+0x564a0): undefined reference to `vm_is_stack' make[1]: *** [.tmp_vmlinux1] Error 1 Fix is to provide definitions of vm_is_stack() and vm_is_stack_for_task() for nommu as well. This patch also adds an explicit include of sched.h based on observations and patch submission by Paul Gortmaker <paul.gortmaker@xxxxxxxxxxxxx>: https://lkml.org/lkml/2012/3/5/326 Signed-off-by: Siddhesh Poyarekar <siddhesh.poyarekar@xxxxxxxxx> --- mm/memory.c | 1 + mm/nommu.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 0 deletions(-) diff --git a/mm/memory.c b/mm/memory.c index 2533d9f..0ca7fe6 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -57,6 +57,7 @@ #include <linux/swapops.h> #include <linux/elf.h> #include <linux/gfp.h> +#include <linux/sched.h> #include <asm/io.h> #include <asm/pgalloc.h> diff --git a/mm/nommu.c b/mm/nommu.c index b982290..5a5c3fc 100644 --- a/mm/nommu.c +++ b/mm/nommu.c @@ -29,6 +29,7 @@ #include <linux/security.h> #include <linux/syscalls.h> #include <linux/audit.h> +#include <linux/sched.h> #include <asm/uaccess.h> #include <asm/tlb.h> @@ -2089,3 +2090,42 @@ int nommu_shrink_inode_mappings(struct inode *inode, size_t size, up_write(&nommu_region_sem); return 0; } + +/* Check if the vma is being used as a stack by this task */ +static int vm_is_stack_for_task(struct task_struct *t, + struct vm_area_struct *vma) +{ + return (vma->vm_start <= KSTK_ESP(t) && vma->vm_end >= KSTK_ESP(t)); +} + +/* + * Check if the vma is being used as a stack. + * If is_group is non-zero, check in the entire thread group or else + * just check in the current task. Returns the pid of the task that + * the vma is stack for. + */ +pid_t vm_is_stack(struct task_struct *task, + struct vm_area_struct *vma, int in_group) +{ + pid_t ret = 0; + + if (vm_is_stack_for_task(task, vma)) + return task->pid; + + if (in_group) { + struct task_struct *t; + rcu_read_lock(); + t = list_first_entry_rcu(&task->thread_group, + struct task_struct, thread_group); + do { + if (vm_is_stack_for_task(t, vma)) { + ret = t->pid; + goto done; + } + } while_each_thread(task, t); +done: + rcu_read_unlock(); + } + + return ret; +} -- 1.7.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-next" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html