History

Merge tag 'v3.4-rc5' into next

Linux 3.4-rc5 Merge to pull in prerequisite change for Smack: 86812bb0de1a3758dc6c7aa01a763158a7c0638a Requested by Casey.

James Morris committed 14 years ago

Commit 898bfc12 parents 08162e6 69964ea811 files · +7629 −5435Browse files

Showing the changes to kernel (19 of 811 files). Show all

Unified · Split

19 files
  1. kernel/cred.c +2 −0
  2. kernel/events/core.c +1 −1
  3. kernel/irq/Kconfig +1 −1
  4. kernel/irq/debug.h +19 −19
  5. kernel/irq/irqdomain.c +17 −30
  6. kernel/irq_work.c +1 −0
  7. kernel/itimer.c +6 −2
  8. kernel/panic.c +1 −1
  9. kernel/power/swap.c +22 −6
  10. kernel/rcutree.c +0 −1
  11. kernel/sched/core.c +16 −6
  12. kernel/sched/fair.c +10 −8
  13. kernel/sched/features.h +1 −0
  14. kernel/time/Kconfig +4 −0
  15. kernel/time/tick-broadcast.c +6 −5
  16. kernel/time/tick-sched.c +2 −2
  17. kernel/trace/trace.c +5 −3
  18. kernel/trace/trace.h +2 −2
  19. kernel/trace/trace_output.c +5 −0
