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.
 
 {
        if (!PageHighMem(page) && !enable)
                mutex_debug_check_no_locks_freed(page_address(page),
-                                                page_address(page + numpages));
+                                                numpages * PAGE_SIZE);
 }
 #endif
 
 
 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
 
 # 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) \
 
  * 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;
        /*
         * 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;
 
        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)
 
        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);
 }