summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/i386/mm/pageattr.c2
-rw-r--r--include/linux/mm.h2
-rw-r--r--include/linux/mutex-debug.h2
-rw-r--r--include/linux/mutex.h2
-rw-r--r--kernel/mutex-debug.c5
-rw-r--r--mm/page_alloc.c2
-rw-r--r--mm/slab.c2
7 files changed, 9 insertions, 8 deletions
diff --git a/arch/i386/mm/pageattr.c b/arch/i386/mm/pageattr.c
index e8a53552b13..d0cadb33b54 100644
--- a/arch/i386/mm/pageattr.c
+++ b/arch/i386/mm/pageattr.c
@@ -224,7 +224,7 @@ void kernel_map_pages(struct page *page, int numpages, int enable)
return;
if (!enable)
mutex_debug_check_no_locks_freed(page_address(page),
- page_address(page+numpages));
+ numpages * PAGE_SIZE);
/* the return value is ignored - the calls cannot fail,
* large pages are disabled at boot time.
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 3f1fafc0245..e53d2c6fd5f 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -1027,7 +1027,7 @@ kernel_map_pages(struct page *page, int numpages, int enable)
{
if (!PageHighMem(page) && !enable)
mutex_debug_check_no_locks_freed(page_address(page),
- page_address(page + numpages));
+ numpages * PAGE_SIZE);
}
#endif
diff --git a/include/linux/mutex-debug.h b/include/linux/mutex-debug.h
index 8138d9eb58e..8b5769f0046 100644
--- a/include/linux/mutex-debug.h
+++ b/include/linux/mutex-debug.h
@@ -18,6 +18,6 @@ extern void FASTCALL(mutex_destroy(struct mutex *lock));
extern void mutex_debug_show_all_locks(void);
extern void mutex_debug_show_held_locks(struct task_struct *filter);
extern void mutex_debug_check_no_locks_held(struct task_struct *task);
-extern void mutex_debug_check_no_locks_freed(const void *from, const void *to);
+extern void mutex_debug_check_no_locks_freed(const void *from, unsigned long len);
#endif
diff --git a/include/linux/mutex.h b/include/linux/mutex.h
index f1c84b1252f..f1ac507fa20 100644
--- a/include/linux/mutex.h
+++ b/include/linux/mutex.h
@@ -79,7 +79,7 @@ struct mutex_waiter {
# define mutex_debug_show_all_locks() do { } while (0)
# define mutex_debug_show_held_locks(p) do { } while (0)
# define mutex_debug_check_no_locks_held(task) do { } while (0)
-# define mutex_debug_check_no_locks_freed(from, to) do { } while (0)
+# define mutex_debug_check_no_locks_freed(from, len) do { } while (0)
#endif
#define __MUTEX_INITIALIZER(lockname) \
diff --git a/kernel/mutex-debug.c b/kernel/mutex-debug.c
index 6f829058ae4..f4913c37695 100644
--- a/kernel/mutex-debug.c
+++ b/kernel/mutex-debug.c
@@ -333,9 +333,10 @@ void mutex_debug_check_no_locks_held(struct task_struct *task)
* is destroyed or reinitialized - this code checks whether there is
* any held lock in the memory range of <from> to <to>:
*/
-void mutex_debug_check_no_locks_freed(const void *from, const void *to)
+void mutex_debug_check_no_locks_freed(const void *from, unsigned long len)
{
struct list_head *curr, *next;
+ const void *to = from + len;
unsigned long flags;
struct mutex *lock;
void *lock_addr;
@@ -437,7 +438,7 @@ void debug_mutex_init(struct mutex *lock, const char *name)
/*
* Make sure we are not reinitializing a held lock:
*/
- mutex_debug_check_no_locks_freed((void *)lock, (void *)(lock + 1));
+ mutex_debug_check_no_locks_freed((void *)lock, sizeof(*lock));
lock->owner = NULL;
INIT_LIST_HEAD(&lock->held_list);
lock->name = name;
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index a5e6891f7bb..8e363536e2d 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -417,7 +417,7 @@ static void __free_pages_ok(struct page *page, unsigned int order)
arch_free_page(page, order);
if (!PageHighMem(page))
mutex_debug_check_no_locks_freed(page_address(page),
- page_address(page+(1<<order)));
+ PAGE_SIZE<<order);
#ifndef CONFIG_MMU
for (i = 1 ; i < (1 << order) ; ++i)
diff --git a/mm/slab.c b/mm/slab.c
index 33aab345cd4..9374293a301 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -3071,7 +3071,7 @@ void kfree(const void *objp)
local_irq_save(flags);
kfree_debugcheck(objp);
c = page_get_cache(virt_to_page(objp));
- mutex_debug_check_no_locks_freed(objp, objp+obj_reallen(c));
+ mutex_debug_check_no_locks_freed(objp, obj_reallen(c));
__cache_free(c, (void *)objp);
local_irq_restore(flags);
}