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

Commit 06b74c65 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

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

Pull perf fixes from Ingo Molnar:
 "A handful of CPU hotplug related fixes"

* 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  perf/core: Plug potential memory leak in CPU_UP_PREPARE
  perf/core: Remove the bogus and dangerous CPU_DOWN_FAILED hotplug state
  perf/core: Remove bogus UP_CANCELED hotplug state
  perf/x86/amd/uncore: Plug reference leak
parents e6a1c1e9 059fcd8c
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -323,6 +323,8 @@ static int amd_uncore_cpu_up_prepare(unsigned int cpu)
	return 0;
	return 0;


fail:
fail:
	if (amd_uncore_nb)
		*per_cpu_ptr(amd_uncore_nb, cpu) = NULL;
	kfree(uncore_nb);
	kfree(uncore_nb);
	return -ENOMEM;
	return -ENOMEM;
}
}
+1 −3
Original line number Original line Diff line number Diff line
@@ -9206,7 +9206,7 @@ static void perf_event_init_cpu(int cpu)
	struct swevent_htable *swhash = &per_cpu(swevent_htable, cpu);
	struct swevent_htable *swhash = &per_cpu(swevent_htable, cpu);


	mutex_lock(&swhash->hlist_mutex);
	mutex_lock(&swhash->hlist_mutex);
	if (swhash->hlist_refcount > 0) {
	if (swhash->hlist_refcount > 0 && !swevent_hlist_deref(swhash)) {
		struct swevent_hlist *hlist;
		struct swevent_hlist *hlist;


		hlist = kzalloc_node(sizeof(*hlist), GFP_KERNEL, cpu_to_node(cpu));
		hlist = kzalloc_node(sizeof(*hlist), GFP_KERNEL, cpu_to_node(cpu));
@@ -9282,11 +9282,9 @@ perf_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu)
	switch (action & ~CPU_TASKS_FROZEN) {
	switch (action & ~CPU_TASKS_FROZEN) {


	case CPU_UP_PREPARE:
	case CPU_UP_PREPARE:
	case CPU_DOWN_FAILED:
		perf_event_init_cpu(cpu);
		perf_event_init_cpu(cpu);
		break;
		break;


	case CPU_UP_CANCELED:
	case CPU_DOWN_PREPARE:
	case CPU_DOWN_PREPARE:
		perf_event_exit_cpu(cpu);
		perf_event_exit_cpu(cpu);
		break;
		break;