add a helper function to test if an object is on the stack
authorFUJITA Tomonori <[email protected]>
Thu, 24 Jul 2008 04:26:53 +0000 (21:26 -0700)
committerLinus Torvalds <[email protected]>
Thu, 24 Jul 2008 17:47:14 +0000 (10:47 -0700)
lib/debugobjects.c has a function to test if an object is on the stack.
The block layer and ide needs it (they need to avoid DMA from/to stack
buffers).  This patch moves the function to include/linux/sched.h so that
everyone can use it.

lib/debugobjects.c uses current->stack but this patch uses a
task_stack_page() accessor, which is a preferable way to access the stack.

Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Christoph Lameter <[email protected]>
Cc: Andy Whitcroft <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
include/linux/sched.h
lib/debugobjects.c

index dc7e592c473a85bc393ccff60c54ccbda87e1e32..6aca4a16e377633a1d2cde29fba627b086241b0a 100644 (file)
@@ -1983,6 +1983,13 @@ static inline unsigned long *end_of_stack(struct task_struct *p)
 
 #endif
 
+static inline int object_is_on_stack(void *obj)
+{
+       void *stack = task_stack_page(current);
+
+       return (obj >= stack) && (obj < (stack + THREAD_SIZE));
+}
+
 extern void thread_info_cache_init(void);
 
 /* set thread flags in other task's structures
index 85b18d79be89acee07e25004eac991df799f0b8a..f86196390cfdfc67a9d9bad5929b551e1cc2b8a7 100644 (file)
@@ -226,15 +226,13 @@ debug_object_fixup(int (*fixup)(void *addr, enum debug_obj_state state),
 
 static void debug_object_is_on_stack(void *addr, int onstack)
 {
-       void *stack = current->stack;
        int is_on_stack;
        static int limit;
 
        if (limit > 4)
                return;
 
-       is_on_stack = (addr >= stack && addr < (stack + THREAD_SIZE));
-
+       is_on_stack = object_is_on_stack(addr);
        if (is_on_stack == onstack)
                return;