History

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'.

David S. Miller committed 11 years ago

Commit c5e40ee2 parents 0528318 c5dfd65544 files · +4152 −3347Browse files

Showing the changes to kernel (8 of 544 files). Show all

Unified · Split

8 files
  1. kernel/cpu.c +0 −9
  2. kernel/fork.c +6 −1
  3. kernel/irq/resend.c +13 −5
  4. kernel/sched/fair.c +1 −1
  5. kernel/time/tick-broadcast.c +0 −1
  6. kernel/time/tick-common.c +1 −0
  7. kernel/trace/trace.h +1 −0
  8. kernel/trace/trace_branch.c +10 −7
kernel/cpu.c+0−9
@@ -527,18 +527,9 @@ static int _cpu_up(unsigned int cpu, int tasks_frozen) · 526 unmodified lines
527527 goto out_notify;
528528 }
529529
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−
537530 /* Arch-specific enabling code. */
538531 ret = __cpu_up(cpu, idle);
539532
540− irq_unlock_sparse();
541−
542533 if (ret != 0)
543534 goto out_notify;
544535 BUG_ON(!cpu_online(cpu));
kernel/fork.c+6−1
@@ -287,6 +287,11 @@ static void set_max_threads(unsigned int max_threads_suggested) · 286 unmodified lines
287287 max_threads = clamp_t(u64, threads, MIN_THREADS, MAX_THREADS);
288288 }
289289
290+#ifdef CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT
291+/* Initialized by the architecture: */
292+int arch_task_struct_size __read_mostly;
293+#endif
294+
290295 void __init fork_init(void)
291296 {
292297 #ifndef CONFIG_ARCH_TASK_STRUCT_ALLOCATOR
@@ -295,7 +300,7 @@ void __init fork_init(void) · 2 unmodified lines
295300 #endif
296301 /* create a slab on which task_structs can be allocated */
297302 task_struct_cachep =
298− kmem_cache_create("task_struct", sizeof(struct task_struct),
303+ kmem_cache_create("task_struct", arch_task_struct_size,
299304 ARCH_MIN_TASKALIGN, SLAB_PANIC | SLAB_NOTRACK, NULL);
300305 #endif
301306
kernel/irq/resend.c+13−5
@@ -75,13 +75,21 @@ void check_irq_resend(struct irq_desc *desc, unsigned int irq) · 74 unmodified lines
7575 !desc->irq_data.chip->irq_retrigger(&desc->irq_data)) {
7676 #ifdef CONFIG_HARDIRQS_SW_RESEND
7777 /*
78− * If the interrupt has a parent irq and runs
79− * in the thread context of the parent irq,
80− * retrigger the parent.
78+ * If the interrupt is running in the thread
79+ * context of the parent irq we need to be
80+ * careful, because we cannot trigger it
81+ * directly.
8182 */
82− if (desc->parent_irq &&
83− irq_settings_is_nested_thread(desc))
83+ if (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;
8491 irq = desc->parent_irq;
92+ }
8593 /* Set it pending and activate the softirq: */
8694 set_bit(irq, irqs_resend);
8795 tasklet_schedule(&resend_tasklet);
kernel/sched/fair.c+1−1
@@ -3683,7 +3683,7 @@ static void throttle_cfs_rq(struct cfs_rq *cfs_rq) · 3682 unmodified lines
36833683 cfs_rq->throttled = 1;
36843684 cfs_rq->throttled_clock = rq_clock(rq);
36853685 raw_spin_lock(&cfs_b->lock);
3686− empty = list_empty(&cfs_rq->throttled_list);
3686+ empty = list_empty(&cfs_b->throttled_cfs_rq);
36873687
36883688 /*
36893689 * Add to the _head_ of the list, so that an already-started
kernel/time/tick-broadcast.c+0−1
@@ -839,7 +839,6 @@ out: · 838 unmodified lines
839839 raw_spin_unlock(&tick_broadcast_lock);
840840 return ret;
841841 }
842−EXPORT_SYMBOL_GPL(tick_broadcast_oneshot_control);
843842
844843 /*
845844 * Reset the one shot broadcast for a cpu
kernel/time/tick-common.c+1−0
@@ -363,6 +363,7 @@ int tick_broadcast_oneshot_control(enum tick_broadcast_state state) · 362 unmodified lines
363363
364364 return __tick_broadcast_oneshot_control(state);
365365 }
366+EXPORT_SYMBOL_GPL(tick_broadcast_oneshot_control);
366367
367368 #ifdef CONFIG_HOTPLUG_CPU
368369 /*
kernel/trace/trace.h+1−0
@@ -444,6 +444,7 @@ enum { · 443 unmodified lines
444444
445445 TRACE_CONTROL_BIT,
446446
447+ TRACE_BRANCH_BIT,
447448 /*
448449 * Abuse of the trace_recursion.
449450 * As we need a way to maintain state if we are tracing the function
kernel/trace/trace_branch.c+10−7
@@ -36,9 +36,12 @@ probe_likely_condition(struct ftrace_branch_data *f, int val, int expect) · 35 unmodified lines
3636 struct trace_branch *entry;
3737 struct ring_buffer *buffer;
3838 unsigned long flags;
39− int cpu, pc;
39+ int pc;
4040 const char *p;
4141
42+ if (current->trace_recursion & TRACE_BRANCH_BIT)
43+ return;
44+
4245 /*
4346 * I would love to save just the ftrace_likely_data pointer, but
4447 * 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) · 4 unmodified lines
4952 if (unlikely(!tr))
5053 return;
5154
52− local_irq_save(flags);
53− cpu = raw_smp_processor_id();
54− data = per_cpu_ptr(tr->trace_buffer.data, cpu);
55− if (atomic_inc_return(&data->disabled) != 1)
55+ raw_local_irq_save(flags);
56+ current->trace_recursion |= TRACE_BRANCH_BIT;
57+ data = this_cpu_ptr(tr->trace_buffer.data);
58+ if (atomic_read(&data->disabled))
5659 goto out;
5760
5861 pc = preempt_count();
@@ -81,8 +84,8 @@ probe_likely_condition(struct ftrace_branch_data *f, int val, int expect) · 22 unmodified lines
8184 __buffer_unlock_commit(buffer, event);
8285
8386 out:
84− atomic_dec(&data->disabled);
85− local_irq_restore(flags);
87+ current->trace_recursion &= ~TRACE_BRANCH_BIT;
88+ raw_local_irq_restore(flags);
8689 }
8790
8891 static inline