liblockdep: Wrap kernel/locking/lockdep.c to allow usage from userspace
kernel/locking/lockdep.c deals with validating locking scenarios for various architectures supported by the kernel. There isn't anything kernel specific going on in lockdep, and when we compare userspace to other architectures that don't have to deal with irqs such as s390, they become all too similar. We wrap kernel/locking/lockdep.c and include/linux/lockdep.h with several headers which allow us to build and use lockdep from userspace. We don't touch the kernel code itself which means that any work done on lockdep in the kernel will automatically benefit userspace lockdep as well! Signed-off-by: Sasha Levin <sasha.levin@oracle.com> Signed-off-by: Peter Zijlstra <peterz@infradead.org> Cc: torvalds@linux-foundation.org Link: http://lkml.kernel.org/r/1371163284-6346-3-git-send-email-sasha.levin@oracle.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
55
tools/lib/lockdep/uinclude/linux/lockdep.h
Normal file
55
tools/lib/lockdep/uinclude/linux/lockdep.h
Normal file
@@ -0,0 +1,55 @@
|
||||
#ifndef _LIBLOCKDEP_LOCKDEP_H_
|
||||
#define _LIBLOCKDEP_LOCKDEP_H_
|
||||
|
||||
#include <sys/prctl.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
#include <linux/utsname.h>
|
||||
|
||||
|
||||
#define MAX_LOCK_DEPTH 2000UL
|
||||
|
||||
#include "../../../include/linux/lockdep.h"
|
||||
|
||||
struct task_struct {
|
||||
u64 curr_chain_key;
|
||||
int lockdep_depth;
|
||||
unsigned int lockdep_recursion;
|
||||
struct held_lock held_locks[MAX_LOCK_DEPTH];
|
||||
gfp_t lockdep_reclaim_gfp;
|
||||
int pid;
|
||||
char comm[17];
|
||||
};
|
||||
|
||||
extern struct task_struct *__curr(void);
|
||||
|
||||
#define current (__curr())
|
||||
|
||||
#define debug_locks_off() 1
|
||||
#define task_pid_nr(tsk) ((tsk)->pid)
|
||||
|
||||
#define KSYM_NAME_LEN 128
|
||||
#define printk printf
|
||||
|
||||
#define list_del_rcu list_del
|
||||
|
||||
#define atomic_t unsigned long
|
||||
#define atomic_inc(x) ((*(x))++)
|
||||
|
||||
static struct new_utsname *init_utsname(void)
|
||||
{
|
||||
static struct new_utsname n = (struct new_utsname) {
|
||||
.release = "liblockdep",
|
||||
.version = LIBLOCKDEP_VERSION,
|
||||
};
|
||||
|
||||
return &n;
|
||||
}
|
||||
|
||||
#define print_tainted() ""
|
||||
#define static_obj(x) 1
|
||||
|
||||
#define debug_show_all_locks()
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user