kernel/cred.c+2−0
@@ -386,6 +386,8 @@ int copy_creds(struct task_struct *p, unsigned long clone_flags) · 385 unmodified lines
386386 struct cred *new;
387387 int ret;
388388
389+ p->replacement_session_keyring = NULL;
390+
389391 if (
390392 #ifdef CONFIG_KEYS
391393 !p->cred->thread_keyring &&
kernel/events/core.c+1−1
@@ -3183,7 +3183,7 @@ static void perf_event_for_each(struct perf_event *event, · 3182 unmodified lines
31833183 perf_event_for_each_child(event, func);
31843184 func(event);
31853185 list_for_each_entry(sibling, &event->sibling_list, group_entry)
3186− perf_event_for_each_child(event, func);
3186+ perf_event_for_each_child(sibling, func);
31873187 mutex_unlock(&ctx->mutex);
31883188 }
31893189
kernel/irq/Kconfig+1−1
@@ -62,7 +62,7 @@ config IRQ_DOMAIN_DEBUG · 61 unmodified lines
6262 help
6363 This option will show the mapping relationship between hardware irq
6464 numbers and Linux irq numbers. The mapping is exposed via debugfs
65− in the file "virq_mapping".
65+ in the file "irq_domain_mapping".
6666
6767 If you don't know what this means you don't need it.
6868
kernel/irq/debug.h+19−19
@@ -4,10 +4,10 @@ · 3 unmodified lines
44
55 #include <linux/kallsyms.h>
66
7−#define P(f) if (desc->status_use_accessors & f) printk("%14s set\n", #f)
8−#define PS(f) if (desc->istate & f) printk("%14s set\n", #f)
7+#define ___P(f) if (desc->status_use_accessors & f) printk("%14s set\n", #f)
8+#define ___PS(f) if (desc->istate & f) printk("%14s set\n", #f)
99 /* FIXME */
10−#define PD(f) do { } while (0)
10+#define ___PD(f) do { } while (0)
1111
1212 static inline void print_irq_desc(unsigned int irq, struct irq_desc *desc)
1313 {
@@ -23,23 +23,23 @@ static inline void print_irq_desc(unsigned int irq, struct irq_desc *desc) · 9 unmodified lines
2323 print_symbol("%s\n", (unsigned long)desc->action->handler);
2424 }
2525
26− P(IRQ_LEVEL);
27− P(IRQ_PER_CPU);
28− P(IRQ_NOPROBE);
29− P(IRQ_NOREQUEST);
30− P(IRQ_NOTHREAD);
31− P(IRQ_NOAUTOEN);
26+ ___P(IRQ_LEVEL);
27+ ___P(IRQ_PER_CPU);
28+ ___P(IRQ_NOPROBE);
29+ ___P(IRQ_NOREQUEST);
30+ ___P(IRQ_NOTHREAD);
31+ ___P(IRQ_NOAUTOEN);
3232
33− PS(IRQS_AUTODETECT);
34− PS(IRQS_REPLAY);
35− PS(IRQS_WAITING);
36− PS(IRQS_PENDING);
33+ ___PS(IRQS_AUTODETECT);
34+ ___PS(IRQS_REPLAY);
35+ ___PS(IRQS_WAITING);
36+ ___PS(IRQS_PENDING);
3737
38− PD(IRQS_INPROGRESS);
39− PD(IRQS_DISABLED);
40− PD(IRQS_MASKED);
38+ ___PD(IRQS_INPROGRESS);
39+ ___PD(IRQS_DISABLED);
40+ ___PD(IRQS_MASKED);
4141 }
4242
43−#undef P
44−#undef PS
45−#undef PD
43+#undef ___P
44+#undef ___PS
45+#undef ___PD
kernel/irq/irqdomain.c+17−30
@@ -23,7 +23,6 @@ static LIST_HEAD(irq_domain_list); · 22 unmodified lines
2323 static DEFINE_MUTEX(irq_domain_mutex);
2424
2525 static DEFINE_MUTEX(revmap_trees_mutex);
26−static unsigned int irq_virq_count = NR_IRQS;
2726 static struct irq_domain *irq_default_domain;
2827
2928 /**
@@ -184,13 +183,16 @@ struct irq_domain *irq_domain_add_linear(struct device_node *of_node, · 154 unmodified lines
184183 }
185184
186185 struct irq_domain *irq_domain_add_nomap(struct device_node *of_node,
186+ unsigned int max_irq,
187187 const struct irq_domain_ops *ops,
188188 void *host_data)
189189 {
190190 struct irq_domain *domain = irq_domain_alloc(of_node,
191191 IRQ_DOMAIN_MAP_NOMAP, ops, host_data);
192− if (domain)
192+ if (domain) {
193+ domain->revmap_data.nomap.max_irq = max_irq ? max_irq : ~0;
193194 irq_domain_add(domain);
195+ }
194196 return domain;
195197 }
196198
@@ -262,22 +264,6 @@ void irq_set_default_host(struct irq_domain *domain) · 65 unmodified lines
262264 irq_default_domain = domain;
263265 }
264266
265−/**
266− * irq_set_virq_count() - Set the maximum number of linux irqs
267− * @count: number of linux irqs, capped with NR_IRQS
268− *
269− * This is mainly for use by platforms like iSeries who want to program
270− * the virtual irq number in the controller to avoid the reverse mapping
271− */
272−void irq_set_virq_count(unsigned int count)
273−{
274− pr_debug("irq: Trying to set virq count to %d\n", count);
275−
276− BUG_ON(count < NUM_ISA_INTERRUPTS);
277− if (count < NR_IRQS)
278− irq_virq_count = count;
279−}
280−
281267 static int irq_setup_virq(struct irq_domain *domain, unsigned int virq,
282268 irq_hw_number_t hwirq)
283269 {
@@ -320,13 +306,12 @@ unsigned int irq_create_direct_mapping(struct irq_domain *domain) · 36 unmodified lines
320306 pr_debug("irq: create_direct virq allocation failed\n");
321307 return 0;
322308 }
323− if (virq >= irq_virq_count) {
309+ if (virq >= domain->revmap_data.nomap.max_irq) {
324310 pr_err("ERROR: no free irqs available below %i maximum\n",
325− irq_virq_count);
311+ domain->revmap_data.nomap.max_irq);
326312 irq_free_desc(virq);
327313 return 0;
328314 }
329−
330315 pr_debug("irq: create_direct obtained virq %d\n", virq);
331316
332317 if (irq_setup_virq(domain, virq, virq)) {
@@ -350,7 +335,8 @@ unsigned int irq_create_direct_mapping(struct irq_domain *domain) · 17 unmodified lines
350335 unsigned int irq_create_mapping(struct irq_domain *domain,
351336 irq_hw_number_t hwirq)
352337 {
353− unsigned int virq, hint;
338+ unsigned int hint;
339+ int virq;
354340
355341 pr_debug("irq: irq_create_mapping(0x%p, 0x%lx)\n", domain, hwirq);
356342
@@ -377,13 +363,13 @@ unsigned int irq_create_mapping(struct irq_domain *domain, · 20 unmodified lines
377363 return irq_domain_legacy_revmap(domain, hwirq);
378364
379365 /* Allocate a virtual interrupt number */
380− hint = hwirq % irq_virq_count;
366+ hint = hwirq % nr_irqs;
381367 if (hint == 0)
382368 hint++;
383369 virq = irq_alloc_desc_from(hint, 0);
384− if (!virq)
370+ if (virq <= 0)
385371 virq = irq_alloc_desc_from(1, 0);
386− if (!virq) {
372+ if (virq <= 0) {
387373 pr_debug("irq: -> virq allocation failed\n");
388374 return 0;
389375 }
@@ -515,7 +501,7 @@ unsigned int irq_find_mapping(struct irq_domain *domain, · 125 unmodified lines
515501 irq_hw_number_t hwirq)
516502 {
517503 unsigned int i;
518− unsigned int hint = hwirq % irq_virq_count;
504+ unsigned int hint = hwirq % nr_irqs;
519505
520506 /* Look for default domain if nececssary */
521507 if (domain == NULL)
@@ -536,7 +522,7 @@ unsigned int irq_find_mapping(struct irq_domain *domain, · 14 unmodified lines
536522 if (data && (data->domain == domain) && (data->hwirq == hwirq))
537523 return i;
538524 i++;
539− if (i >= irq_virq_count)
525+ if (i >= nr_irqs)
540526 i = 1;
541527 } while(i != hint);
542528 return 0;
@@ -642,8 +628,9 @@ static int virq_debug_show(struct seq_file *m, void *private) · 99 unmodified lines
642628 void *data;
643629 int i;
644630
645− seq_printf(m, "%-5s %-7s %-15s %-18s %s\n", "virq", "hwirq",
646− "chip name", "chip data", "domain name");
631+ seq_printf(m, "%-5s %-7s %-15s %-*s %s\n", "irq", "hwirq",
632+ "chip name", (int)(2 * sizeof(void *) + 2), "chip data",
633+ "domain name");
647634
648635 for (i = 1; i < nr_irqs; i++) {
649636 desc = irq_to_desc(i);
@@ -666,7 +653,7 @@ static int virq_debug_show(struct seq_file *m, void *private) · 16 unmodified lines
666653 seq_printf(m, "%-15s ", p);
667654
668655 data = irq_desc_get_chip_data(desc);
669− seq_printf(m, "0x%16p ", data);
656+ seq_printf(m, data ? "0x%p " : " %p ", data);
670657
671658 if (desc->irq_data.domain && desc->irq_data.domain->of_node)
672659 p = desc->irq_data.domain->of_node->full_name;
kernel/irq_work.c+1−0
@@ -11,6 +11,7 @@ · 10 unmodified lines
1111 #include <linux/irq_work.h>
1212 #include <linux/percpu.h>
1313 #include <linux/hardirq.h>
14+#include <linux/irqflags.h>
1415 #include <asm/processor.h>
1516
1617 /*
kernel/itimer.c+6−2
@@ -284,8 +284,12 @@ SYSCALL_DEFINE3(setitimer, int, which, struct itimerval __user *, value, · 283 unmodified lines
284284 if (value) {
285285 if(copy_from_user(&set_buffer, value, sizeof(set_buffer)))
286286 return -EFAULT;
287− } else
288− memset((char *) &set_buffer, 0, sizeof(set_buffer));
287+ } else {
288+ memset(&set_buffer, 0, sizeof(set_buffer));
289+ printk_once(KERN_WARNING "%s calls setitimer() with new_value NULL pointer."
290+ " Misfeature support will be removed\n",
291+ current->comm);
292+ }
289293
290294 error = do_setitimer(which, &set_buffer, ovalue ? &get_buffer : NULL);
291295 if (error || !ovalue)
kernel/panic.c+1−1
@@ -97,7 +97,7 @@ void panic(const char *fmt, ...) · 96 unmodified lines
9797 /*
9898 * Avoid nested stack-dumping if a panic occurs during oops processing
9999 */
100− if (!oops_in_progress)
100+ if (!test_taint(TAINT_DIE) && oops_in_progress <= 1)
101101 dump_stack();
102102 #endif
103103
kernel/power/swap.c+22−6
@@ -51,6 +51,23 @@ · 50 unmodified lines
5151
5252 #define MAP_PAGE_ENTRIES (PAGE_SIZE / sizeof(sector_t) - 1)
5353
54+/*
55+ * Number of free pages that are not high.
56+ */
57+static inline unsigned long low_free_pages(void)
58+{
59+ return nr_free_pages() - nr_free_highpages();
60+}
61+
62+/*
63+ * Number of pages required to be kept free while writing the image. Always
64+ * half of all available low pages before the writing starts.
65+ */
66+static inline unsigned long reqd_free_pages(void)
67+{
68+ return low_free_pages() / 2;
69+}
70+
5471 struct swap_map_page {
5572 sector_t entries[MAP_PAGE_ENTRIES];
5673 sector_t next_swap;
@@ -72,7 +89,7 @@ struct swap_map_handle { · 15 unmodified lines
7289 sector_t cur_swap;
7390 sector_t first_sector;
7491 unsigned int k;
75− unsigned long nr_free_pages, written;
92+ unsigned long reqd_free_pages;
7693 u32 crc32;
7794 };
7895
@@ -316,8 +333,7 @@ static int get_swap_writer(struct swap_map_handle *handle) · 237 unmodified lines
316333 goto err_rel;
317334 }
318335 handle->k = 0;
319− handle->nr_free_pages = nr_free_pages() >> 1;
320− handle->written = 0;
336+ handle->reqd_free_pages = reqd_free_pages();
321337 handle->first_sector = handle->cur_swap;
322338 return 0;
323339 err_rel:
@@ -352,11 +368,11 @@ static int swap_write_page(struct swap_map_handle *handle, void *buf, · 28 unmodified lines
352368 handle->cur_swap = offset;
353369 handle->k = 0;
354370 }
355− if (bio_chain && ++handle->written > handle->nr_free_pages) {
371+ if (bio_chain && low_free_pages() <= handle->reqd_free_pages) {
356372 error = hib_wait_on_bio_chain(bio_chain);
357373 if (error)
358374 goto out;
359− handle->written = 0;
375+ handle->reqd_free_pages = reqd_free_pages();
360376 }
361377 out:
362378 return error;
@@ -618,7 +634,7 @@ static int save_image_lzo(struct swap_map_handle *handle, · 255 unmodified lines
618634 * Adjust number of free pages after all allocations have been done.
619635 * We don't want to run out of pages when writing.
620636 */
621− handle->nr_free_pages = nr_free_pages() >> 1;
637+ handle->reqd_free_pages = reqd_free_pages();
622638
623639 /*
624640 * Start the CRC32 thread.
kernel/rcutree.c+0−1
@@ -1820,7 +1820,6 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu), · 1819 unmodified lines
18201820 * a quiescent state betweentimes.
18211821 */
18221822 local_irq_save(flags);
1823− WARN_ON_ONCE(cpu_is_offline(smp_processor_id()));
18241823 rdp = this_cpu_ptr(rsp->rda);
18251824
18261825 /* Add the callback to our list. */
kernel/sched/core.c+16−6
@@ -6405,16 +6405,26 @@ static void __sdt_free(const struct cpumask *cpu_map) · 6404 unmodified lines
64056405 struct sd_data *sdd = &tl->data;
64066406
64076407 for_each_cpu(j, cpu_map) {
6408− struct sched_domain *sd = *per_cpu_ptr(sdd->sd, j);
6409− if (sd && (sd->flags & SD_OVERLAP))
6410− free_sched_groups(sd->groups, 0);
6411− kfree(*per_cpu_ptr(sdd->sd, j));
6412− kfree(*per_cpu_ptr(sdd->sg, j));
6413− kfree(*per_cpu_ptr(sdd->sgp, j));
6408+ struct sched_domain *sd;
6409+
6410+ if (sdd->sd) {
6411+ sd = *per_cpu_ptr(sdd->sd, j);
6412+ if (sd && (sd->flags & SD_OVERLAP))
6413+ free_sched_groups(sd->groups, 0);
6414+ kfree(*per_cpu_ptr(sdd->sd, j));
6415+ }
6416+
6417+ if (sdd->sg)
6418+ kfree(*per_cpu_ptr(sdd->sg, j));
6419+ if (sdd->sgp)
6420+ kfree(*per_cpu_ptr(sdd->sgp, j));
64146421 }
64156422 free_percpu(sdd->sd);
6423+ sdd->sd = NULL;
64166424 free_percpu(sdd->sg);
6425+ sdd->sg = NULL;
64176426 free_percpu(sdd->sgp);
6427+ sdd->sgp = NULL;
64186428 }
64196429 }
64206430
kernel/sched/fair.c+10−8
@@ -784,7 +784,7 @@ account_entity_enqueue(struct cfs_rq *cfs_rq, struct sched_entity *se) · 783 unmodified lines
784784 update_load_add(&rq_of(cfs_rq)->load, se->load.weight);
785785 #ifdef CONFIG_SMP
786786 if (entity_is_task(se))
787− list_add_tail(&se->group_node, &rq_of(cfs_rq)->cfs_tasks);
787+ list_add(&se->group_node, &rq_of(cfs_rq)->cfs_tasks);
788788 #endif
789789 cfs_rq->nr_running++;
790790 }
@@ -3215,6 +3215,8 @@ static int move_one_task(struct lb_env *env) · 2424 unmodified lines
32153215
32163216 static unsigned long task_h_load(struct task_struct *p);
32173217
3218+static const unsigned int sched_nr_migrate_break = 32;
3219+
32183220 /*
32193221 * move_tasks tries to move up to load_move weighted load from busiest to
32203222 * this_rq, as part of a balancing operation within domain "sd".
@@ -3242,7 +3244,7 @@ static int move_tasks(struct lb_env *env) · 21 unmodified lines
32423244
32433245 /* take a breather every nr_migrate tasks */
32443246 if (env->loop > env->loop_break) {
3245− env->loop_break += sysctl_sched_nr_migrate;
3247+ env->loop_break += sched_nr_migrate_break;
32463248 env->flags |= LBF_NEED_BREAK;
32473249 break;
32483250 }
@@ -3252,7 +3254,7 @@ static int move_tasks(struct lb_env *env) · 3 unmodified lines
32523254
32533255 load = task_h_load(p);
32543256
3255− if (load < 16 && !env->sd->nr_balance_failed)
3257+ if (sched_feat(LB_MIN) && load < 16 && !env->sd->nr_balance_failed)
32563258 goto next;
32573259
32583260 if ((load / 2) > env->load_move)
@@ -4407,7 +4409,7 @@ static int load_balance(int this_cpu, struct rq *this_rq, · 1148 unmodified lines
44074409 .dst_cpu = this_cpu,
44084410 .dst_rq = this_rq,
44094411 .idle = idle,
4410− .loop_break = sysctl_sched_nr_migrate,
4412+ .loop_break = sched_nr_migrate_break,
44114413 };
44124414
44134415 cpumask_copy(cpus, cpu_active_mask);
@@ -4445,10 +4447,10 @@ redo: · 31 unmodified lines
44454447 * correctly treated as an imbalance.
44464448 */
44474449 env.flags |= LBF_ALL_PINNED;
4448− env.load_move = imbalance;
4449− env.src_cpu = busiest->cpu;
4450− env.src_rq = busiest;
4451− env.loop_max = busiest->nr_running;
4450+ env.load_move = imbalance;
4451+ env.src_cpu = busiest->cpu;
4452+ env.src_rq = busiest;
4453+ env.loop_max = min_t(unsigned long, sysctl_sched_nr_migrate, busiest->nr_running);
44524454
44534455 more_balance:
44544456 local_irq_save(flags);
kernel/sched/features.h+1−0
@@ -68,3 +68,4 @@ SCHED_FEAT(TTWU_QUEUE, true) · 67 unmodified lines
6868
6969 SCHED_FEAT(FORCE_SD_OVERLAP, false)
7070 SCHED_FEAT(RT_RUNTIME_SHARE, true)
71+SCHED_FEAT(LB_MIN, false)
kernel/time/Kconfig+4−0
@@ -1,6 +1,10 @@
11 #
22 # Timer subsystem related configuration options
33 #
4+
5+# Core internal switch. Selected by NO_HZ / HIGH_RES_TIMERS. This is
6+# only related to the tick functionality. Oneshot clockevent devices
7+# are supported independ of this.
48 config TICK_ONESHOT
59 bool
610
kernel/time/tick-broadcast.c+6−5
@@ -346,7 +346,8 @@ int tick_resume_broadcast(void) · 345 unmodified lines
346346 tick_get_broadcast_mask());
347347 break;
348348 case TICKDEV_MODE_ONESHOT:
349− broadcast = tick_resume_broadcast_oneshot(bc);
349+ if (!cpumask_empty(tick_get_broadcast_mask()))
350+ broadcast = tick_resume_broadcast_oneshot(bc);
350351 break;
351352 }
352353 }
@@ -373,6 +374,9 @@ static int tick_broadcast_set_event(ktime_t expires, int force) · 20 unmodified lines
373374 {
374375 struct clock_event_device *bc = tick_broadcast_device.evtdev;
375376
377+ if (bc->mode != CLOCK_EVT_MODE_ONESHOT)
378+ clockevents_set_mode(bc, CLOCK_EVT_MODE_ONESHOT);
379+
376380 return clockevents_program_event(bc, expires, force);
377381 }
378382
@@ -531,7 +535,6 @@ void tick_broadcast_setup_oneshot(struct clock_event_device *bc) · 152 unmodified lines
531535 int was_periodic = bc->mode == CLOCK_EVT_MODE_PERIODIC;
532536
533537 bc->event_handler = tick_handle_oneshot_broadcast;
534− clockevents_set_mode(bc, CLOCK_EVT_MODE_ONESHOT);
535538
536539 /* Take the do_timer update */
537540 tick_do_timer_cpu = cpu;
@@ -549,6 +552,7 @@ void tick_broadcast_setup_oneshot(struct clock_event_device *bc) · 11 unmodified lines
549552 to_cpumask(tmpmask));
550553
551554 if (was_periodic && !cpumask_empty(to_cpumask(tmpmask))) {
555+ clockevents_set_mode(bc, CLOCK_EVT_MODE_ONESHOT);
552556 tick_broadcast_init_next_event(to_cpumask(tmpmask),
553557 tick_next_period);
554558 tick_broadcast_set_event(tick_next_period, 1);
@@ -575,15 +579,12 @@ void tick_broadcast_switch_to_oneshot(void) · 20 unmodified lines
575579 unsigned long flags;
576580
577581 raw_spin_lock_irqsave(&tick_broadcast_lock, flags);
578− if (cpumask_empty(tick_get_broadcast_mask()))
579− goto end;
580582
581583 tick_broadcast_device.mode = TICKDEV_MODE_ONESHOT;
582584 bc = tick_broadcast_device.evtdev;
583585 if (bc)
584586 tick_broadcast_setup_oneshot(bc);
585587
586−end:
587588 raw_spin_unlock_irqrestore(&tick_broadcast_lock, flags);
588589 }
589590
kernel/time/tick-sched.c+2−2
@@ -534,9 +534,9 @@ static void tick_nohz_restart(struct tick_sched *ts, ktime_t now) · 533 unmodified lines
534534 hrtimer_get_expires(&ts->sched_timer), 0))
535535 break;
536536 }
537− /* Update jiffies and reread time */
538− tick_do_update_jiffies64(now);
537+ /* Reread time and update jiffies */
539538 now = ktime_get();
539+ tick_do_update_jiffies64(now);
540540 }
541541 }
542542
kernel/trace/trace.c+5−3
@@ -4629,7 +4629,8 @@ static ssize_t · 4628 unmodified lines
46294629 rb_simple_read(struct file *filp, char __user *ubuf,
46304630 size_t cnt, loff_t *ppos)
46314631 {
4632− struct ring_buffer *buffer = filp->private_data;
4632+ struct trace_array *tr = filp->private_data;
4633+ struct ring_buffer *buffer = tr->buffer;
46334634 char buf[64];
46344635 int r;
46354636
@@ -4647,7 +4648,8 @@ static ssize_t · 11 unmodified lines
46474648 rb_simple_write(struct file *filp, const char __user *ubuf,
46484649 size_t cnt, loff_t *ppos)
46494650 {
4650− struct ring_buffer *buffer = filp->private_data;
4651+ struct trace_array *tr = filp->private_data;
4652+ struct ring_buffer *buffer = tr->buffer;
46514653 unsigned long val;
46524654 int ret;
46534655
@@ -4734,7 +4736,7 @@ static __init int tracer_init_debugfs(void) · 80 unmodified lines
47344736 &trace_clock_fops);
47354737
47364738 trace_create_file("tracing_on", 0644, d_tracer,
4737− global_trace.buffer, &rb_simple_fops);
4739+ &global_trace, &rb_simple_fops);
47384740
47394741 #ifdef CONFIG_DYNAMIC_FTRACE
47404742 trace_create_file("dyn_ftrace_total_info", 0444, d_tracer,
kernel/trace/trace.h+2−2
@@ -836,11 +836,11 @@ extern const char *__stop___trace_bprintk_fmt[]; · 835 unmodified lines
836836 filter)
837837 #include "trace_entries.h"
838838
839−#ifdef CONFIG_FUNCTION_TRACER
839+#if defined(CONFIG_PERF_EVENTS) && defined(CONFIG_FUNCTION_TRACER)
840840 int perf_ftrace_event_register(struct ftrace_event_call *call,
841841 enum trace_reg type, void *data);
842842 #else
843843 #define perf_ftrace_event_register NULL
844−#endif /* CONFIG_FUNCTION_TRACER */
844+#endif
845845
846846 #endif /* _LINUX_KERNEL_TRACE_H */
kernel/trace/trace_output.c+5−0
@@ -652,6 +652,8 @@ int trace_print_lat_context(struct trace_iterator *iter) · 651 unmodified lines
652652 {
653653 u64 next_ts;
654654 int ret;
655+ /* trace_find_next_entry will reset ent_size */
656+ int ent_size = iter->ent_size;
655657 struct trace_seq *s = &iter->seq;
656658 struct trace_entry *entry = iter->ent,
657659 *next_entry = trace_find_next_entry(iter, NULL,
@@ -660,6 +662,9 @@ int trace_print_lat_context(struct trace_iterator *iter) · 2 unmodified lines
660662 unsigned long abs_usecs = ns2usecs(iter->ts - iter->tr->time_start);
661663 unsigned long rel_usecs;
662664
665+ /* Restore the original ent_size */
666+ iter->ent_size = ent_size;
667+
663668 if (!next_entry)
664669 next_ts = iter->ts;
665670 rel_usecs = ns2usecs(next_ts - iter->ts);