Merge branch 'fixes-2.6.39' into for-2.6.40
This commit is contained in:
@@ -78,7 +78,7 @@ static unsigned int kdb_continue_catastrophic;
|
||||
static kdbtab_t *kdb_commands;
|
||||
#define KDB_BASE_CMD_MAX 50
|
||||
static int kdb_max_commands = KDB_BASE_CMD_MAX;
|
||||
static kdbtab_t kdb_base_commands[50];
|
||||
static kdbtab_t kdb_base_commands[KDB_BASE_CMD_MAX];
|
||||
#define for_each_kdbcmd(cmd, num) \
|
||||
for ((cmd) = kdb_base_commands, (num) = 0; \
|
||||
num < kdb_max_commands; \
|
||||
@@ -2892,7 +2892,7 @@ static void __init kdb_inittab(void)
|
||||
"Send a signal to a process", 0, KDB_REPEAT_NONE);
|
||||
kdb_register_repeat("summary", kdb_summary, "",
|
||||
"Summarize the system", 4, KDB_REPEAT_NONE);
|
||||
kdb_register_repeat("per_cpu", kdb_per_cpu, "",
|
||||
kdb_register_repeat("per_cpu", kdb_per_cpu, "<sym> [<bytes>] [<cpu>]",
|
||||
"Display per_cpu variables", 3, KDB_REPEAT_NONE);
|
||||
kdb_register_repeat("grephelp", kdb_grep_help, "",
|
||||
"Display help on | grep", 0, KDB_REPEAT_NONE);
|
||||
|
||||
+2
-2
@@ -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);
|
||||
|
||||
@@ -31,6 +31,10 @@ config GENERIC_IRQ_PROBE
|
||||
config GENERIC_IRQ_SHOW
|
||||
bool
|
||||
|
||||
# Print level/edge extra information
|
||||
config GENERIC_IRQ_SHOW_LEVEL
|
||||
bool
|
||||
|
||||
# Support for delayed migration from interrupt context
|
||||
config GENERIC_PENDING_IRQ
|
||||
bool
|
||||
|
||||
@@ -198,15 +198,6 @@ err:
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
struct irq_desc * __ref irq_to_desc_alloc_node(unsigned int irq, int node)
|
||||
{
|
||||
int res = irq_alloc_descs(irq, irq, 1, node);
|
||||
|
||||
if (res == -EEXIST || res == irq)
|
||||
return irq_to_desc(irq);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int irq_expand_nr_irqs(unsigned int nr)
|
||||
{
|
||||
if (nr > IRQ_BITMAP_BITS)
|
||||
@@ -283,11 +274,6 @@ struct irq_desc *irq_to_desc(unsigned int irq)
|
||||
return (irq < NR_IRQS) ? irq_desc + irq : NULL;
|
||||
}
|
||||
|
||||
struct irq_desc *irq_to_desc_alloc_node(unsigned int irq, int node)
|
||||
{
|
||||
return irq_to_desc(irq);
|
||||
}
|
||||
|
||||
static void free_desc(unsigned int irq)
|
||||
{
|
||||
dynamic_irq_cleanup(irq);
|
||||
|
||||
+14
-1
@@ -404,7 +404,20 @@ int show_interrupts(struct seq_file *p, void *v)
|
||||
seq_printf(p, "%*d: ", prec, i);
|
||||
for_each_online_cpu(j)
|
||||
seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
|
||||
seq_printf(p, " %8s", desc->irq_data.chip->name);
|
||||
|
||||
if (desc->irq_data.chip) {
|
||||
if (desc->irq_data.chip->irq_print_chip)
|
||||
desc->irq_data.chip->irq_print_chip(&desc->irq_data, p);
|
||||
else if (desc->irq_data.chip->name)
|
||||
seq_printf(p, " %8s", desc->irq_data.chip->name);
|
||||
else
|
||||
seq_printf(p, " %8s", "-");
|
||||
} else {
|
||||
seq_printf(p, " %8s", "None");
|
||||
}
|
||||
#ifdef CONFIG_GENIRC_IRQ_SHOW_LEVEL
|
||||
seq_printf(p, " %-8s", irqd_is_level_type(&desc->irq_data) ? "Level" : "Edge");
|
||||
#endif
|
||||
if (desc->name)
|
||||
seq_printf(p, "-%-8s", desc->name);
|
||||
|
||||
|
||||
+41
-3
@@ -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);
|
||||
|
||||
+13
-2
@@ -145,7 +145,8 @@ static struct srcu_struct pmus_srcu;
|
||||
*/
|
||||
int sysctl_perf_event_paranoid __read_mostly = 1;
|
||||
|
||||
int sysctl_perf_event_mlock __read_mostly = 512; /* 'free' kb per user */
|
||||
/* Minimum for 128 pages + 1 for the user control page */
|
||||
int sysctl_perf_event_mlock __read_mostly = 516; /* 'free' kb per user */
|
||||
|
||||
/*
|
||||
* max perf event sample rate
|
||||
@@ -941,6 +942,7 @@ static void perf_group_attach(struct perf_event *event)
|
||||
static void
|
||||
list_del_event(struct perf_event *event, struct perf_event_context *ctx)
|
||||
{
|
||||
struct perf_cpu_context *cpuctx;
|
||||
/*
|
||||
* We can have double detach due to exit/hot-unplug + close.
|
||||
*/
|
||||
@@ -949,8 +951,17 @@ list_del_event(struct perf_event *event, struct perf_event_context *ctx)
|
||||
|
||||
event->attach_state &= ~PERF_ATTACH_CONTEXT;
|
||||
|
||||
if (is_cgroup_event(event))
|
||||
if (is_cgroup_event(event)) {
|
||||
ctx->nr_cgroups--;
|
||||
cpuctx = __get_cpu_context(ctx);
|
||||
/*
|
||||
* if there are no more cgroup events
|
||||
* then cler cgrp to avoid stale pointer
|
||||
* in update_cgrp_time_from_cpuctx()
|
||||
*/
|
||||
if (!ctx->nr_cgroups)
|
||||
cpuctx->cgrp = NULL;
|
||||
}
|
||||
|
||||
ctx->nr_events--;
|
||||
if (event->attr.inherit_stat)
|
||||
|
||||
+2
-3
@@ -5473,6 +5473,8 @@ EXPORT_SYMBOL(yield);
|
||||
* yield_to - yield the current processor to another thread in
|
||||
* your thread group, or accelerate that thread toward the
|
||||
* processor it's on.
|
||||
* @p: target task
|
||||
* @preempt: whether task preemption is allowed or not
|
||||
*
|
||||
* It's the caller's job to ensure that the target task struct
|
||||
* can't go away on us before we can do any checks.
|
||||
@@ -8449,7 +8451,6 @@ int alloc_fair_sched_group(struct task_group *tg, struct task_group *parent)
|
||||
{
|
||||
struct cfs_rq *cfs_rq;
|
||||
struct sched_entity *se;
|
||||
struct rq *rq;
|
||||
int i;
|
||||
|
||||
tg->cfs_rq = kzalloc(sizeof(cfs_rq) * nr_cpu_ids, GFP_KERNEL);
|
||||
@@ -8462,8 +8463,6 @@ int alloc_fair_sched_group(struct task_group *tg, struct task_group *parent)
|
||||
tg->shares = NICE_0_LOAD;
|
||||
|
||||
for_each_possible_cpu(i) {
|
||||
rq = cpu_rq(i);
|
||||
|
||||
cfs_rq = kzalloc_node(sizeof(struct cfs_rq),
|
||||
GFP_KERNEL, cpu_to_node(i));
|
||||
if (!cfs_rq)
|
||||
|
||||
@@ -94,6 +94,4 @@ static const struct sched_class idle_sched_class = {
|
||||
|
||||
.prio_changed = prio_changed_idle,
|
||||
.switched_to = switched_to_idle,
|
||||
|
||||
/* no .task_new for idle tasks */
|
||||
};
|
||||
|
||||
@@ -102,6 +102,4 @@ static const struct sched_class stop_sched_class = {
|
||||
|
||||
.prio_changed = prio_changed_stop,
|
||||
.switched_to = switched_to_stop,
|
||||
|
||||
/* no .task_new for stop tasks */
|
||||
};
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/sysdev.h>
|
||||
#include <linux/syscore_ops.h>
|
||||
#include <linux/clocksource.h>
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/time.h>
|
||||
@@ -597,13 +597,12 @@ static struct timespec timekeeping_suspend_time;
|
||||
|
||||
/**
|
||||
* timekeeping_resume - Resumes the generic timekeeping subsystem.
|
||||
* @dev: unused
|
||||
*
|
||||
* This is for the generic clocksource timekeeping.
|
||||
* xtime/wall_to_monotonic/jiffies/etc are
|
||||
* still managed by arch specific suspend/resume code.
|
||||
*/
|
||||
static int timekeeping_resume(struct sys_device *dev)
|
||||
static void timekeeping_resume(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct timespec ts;
|
||||
@@ -632,11 +631,9 @@ static int timekeeping_resume(struct sys_device *dev)
|
||||
|
||||
/* Resume hrtimers */
|
||||
hres_timers_resume();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int timekeeping_suspend(struct sys_device *dev, pm_message_t state)
|
||||
static int timekeeping_suspend(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
@@ -654,26 +651,18 @@ static int timekeeping_suspend(struct sys_device *dev, pm_message_t state)
|
||||
}
|
||||
|
||||
/* sysfs resume/suspend bits for timekeeping */
|
||||
static struct sysdev_class timekeeping_sysclass = {
|
||||
.name = "timekeeping",
|
||||
static struct syscore_ops timekeeping_syscore_ops = {
|
||||
.resume = timekeeping_resume,
|
||||
.suspend = timekeeping_suspend,
|
||||
};
|
||||
|
||||
static struct sys_device device_timer = {
|
||||
.id = 0,
|
||||
.cls = &timekeeping_sysclass,
|
||||
};
|
||||
|
||||
static int __init timekeeping_init_device(void)
|
||||
static int __init timekeeping_init_ops(void)
|
||||
{
|
||||
int error = sysdev_class_register(&timekeeping_sysclass);
|
||||
if (!error)
|
||||
error = sysdev_register(&device_timer);
|
||||
return error;
|
||||
register_syscore_ops(&timekeeping_syscore_ops);
|
||||
return 0;
|
||||
}
|
||||
|
||||
device_initcall(timekeeping_init_device);
|
||||
device_initcall(timekeeping_init_ops);
|
||||
|
||||
/*
|
||||
* If the error is already larger, we look ahead even further
|
||||
|
||||
@@ -1467,7 +1467,7 @@ t_next(struct seq_file *m, void *v, loff_t *pos)
|
||||
return t_hash_next(m, pos);
|
||||
|
||||
(*pos)++;
|
||||
iter->pos = *pos;
|
||||
iter->pos = iter->func_pos = *pos;
|
||||
|
||||
if (iter->flags & FTRACE_ITER_PRINTALL)
|
||||
return t_hash_start(m, pos);
|
||||
@@ -1502,7 +1502,6 @@ t_next(struct seq_file *m, void *v, loff_t *pos)
|
||||
if (!rec)
|
||||
return t_hash_start(m, pos);
|
||||
|
||||
iter->func_pos = *pos;
|
||||
iter->func = rec;
|
||||
|
||||
return iter;
|
||||
|
||||
Reference in New Issue
Block a user