summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Kconfig.debug21
-rw-r--r--lib/cpumask.c18
-rw-r--r--lib/devres.c8
-rw-r--r--lib/fault-inject.c41
-rw-r--r--lib/genalloc.c4
-rw-r--r--lib/kobject.c3
-rw-r--r--lib/textsearch.c2
7 files changed, 51 insertions, 46 deletions
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 63f04c15e6f..3f3e7403dca 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -134,6 +134,17 @@ config SCHEDSTATS
application, you can say N to avoid the very slight overhead
this adds.
+config TIMER_STATS
+ bool "Collect kernel timers statistics"
+ depends on DEBUG_KERNEL && PROC_FS
+ help
+ If you say Y here, additional code will be inserted into the
+ timer routines to collect statistics about kernel timers being
+ reprogrammed. The statistics can be read from /proc/timer_stats.
+ The statistics collection is started by writing 1 to /proc/timer_stats,
+ writing 0 stops it. This feature is useful to collect information
+ about timer usage patterns in kernel and userspace.
+
config DEBUG_SLAB
bool "Debug slab memory allocations"
depends on DEBUG_KERNEL && SLAB
@@ -400,8 +411,6 @@ config LKDTM
config FAULT_INJECTION
bool "Fault-injection framework"
depends on DEBUG_KERNEL
- depends on STACKTRACE
- select FRAME_POINTER
help
Provide fault-injection framework.
For more details, see Documentation/fault-injection/.
@@ -429,3 +438,11 @@ config FAULT_INJECTION_DEBUG_FS
depends on FAULT_INJECTION && SYSFS && DEBUG_FS
help
Enable configuration of fault-injection capabilities via debugfs.
+
+config FAULT_INJECTION_STACKTRACE_FILTER
+ bool "stacktrace filter for fault-injection capabilities"
+ depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT
+ select STACKTRACE
+ select FRAME_POINTER
+ help
+ Provide stacktrace filter for fault-injection capabilities
diff --git a/lib/cpumask.c b/lib/cpumask.c
index 3a67dc5ada7..1ea2c184315 100644
--- a/lib/cpumask.c
+++ b/lib/cpumask.c
@@ -15,22 +15,8 @@ int __next_cpu(int n, const cpumask_t *srcp)
}
EXPORT_SYMBOL(__next_cpu);
-/*
- * Find the highest possible smp_processor_id()
- *
- * Note: if we're prepared to assume that cpu_possible_map never changes
- * (reasonable) then this function should cache its return value.
- */
-int highest_possible_processor_id(void)
-{
- unsigned int cpu;
- unsigned highest = 0;
-
- for_each_cpu_mask(cpu, cpu_possible_map)
- highest = cpu;
- return highest;
-}
-EXPORT_SYMBOL(highest_possible_processor_id);
+int nr_cpu_ids;
+EXPORT_SYMBOL(nr_cpu_ids);
int __any_online_cpu(const cpumask_t *mask)
{
diff --git a/lib/devres.c b/lib/devres.c
index 2a668dd7cac..eb38849aa71 100644
--- a/lib/devres.c
+++ b/lib/devres.c
@@ -274,21 +274,21 @@ int pcim_iomap_regions(struct pci_dev *pdev, u16 mask, const char *name)
rc = pci_request_region(pdev, i, name);
if (rc)
- goto err_region;
+ goto err_inval;
rc = -ENOMEM;
if (!pcim_iomap(pdev, i, 0))
- goto err_iomap;
+ goto err_region;
}
return 0;
- err_iomap:
- pcim_iounmap(pdev, iomap[i]);
err_region:
pci_release_region(pdev, i);
err_inval:
while (--i >= 0) {
+ if (!(mask & (1 << i)))
+ continue;
pcim_iounmap(pdev, iomap[i]);
pci_release_region(pdev, i);
}
diff --git a/lib/fault-inject.c b/lib/fault-inject.c
index b5a90fc056d..0fabd12c39d 100644
--- a/lib/fault-inject.c
+++ b/lib/fault-inject.c
@@ -55,7 +55,7 @@ static bool fail_task(struct fault_attr *attr, struct task_struct *task)
#define MAX_STACK_TRACE_DEPTH 32
-#if defined(CONFIG_STACKTRACE)
+#ifdef CONFIG_FAULT_INJECTION_STACKTRACE_FILTER
static bool fail_stacktrace(struct fault_attr *attr)
{
@@ -90,17 +90,10 @@ static bool fail_stacktrace(struct fault_attr *attr)
static inline bool fail_stacktrace(struct fault_attr *attr)
{
- static bool firsttime = true;
-
- if (firsttime) {
- printk(KERN_WARNING
- "This architecture does not implement save_stack_trace()\n");
- firsttime = false;
- }
- return false;
+ return true;
}
-#endif
+#endif /* CONFIG_FAULT_INJECTION_STACKTRACE_FILTER */
/*
* This code is stolen from failmalloc-1.0
@@ -217,6 +210,8 @@ void cleanup_fault_attr_dentries(struct fault_attr *attr)
debugfs_remove(attr->dentries.task_filter_file);
attr->dentries.task_filter_file = NULL;
+#ifdef CONFIG_FAULT_INJECTION_STACKTRACE_FILTER
+
debugfs_remove(attr->dentries.stacktrace_depth_file);
attr->dentries.stacktrace_depth_file = NULL;
@@ -232,6 +227,8 @@ void cleanup_fault_attr_dentries(struct fault_attr *attr)
debugfs_remove(attr->dentries.reject_end_file);
attr->dentries.reject_end_file = NULL;
+#endif /* CONFIG_FAULT_INJECTION_STACKTRACE_FILTER */
+
if (attr->dentries.dir)
WARN_ON(!simple_empty(attr->dentries.dir));
@@ -269,6 +266,13 @@ int init_fault_attr_dentries(struct fault_attr *attr, const char *name)
attr->dentries.task_filter_file = debugfs_create_bool("task-filter",
mode, dir, &attr->task_filter);
+ if (!attr->dentries.probability_file || !attr->dentries.interval_file ||
+ !attr->dentries.times_file || !attr->dentries.space_file ||
+ !attr->dentries.verbose_file || !attr->dentries.task_filter_file)
+ goto fail;
+
+#ifdef CONFIG_FAULT_INJECTION_STACKTRACE_FILTER
+
attr->dentries.stacktrace_depth_file =
debugfs_create_ul_MAX_STACK_TRACE_DEPTH(
"stacktrace-depth", mode, dir, &attr->stacktrace_depth);
@@ -285,18 +289,15 @@ int init_fault_attr_dentries(struct fault_attr *attr, const char *name)
attr->dentries.reject_end_file =
debugfs_create_ul("reject-end", mode, dir, &attr->reject_end);
-
- if (!attr->dentries.probability_file || !attr->dentries.interval_file
- || !attr->dentries.times_file || !attr->dentries.space_file
- || !attr->dentries.verbose_file || !attr->dentries.task_filter_file
- || !attr->dentries.stacktrace_depth_file
- || !attr->dentries.require_start_file
- || !attr->dentries.require_end_file
- || !attr->dentries.reject_start_file
- || !attr->dentries.reject_end_file
- )
+ if (!attr->dentries.stacktrace_depth_file ||
+ !attr->dentries.require_start_file ||
+ !attr->dentries.require_end_file ||
+ !attr->dentries.reject_start_file ||
+ !attr->dentries.reject_end_file)
goto fail;
+#endif /* CONFIG_FAULT_INJECTION_STACKTRACE_FILTER */
+
return 0;
fail:
cleanup_fault_attr_dentries(attr);
diff --git a/lib/genalloc.c b/lib/genalloc.c
index 75ae68ce03e..eb7c2bab9eb 100644
--- a/lib/genalloc.c
+++ b/lib/genalloc.c
@@ -148,7 +148,7 @@ unsigned long gen_pool_alloc(struct gen_pool *pool, size_t size)
addr = chunk->start_addr +
((unsigned long)start_bit << order);
while (nbits--)
- __set_bit(start_bit++, &chunk->bits);
+ __set_bit(start_bit++, chunk->bits);
spin_unlock_irqrestore(&chunk->lock, flags);
read_unlock(&pool->lock);
return addr;
@@ -187,7 +187,7 @@ void gen_pool_free(struct gen_pool *pool, unsigned long addr, size_t size)
spin_lock_irqsave(&chunk->lock, flags);
bit = (addr - chunk->start_addr) >> order;
while (nbits--)
- __clear_bit(bit++, &chunk->bits);
+ __clear_bit(bit++, chunk->bits);
spin_unlock_irqrestore(&chunk->lock, flags);
break;
}
diff --git a/lib/kobject.c b/lib/kobject.c
index 2782f49e906..f4f6176dcd1 100644
--- a/lib/kobject.c
+++ b/lib/kobject.c
@@ -171,7 +171,7 @@ int kobject_shadow_add(struct kobject * kobj, struct dentry *shadow_parent)
return -ENOENT;
if (!kobj->k_name)
kobj->k_name = kobj->name;
- if (!kobj->k_name) {
+ if (!*kobj->k_name) {
pr_debug("kobject attempted to be registered with no name!\n");
WARN_ON(1);
return -EINVAL;
@@ -326,6 +326,7 @@ int kobject_rename(struct kobject * kobj, const char *new_name)
/**
* kobject_rename - change the name of an object
* @kobj: object in question.
+ * @new_parent: object's new parent
* @new_name: object's new name
*/
diff --git a/lib/textsearch.c b/lib/textsearch.c
index 9e2a002c5b5..88c98a2ec8d 100644
--- a/lib/textsearch.c
+++ b/lib/textsearch.c
@@ -40,7 +40,7 @@
* configuration according to the specified parameters.
* (3) User starts the search(es) by calling _find() or _next() to
* fetch subsequent occurrences. A state variable is provided
- * to the algorihtm to store persistent variables.
+ * to the algorithm to store persistent variables.
* (4) Core eventually resets the search offset and forwards the find()
* request to the algorithm.
* (5) Algorithm calls get_next_block() provided by the user continously