Merge commit 'v2.6.27-rc6' into core/rcu
Esse commit está contido em:
@@ -394,7 +394,7 @@ config LOCKDEP
|
||||
bool
|
||||
depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT
|
||||
select STACKTRACE
|
||||
select FRAME_POINTER if !X86 && !MIPS
|
||||
select FRAME_POINTER if !X86 && !MIPS && !PPC
|
||||
select KALLSYMS
|
||||
select KALLSYMS_ALL
|
||||
|
||||
@@ -689,13 +689,13 @@ config FAULT_INJECTION_STACKTRACE_FILTER
|
||||
depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT
|
||||
depends on !X86_64
|
||||
select STACKTRACE
|
||||
select FRAME_POINTER
|
||||
select FRAME_POINTER if !PPC
|
||||
help
|
||||
Provide stacktrace filter for fault-injection capabilities
|
||||
|
||||
config LATENCYTOP
|
||||
bool "Latency measuring infrastructure"
|
||||
select FRAME_POINTER if !MIPS
|
||||
select FRAME_POINTER if !MIPS && !PPC
|
||||
select KALLSYMS
|
||||
select KALLSYMS_ALL
|
||||
select STACKTRACE
|
||||
@@ -706,6 +706,14 @@ config LATENCYTOP
|
||||
Enable this option if you want to use the LatencyTOP tool
|
||||
to find out which userspace is blocking on what kernel operations.
|
||||
|
||||
config SYSCTL_SYSCALL_CHECK
|
||||
bool "Sysctl checks"
|
||||
depends on SYSCTL_SYSCALL
|
||||
---help---
|
||||
sys_sysctl uses binary paths that have been found challenging
|
||||
to properly maintain and use. This enables checks that help
|
||||
you to keep things correct.
|
||||
|
||||
source kernel/trace/Kconfig
|
||||
|
||||
config PROVIDE_OHCI1394_DMA_INIT
|
||||
@@ -748,6 +756,15 @@ config FIREWIRE_OHCI_REMOTE_DMA
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
menuconfig BUILD_DOCSRC
|
||||
bool "Build targets in Documentation/ tree"
|
||||
depends on HEADERS_CHECK
|
||||
help
|
||||
This option attempts to build objects from the source files in the
|
||||
kernel Documentation/ tree.
|
||||
|
||||
Say N if you are unsure.
|
||||
|
||||
source "samples/Kconfig"
|
||||
|
||||
source "lib/Kconfig.kgdb"
|
||||
|
11
lib/bitmap.c
11
lib/bitmap.c
@@ -315,6 +315,17 @@ int bitmap_scnprintf(char *buf, unsigned int buflen,
|
||||
}
|
||||
EXPORT_SYMBOL(bitmap_scnprintf);
|
||||
|
||||
/**
|
||||
* bitmap_scnprintf_len - return buffer length needed to convert
|
||||
* bitmap to an ASCII hex string
|
||||
* @nr_bits: number of bits to be converted
|
||||
*/
|
||||
int bitmap_scnprintf_len(unsigned int nr_bits)
|
||||
{
|
||||
unsigned int nr_nibbles = ALIGN(nr_bits, 4) / 4;
|
||||
return nr_nibbles + ALIGN(nr_nibbles, CHUNKSZ / 4) / (CHUNKSZ / 4) - 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* __bitmap_parse - convert an ASCII hex string into a bitmap.
|
||||
* @buf: pointer to buffer containing string.
|
||||
|
@@ -8,6 +8,7 @@
|
||||
*
|
||||
* Copyright (C) 2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/rwsem.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/module.h>
|
||||
@@ -37,6 +38,7 @@ int debug_locks_off(void)
|
||||
{
|
||||
if (xchg(&debug_locks, 0)) {
|
||||
if (!debug_locks_silent) {
|
||||
oops_in_progress = 1;
|
||||
console_verbose();
|
||||
return 1;
|
||||
}
|
||||
|
@@ -112,6 +112,7 @@ static struct debug_obj *lookup_object(void *addr, struct debug_bucket *b)
|
||||
|
||||
/*
|
||||
* Allocate a new object. If the pool is empty, switch off the debugger.
|
||||
* Must be called with interrupts disabled.
|
||||
*/
|
||||
static struct debug_obj *
|
||||
alloc_object(void *addr, struct debug_bucket *b, struct debug_obj_descr *descr)
|
||||
@@ -148,17 +149,18 @@ alloc_object(void *addr, struct debug_bucket *b, struct debug_obj_descr *descr)
|
||||
static void free_object(struct debug_obj *obj)
|
||||
{
|
||||
unsigned long idx = (unsigned long)(obj - obj_static_pool);
|
||||
unsigned long flags;
|
||||
|
||||
if (obj_pool_free < ODEBUG_POOL_SIZE || idx < ODEBUG_POOL_SIZE) {
|
||||
spin_lock(&pool_lock);
|
||||
spin_lock_irqsave(&pool_lock, flags);
|
||||
hlist_add_head(&obj->node, &obj_pool);
|
||||
obj_pool_free++;
|
||||
obj_pool_used--;
|
||||
spin_unlock(&pool_lock);
|
||||
spin_unlock_irqrestore(&pool_lock, flags);
|
||||
} else {
|
||||
spin_lock(&pool_lock);
|
||||
spin_lock_irqsave(&pool_lock, flags);
|
||||
obj_pool_used--;
|
||||
spin_unlock(&pool_lock);
|
||||
spin_unlock_irqrestore(&pool_lock, flags);
|
||||
kmem_cache_free(obj_cache, obj);
|
||||
}
|
||||
}
|
||||
@@ -171,6 +173,7 @@ static void debug_objects_oom(void)
|
||||
{
|
||||
struct debug_bucket *db = obj_hash;
|
||||
struct hlist_node *node, *tmp;
|
||||
HLIST_HEAD(freelist);
|
||||
struct debug_obj *obj;
|
||||
unsigned long flags;
|
||||
int i;
|
||||
@@ -179,11 +182,14 @@ static void debug_objects_oom(void)
|
||||
|
||||
for (i = 0; i < ODEBUG_HASH_SIZE; i++, db++) {
|
||||
spin_lock_irqsave(&db->lock, flags);
|
||||
hlist_for_each_entry_safe(obj, node, tmp, &db->list, node) {
|
||||
hlist_move_list(&db->list, &freelist);
|
||||
spin_unlock_irqrestore(&db->lock, flags);
|
||||
|
||||
/* Now free them */
|
||||
hlist_for_each_entry_safe(obj, node, tmp, &freelist, node) {
|
||||
hlist_del(&obj->node);
|
||||
free_object(obj);
|
||||
}
|
||||
spin_unlock_irqrestore(&db->lock, flags);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -498,8 +504,9 @@ void debug_object_free(void *addr, struct debug_obj_descr *descr)
|
||||
return;
|
||||
default:
|
||||
hlist_del(&obj->node);
|
||||
spin_unlock_irqrestore(&db->lock, flags);
|
||||
free_object(obj);
|
||||
break;
|
||||
return;
|
||||
}
|
||||
out_unlock:
|
||||
spin_unlock_irqrestore(&db->lock, flags);
|
||||
@@ -510,6 +517,7 @@ static void __debug_check_no_obj_freed(const void *address, unsigned long size)
|
||||
{
|
||||
unsigned long flags, oaddr, saddr, eaddr, paddr, chunks;
|
||||
struct hlist_node *node, *tmp;
|
||||
HLIST_HEAD(freelist);
|
||||
struct debug_obj_descr *descr;
|
||||
enum debug_obj_state state;
|
||||
struct debug_bucket *db;
|
||||
@@ -545,11 +553,18 @@ repeat:
|
||||
goto repeat;
|
||||
default:
|
||||
hlist_del(&obj->node);
|
||||
free_object(obj);
|
||||
hlist_add_head(&obj->node, &freelist);
|
||||
break;
|
||||
}
|
||||
}
|
||||
spin_unlock_irqrestore(&db->lock, flags);
|
||||
|
||||
/* Now free them */
|
||||
hlist_for_each_entry_safe(obj, node, tmp, &freelist, node) {
|
||||
hlist_del(&obj->node);
|
||||
free_object(obj);
|
||||
}
|
||||
|
||||
if (cnt > debug_objects_maxchain)
|
||||
debug_objects_maxchain = cnt;
|
||||
}
|
||||
|
@@ -223,8 +223,7 @@ static int kobject_set_name_vargs(struct kobject *kobj, const char *fmt,
|
||||
return -ENOMEM;
|
||||
|
||||
/* ewww... some of these buggers have '/' in the name ... */
|
||||
s = strchr(kobj->name, '/');
|
||||
if (s)
|
||||
while ((s = strchr(kobj->name, '/')))
|
||||
s[0] = '!';
|
||||
|
||||
kfree(old_name);
|
||||
|
@@ -462,6 +462,8 @@ void __init lmb_enforce_memory_limit(u64 memory_limit)
|
||||
if (lmb.memory.region[0].size < lmb.rmo_size)
|
||||
lmb.rmo_size = lmb.memory.region[0].size;
|
||||
|
||||
memory_limit = lmb_end_of_DRAM();
|
||||
|
||||
/* And truncate any reserves above the limit also. */
|
||||
for (i = 0; i < lmb.reserved.cnt; i++) {
|
||||
p = &lmb.reserved.region[i];
|
||||
|
@@ -27,6 +27,7 @@
|
||||
|
||||
#include <asm/page.h> /* for PAGE_SIZE */
|
||||
#include <asm/div64.h>
|
||||
#include <asm/sections.h> /* for dereference_function_descriptor() */
|
||||
|
||||
/* Works only for digits and letters, but small and fast */
|
||||
#define TOLOWER(x) ((x) | 0x20)
|
||||
@@ -220,7 +221,7 @@ int strict_strtou##type(const char *cp, unsigned int base, valtype *res)\
|
||||
if (len == 0) \
|
||||
return -EINVAL; \
|
||||
\
|
||||
val = simple_strtoul(cp, &tail, base); \
|
||||
val = simple_strtou##type(cp, &tail, base); \
|
||||
if ((*tail == '\0') || \
|
||||
((len == (size_t)(tail - cp) + 1) && (*tail == '\n'))) {\
|
||||
*res = val; \
|
||||
@@ -513,16 +514,6 @@ static char *string(char *buf, char *end, char *s, int field_width, int precisio
|
||||
return buf;
|
||||
}
|
||||
|
||||
static inline void *dereference_function_descriptor(void *ptr)
|
||||
{
|
||||
#if defined(CONFIG_IA64) || defined(CONFIG_PPC64)
|
||||
void *p;
|
||||
if (!probe_kernel_address(ptr, p))
|
||||
ptr = p;
|
||||
#endif
|
||||
return ptr;
|
||||
}
|
||||
|
||||
static char *symbol_string(char *buf, char *end, void *ptr, int field_width, int precision, int flags)
|
||||
{
|
||||
unsigned long value = (unsigned long) ptr;
|
||||
|
Referência em uma nova issue
Block a user