Merge branch 'core-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'core-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: futex: Fix WARN_ON() test for UP WARN_ON_SMP(): Allow use in if() statements on UP x86, dumpstack: Use %pB format specifier for stack trace vsprintf: Introduce %pB format specifier lockdep: Remove unused 'factor' variable from lockdep_stats_show()
This commit is contained in:
@@ -782,8 +782,8 @@ static void __unqueue_futex(struct futex_q *q)
|
||||
{
|
||||
struct futex_hash_bucket *hb;
|
||||
|
||||
if (WARN_ON(!q->lock_ptr || !spin_is_locked(q->lock_ptr)
|
||||
|| plist_node_empty(&q->list)))
|
||||
if (WARN_ON_SMP(!q->lock_ptr || !spin_is_locked(q->lock_ptr))
|
||||
|| WARN_ON(plist_node_empty(&q->list)))
|
||||
return;
|
||||
|
||||
hb = container_of(q->lock_ptr, struct futex_hash_bucket, lock);
|
||||
|
@@ -342,13 +342,15 @@ int lookup_symbol_attrs(unsigned long addr, unsigned long *size,
|
||||
}
|
||||
|
||||
/* Look up a kernel symbol and return it in a text buffer. */
|
||||
int sprint_symbol(char *buffer, unsigned long address)
|
||||
static int __sprint_symbol(char *buffer, unsigned long address,
|
||||
int symbol_offset)
|
||||
{
|
||||
char *modname;
|
||||
const char *name;
|
||||
unsigned long offset, size;
|
||||
int len;
|
||||
|
||||
address += symbol_offset;
|
||||
name = kallsyms_lookup(address, &size, &offset, &modname, buffer);
|
||||
if (!name)
|
||||
return sprintf(buffer, "0x%lx", address);
|
||||
@@ -357,17 +359,53 @@ int sprint_symbol(char *buffer, unsigned long address)
|
||||
strcpy(buffer, name);
|
||||
len = strlen(buffer);
|
||||
buffer += len;
|
||||
offset -= symbol_offset;
|
||||
|
||||
if (modname)
|
||||
len += sprintf(buffer, "+%#lx/%#lx [%s]",
|
||||
offset, size, modname);
|
||||
len += sprintf(buffer, "+%#lx/%#lx [%s]", offset, size, modname);
|
||||
else
|
||||
len += sprintf(buffer, "+%#lx/%#lx", offset, size);
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
/**
|
||||
* sprint_symbol - Look up a kernel symbol and return it in a text buffer
|
||||
* @buffer: buffer to be stored
|
||||
* @address: address to lookup
|
||||
*
|
||||
* This function looks up a kernel symbol with @address and stores its name,
|
||||
* offset, size and module name to @buffer if possible. If no symbol was found,
|
||||
* just saves its @address as is.
|
||||
*
|
||||
* This function returns the number of bytes stored in @buffer.
|
||||
*/
|
||||
int sprint_symbol(char *buffer, unsigned long address)
|
||||
{
|
||||
return __sprint_symbol(buffer, address, 0);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(sprint_symbol);
|
||||
|
||||
/**
|
||||
* sprint_backtrace - Look up a backtrace symbol and return it in a text buffer
|
||||
* @buffer: buffer to be stored
|
||||
* @address: address to lookup
|
||||
*
|
||||
* This function is for stack backtrace and does the same thing as
|
||||
* sprint_symbol() but with modified/decreased @address. If there is a
|
||||
* tail-call to the function marked "noreturn", gcc optimized out code after
|
||||
* the call so that the stack-saved return address could point outside of the
|
||||
* caller. This function ensures that kallsyms will find the original caller
|
||||
* by decreasing @address.
|
||||
*
|
||||
* This function returns the number of bytes stored in @buffer.
|
||||
*/
|
||||
int sprint_backtrace(char *buffer, unsigned long address)
|
||||
{
|
||||
return __sprint_symbol(buffer, address, -1);
|
||||
}
|
||||
|
||||
/* Look up a kernel symbol and print it to the kernel messages. */
|
||||
void __print_symbol(const char *fmt, unsigned long address)
|
||||
{
|
||||
|
@@ -225,7 +225,7 @@ static int lockdep_stats_show(struct seq_file *m, void *v)
|
||||
nr_irq_read_safe = 0, nr_irq_read_unsafe = 0,
|
||||
nr_softirq_read_safe = 0, nr_softirq_read_unsafe = 0,
|
||||
nr_hardirq_read_safe = 0, nr_hardirq_read_unsafe = 0,
|
||||
sum_forward_deps = 0, factor = 0;
|
||||
sum_forward_deps = 0;
|
||||
|
||||
list_for_each_entry(class, &all_lock_classes, lock_entry) {
|
||||
|
||||
@@ -283,13 +283,6 @@ static int lockdep_stats_show(struct seq_file *m, void *v)
|
||||
nr_hardirq_unsafe * nr_hardirq_safe +
|
||||
nr_list_entries);
|
||||
|
||||
/*
|
||||
* Estimated factor between direct and indirect
|
||||
* dependencies:
|
||||
*/
|
||||
if (nr_list_entries)
|
||||
factor = sum_forward_deps / nr_list_entries;
|
||||
|
||||
#ifdef CONFIG_PROVE_LOCKING
|
||||
seq_printf(m, " dependency chains: %11lu [max: %lu]\n",
|
||||
nr_lock_chains, MAX_LOCKDEP_CHAINS);
|
||||
|
Reference in New Issue
Block a user