Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a4fc7ab1 authored by David Woodhouse's avatar David Woodhouse Committed by Linus Torvalds
Browse files

[PATCH] fix/simplify mutex debugging code



Let's switch mutex_debug_check_no_locks_freed() to take (addr, len) as
arguments instead, since all its callers were just calculating the 'to'
address for themselves anyway... (and sometimes doing so badly).

Signed-off-by: default avatarDavid Woodhouse <dwmw2@infradead.org>
Acked-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent a8b9ee73
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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.
+1 −1
Original line number Diff line number Diff line
@@ -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

+1 −1
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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) \
+3 −2
Original line number Diff line number Diff line
@@ -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;
Loading