diff options
| author | David S. Miller <davem@davemloft.net> | 2015-07-23 03:41:16 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2015-07-23 03:41:16 -0400 |
| commit | c5e40ee287db61a79af1746954ee03ebbf1ff8a3 (patch) | |
| tree | 007da00e75e9b84766ac4868421705300e1e2e14 /kernel | |
| parent | 052831879945be0d9fad2216b127147c565ec1b1 (diff) | |
| parent | c5dfd654d0ec0a28fe81e7bd4d4fd984a9855e09 (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
net/bridge/br_mdb.c
br_mdb.c conflict was a function call being removed to fix a bug in
'net' but whose signature was changed in 'net-next'.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/cpu.c | 9 | ||||
| -rw-r--r-- | kernel/fork.c | 7 | ||||
| -rw-r--r-- | kernel/irq/resend.c | 18 | ||||
| -rw-r--r-- | kernel/sched/fair.c | 2 | ||||
| -rw-r--r-- | kernel/time/tick-broadcast.c | 1 | ||||
| -rw-r--r-- | kernel/time/tick-common.c | 1 | ||||
| -rw-r--r-- | kernel/trace/trace.h | 1 | ||||
| -rw-r--r-- | kernel/trace/trace_branch.c | 17 |
8 files changed, 32 insertions, 24 deletions
diff --git a/kernel/cpu.c b/kernel/cpu.c index 6a374544d495..5644ec5582b9 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c | |||
| @@ -527,18 +527,9 @@ static int _cpu_up(unsigned int cpu, int tasks_frozen) | |||
| 527 | goto out_notify; | 527 | goto out_notify; |
| 528 | } | 528 | } |
| 529 | 529 | ||
| 530 | /* | ||
| 531 | * Some architectures have to walk the irq descriptors to | ||
| 532 | * setup the vector space for the cpu which comes online. | ||
| 533 | * Prevent irq alloc/free across the bringup. | ||
| 534 | */ | ||
| 535 | irq_lock_sparse(); | ||
| 536 | |||
| 537 | /* Arch-specific enabling code. */ | 530 | /* Arch-specific enabling code. */ |
| 538 | ret = __cpu_up(cpu, idle); | 531 | ret = __cpu_up(cpu, idle); |
| 539 | 532 | ||
| 540 | irq_unlock_sparse(); | ||
| 541 | |||
| 542 | if (ret != 0) | 533 | if (ret != 0) |
| 543 | goto out_notify; | 534 | goto out_notify; |
| 544 | BUG_ON(!cpu_online(cpu)); | 535 | BUG_ON(!cpu_online(cpu)); |
diff --git a/kernel/fork.c b/kernel/fork.c index 1bfefc6f96a4..dbd9b8d7b7cc 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
| @@ -287,6 +287,11 @@ static void set_max_threads(unsigned int max_threads_suggested) | |||
| 287 | max_threads = clamp_t(u64, threads, MIN_THREADS, MAX_THREADS); | 287 | max_threads = clamp_t(u64, threads, MIN_THREADS, MAX_THREADS); |
| 288 | } | 288 | } |
| 289 | 289 | ||
| 290 | #ifdef CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT | ||
| 291 | /* Initialized by the architecture: */ | ||
| 292 | int arch_task_struct_size __read_mostly; | ||
| 293 | #endif | ||
| 294 | |||
| 290 | void __init fork_init(void) | 295 | void __init fork_init(void) |
| 291 | { | 296 | { |
| 292 | #ifndef CONFIG_ARCH_TASK_STRUCT_ALLOCATOR | 297 | #ifndef CONFIG_ARCH_TASK_STRUCT_ALLOCATOR |
| @@ -295,7 +300,7 @@ void __init fork_init(void) | |||
| 295 | #endif | 300 | #endif |
| 296 | /* create a slab on which task_structs can be allocated */ | 301 | /* create a slab on which task_structs can be allocated */ |
| 297 | task_struct_cachep = | 302 | task_struct_cachep = |
| 298 | kmem_cache_create("task_struct", sizeof(struct task_struct), | 303 | kmem_cache_create("task_struct", arch_task_struct_size, |
| 299 | ARCH_MIN_TASKALIGN, SLAB_PANIC | SLAB_NOTRACK, NULL); | 304 | ARCH_MIN_TASKALIGN, SLAB_PANIC | SLAB_NOTRACK, NULL); |
| 300 | #endif | 305 | #endif |
| 301 | 306 | ||
diff --git a/kernel/irq/resend.c b/kernel/irq/resend.c index 9065107f083e..7a5237a1bce5 100644 --- a/kernel/irq/resend.c +++ b/kernel/irq/resend.c | |||
| @@ -75,13 +75,21 @@ void check_irq_resend(struct irq_desc *desc, unsigned int irq) | |||
| 75 | !desc->irq_data.chip->irq_retrigger(&desc->irq_data)) { | 75 | !desc->irq_data.chip->irq_retrigger(&desc->irq_data)) { |
| 76 | #ifdef CONFIG_HARDIRQS_SW_RESEND | 76 | #ifdef CONFIG_HARDIRQS_SW_RESEND |
| 77 | /* | 77 | /* |
| 78 | * If the interrupt has a parent irq and runs | 78 | * If the interrupt is running in the thread |
| 79 | * in the thread context of the parent irq, | 79 | * context of the parent irq we need to be |
| 80 | * retrigger the parent. | 80 | * careful, because we cannot trigger it |
| 81 | * directly. | ||
| 81 | */ | 82 | */ |
| 82 | if (desc->parent_irq && | 83 | if (irq_settings_is_nested_thread(desc)) { |
| 83 | irq_settings_is_nested_thread(desc)) | 84 | /* |
| 85 | * If the parent_irq is valid, we | ||
| 86 | * retrigger the parent, otherwise we | ||
| 87 | * do nothing. | ||
| 88 | */ | ||
| 89 | if (!desc->parent_irq) | ||
| 90 | return; | ||
| 84 | irq = desc->parent_irq; | 91 | irq = desc->parent_irq; |
| 92 | } | ||
| 85 | /* Set it pending and activate the softirq: */ | 93 | /* Set it pending and activate the softirq: */ |
| 86 | set_bit(irq, irqs_resend); | 94 | set_bit(irq, irqs_resend); |
| 87 | tasklet_schedule(&resend_tasklet); | 95 | tasklet_schedule(&resend_tasklet); |
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 65c8f3ebdc3c..d113c3ba8bc4 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c | |||
| @@ -3683,7 +3683,7 @@ static void throttle_cfs_rq(struct cfs_rq *cfs_rq) | |||
| 3683 | cfs_rq->throttled = 1; | 3683 | cfs_rq->throttled = 1; |
| 3684 | cfs_rq->throttled_clock = rq_clock(rq); | 3684 | cfs_rq->throttled_clock = rq_clock(rq); |
| 3685 | raw_spin_lock(&cfs_b->lock); | 3685 | raw_spin_lock(&cfs_b->lock); |
| 3686 | empty = list_empty(&cfs_rq->throttled_list); | 3686 | empty = list_empty(&cfs_b->throttled_cfs_rq); |
| 3687 | 3687 | ||
| 3688 | /* | 3688 | /* |
| 3689 | * Add to the _head_ of the list, so that an already-started | 3689 | * Add to the _head_ of the list, so that an already-started |
diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c index 52b9e199b5ac..f6aae7977824 100644 --- a/kernel/time/tick-broadcast.c +++ b/kernel/time/tick-broadcast.c | |||
| @@ -839,7 +839,6 @@ out: | |||
| 839 | raw_spin_unlock(&tick_broadcast_lock); | 839 | raw_spin_unlock(&tick_broadcast_lock); |
| 840 | return ret; | 840 | return ret; |
| 841 | } | 841 | } |
| 842 | EXPORT_SYMBOL_GPL(tick_broadcast_oneshot_control); | ||
| 843 | 842 | ||
| 844 | /* | 843 | /* |
| 845 | * Reset the one shot broadcast for a cpu | 844 | * Reset the one shot broadcast for a cpu |
diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c index 55e13efff1ab..f8bf47571dda 100644 --- a/kernel/time/tick-common.c +++ b/kernel/time/tick-common.c | |||
| @@ -363,6 +363,7 @@ int tick_broadcast_oneshot_control(enum tick_broadcast_state state) | |||
| 363 | 363 | ||
| 364 | return __tick_broadcast_oneshot_control(state); | 364 | return __tick_broadcast_oneshot_control(state); |
| 365 | } | 365 | } |
| 366 | EXPORT_SYMBOL_GPL(tick_broadcast_oneshot_control); | ||
| 366 | 367 | ||
| 367 | #ifdef CONFIG_HOTPLUG_CPU | 368 | #ifdef CONFIG_HOTPLUG_CPU |
| 368 | /* | 369 | /* |
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index f060716b02ae..74bde81601a9 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h | |||
| @@ -444,6 +444,7 @@ enum { | |||
| 444 | 444 | ||
| 445 | TRACE_CONTROL_BIT, | 445 | TRACE_CONTROL_BIT, |
| 446 | 446 | ||
| 447 | TRACE_BRANCH_BIT, | ||
| 447 | /* | 448 | /* |
| 448 | * Abuse of the trace_recursion. | 449 | * Abuse of the trace_recursion. |
| 449 | * As we need a way to maintain state if we are tracing the function | 450 | * As we need a way to maintain state if we are tracing the function |
diff --git a/kernel/trace/trace_branch.c b/kernel/trace/trace_branch.c index a87b43f49eb4..e2e12ad3186f 100644 --- a/kernel/trace/trace_branch.c +++ b/kernel/trace/trace_branch.c | |||
| @@ -36,9 +36,12 @@ probe_likely_condition(struct ftrace_branch_data *f, int val, int expect) | |||
| 36 | struct trace_branch *entry; | 36 | struct trace_branch *entry; |
| 37 | struct ring_buffer *buffer; | 37 | struct ring_buffer *buffer; |
| 38 | unsigned long flags; | 38 | unsigned long flags; |
| 39 | int cpu, pc; | 39 | int pc; |
| 40 | const char *p; | 40 | const char *p; |
| 41 | 41 | ||
| 42 | if (current->trace_recursion & TRACE_BRANCH_BIT) | ||
| 43 | return; | ||
| 44 | |||
| 42 | /* | 45 | /* |
| 43 | * I would love to save just the ftrace_likely_data pointer, but | 46 | * I would love to save just the ftrace_likely_data pointer, but |
| 44 | * this code can also be used by modules. Ugly things can happen | 47 | * this code can also be used by modules. Ugly things can happen |
| @@ -49,10 +52,10 @@ probe_likely_condition(struct ftrace_branch_data *f, int val, int expect) | |||
| 49 | if (unlikely(!tr)) | 52 | if (unlikely(!tr)) |
| 50 | return; | 53 | return; |
| 51 | 54 | ||
| 52 | local_irq_save(flags); | 55 | raw_local_irq_save(flags); |
| 53 | cpu = raw_smp_processor_id(); | 56 | current->trace_recursion |= TRACE_BRANCH_BIT; |
| 54 | data = per_cpu_ptr(tr->trace_buffer.data, cpu); | 57 | data = this_cpu_ptr(tr->trace_buffer.data); |
| 55 | if (atomic_inc_return(&data->disabled) != 1) | 58 | if (atomic_read(&data->disabled)) |
| 56 | goto out; | 59 | goto out; |
| 57 | 60 | ||
| 58 | pc = preempt_count(); | 61 | pc = preempt_count(); |
| @@ -81,8 +84,8 @@ probe_likely_condition(struct ftrace_branch_data *f, int val, int expect) | |||
| 81 | __buffer_unlock_commit(buffer, event); | 84 | __buffer_unlock_commit(buffer, event); |
| 82 | 85 | ||
| 83 | out: | 86 | out: |
| 84 | atomic_dec(&data->disabled); | 87 | current->trace_recursion &= ~TRACE_BRANCH_BIT; |
| 85 | local_irq_restore(flags); | 88 | raw_local_irq_restore(flags); |
| 86 | } | 89 | } |
| 87 | 90 | ||
| 88 | static inline | 91 | static inline |
