Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 13326e5a authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branches 'perf-urgent-for-linus' and 'timers-urgent-for-linus' of...

Merge branches 'perf-urgent-for-linus' and 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull perf and timer fixes from Ingo Molnar:
 "Two small perf fixes:
   - kernel side context leak fix
   - tooling crash fix

  And two clocksource driver fixes"

* 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  perf: Fix context leak in put_event()
  perf annotate: Fix fallback to unparsed disassembler line

* 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  clockevents: sun5i: Fix setup_irq init sequence
  clocksource: efm32: Fix a NULL pointer dereference
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -225,12 +225,12 @@ static int __init efm32_clockevent_init(struct device_node *np)
	clock_event_ddata.base = base;
	clock_event_ddata.base = base;
	clock_event_ddata.periodic_top = DIV_ROUND_CLOSEST(rate, 1024 * HZ);
	clock_event_ddata.periodic_top = DIV_ROUND_CLOSEST(rate, 1024 * HZ);


	setup_irq(irq, &efm32_clock_event_irq);

	clockevents_config_and_register(&clock_event_ddata.evtdev,
	clockevents_config_and_register(&clock_event_ddata.evtdev,
					DIV_ROUND_CLOSEST(rate, 1024),
					DIV_ROUND_CLOSEST(rate, 1024),
					0xf, 0xffff);
					0xf, 0xffff);


	setup_irq(irq, &efm32_clock_event_irq);

	return 0;
	return 0;


err_get_irq:
err_get_irq:
+4 −4
Original line number Original line Diff line number Diff line
@@ -178,10 +178,6 @@ static void __init sun5i_timer_init(struct device_node *node)


	ticks_per_jiffy = DIV_ROUND_UP(rate, HZ);
	ticks_per_jiffy = DIV_ROUND_UP(rate, HZ);


	ret = setup_irq(irq, &sun5i_timer_irq);
	if (ret)
		pr_warn("failed to setup irq %d\n", irq);

	/* Enable timer0 interrupt */
	/* Enable timer0 interrupt */
	val = readl(timer_base + TIMER_IRQ_EN_REG);
	val = readl(timer_base + TIMER_IRQ_EN_REG);
	writel(val | TIMER_IRQ_EN(0), timer_base + TIMER_IRQ_EN_REG);
	writel(val | TIMER_IRQ_EN(0), timer_base + TIMER_IRQ_EN_REG);
@@ -191,6 +187,10 @@ static void __init sun5i_timer_init(struct device_node *node)


	clockevents_config_and_register(&sun5i_clockevent, rate,
	clockevents_config_and_register(&sun5i_clockevent, rate,
					TIMER_SYNC_TICKS, 0xffffffff);
					TIMER_SYNC_TICKS, 0xffffffff);

	ret = setup_irq(irq, &sun5i_timer_irq);
	if (ret)
		pr_warn("failed to setup irq %d\n", irq);
}
}
CLOCKSOURCE_OF_DECLARE(sun5i_a13, "allwinner,sun5i-a13-hstimer",
CLOCKSOURCE_OF_DECLARE(sun5i_a13, "allwinner,sun5i-a13-hstimer",
		       sun5i_timer_init);
		       sun5i_timer_init);
+1 −1
Original line number Original line Diff line number Diff line
@@ -3591,7 +3591,7 @@ static void put_event(struct perf_event *event)
	ctx = perf_event_ctx_lock_nested(event, SINGLE_DEPTH_NESTING);
	ctx = perf_event_ctx_lock_nested(event, SINGLE_DEPTH_NESTING);
	WARN_ON_ONCE(ctx->parent_ctx);
	WARN_ON_ONCE(ctx->parent_ctx);
	perf_remove_from_context(event, true);
	perf_remove_from_context(event, true);
	mutex_unlock(&ctx->mutex);
	perf_event_ctx_unlock(event, ctx);


	_free_event(event);
	_free_event(event);
}
}
+2 −0
Original line number Original line Diff line number Diff line
@@ -30,6 +30,8 @@ static int disasm_line__parse(char *line, char **namep, char **rawp);


static void ins__delete(struct ins_operands *ops)
static void ins__delete(struct ins_operands *ops)
{
{
	if (ops == NULL)
		return;
	zfree(&ops->source.raw);
	zfree(&ops->source.raw);
	zfree(&ops->source.name);
	zfree(&ops->source.name);
	zfree(&ops->target.raw);
	zfree(&ops->target.raw);