mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
lockdep: syscall exit check
Provide a check to validate that we do not hold any locks when switching back to user-space. Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
e4564f79d4
commit
b351d164e8
2 changed files with 18 additions and 0 deletions
|
@ -238,6 +238,7 @@ extern void lockdep_info(void);
|
||||||
extern void lockdep_reset(void);
|
extern void lockdep_reset(void);
|
||||||
extern void lockdep_reset_lock(struct lockdep_map *lock);
|
extern void lockdep_reset_lock(struct lockdep_map *lock);
|
||||||
extern void lockdep_free_key_range(void *start, unsigned long size);
|
extern void lockdep_free_key_range(void *start, unsigned long size);
|
||||||
|
extern void lockdep_sys_exit(void);
|
||||||
|
|
||||||
extern void lockdep_off(void);
|
extern void lockdep_off(void);
|
||||||
extern void lockdep_on(void);
|
extern void lockdep_on(void);
|
||||||
|
@ -317,6 +318,7 @@ static inline void lockdep_on(void)
|
||||||
# define INIT_LOCKDEP
|
# define INIT_LOCKDEP
|
||||||
# define lockdep_reset() do { debug_locks = 1; } while (0)
|
# define lockdep_reset() do { debug_locks = 1; } while (0)
|
||||||
# define lockdep_free_key_range(start, size) do { } while (0)
|
# define lockdep_free_key_range(start, size) do { } while (0)
|
||||||
|
# define lockdep_sys_exit() do { } while (0)
|
||||||
/*
|
/*
|
||||||
* The class key takes no space if lockdep is disabled:
|
* The class key takes no space if lockdep is disabled:
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -3199,3 +3199,19 @@ void debug_show_held_locks(struct task_struct *task)
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL_GPL(debug_show_held_locks);
|
EXPORT_SYMBOL_GPL(debug_show_held_locks);
|
||||||
|
|
||||||
|
void lockdep_sys_exit(void)
|
||||||
|
{
|
||||||
|
struct task_struct *curr = current;
|
||||||
|
|
||||||
|
if (unlikely(curr->lockdep_depth)) {
|
||||||
|
if (!debug_locks_off())
|
||||||
|
return;
|
||||||
|
printk("\n================================================\n");
|
||||||
|
printk( "[ BUG: lock held when returning to user space! ]\n");
|
||||||
|
printk( "------------------------------------------------\n");
|
||||||
|
printk("%s/%d is leaving the kernel with locks still held!\n",
|
||||||
|
curr->comm, curr->pid);
|
||||||
|
lockdep_print_held_locks(curr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue