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

Commit b3f2caaa authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'tracing-fixes-for-linus' of...

Merge branch 'tracing-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* 'tracing-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  tracing, x86: fix constraint for parent variable
  tracing, x86: fix fixup section to return to original code
  profiling: fix broken profiling regression
parents 93431dd7 f47a454d
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -488,20 +488,21 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr)
	 * ignore such a protection.
	 */
	asm volatile(
		"1: " _ASM_MOV " (%[parent_old]), %[old]\n"
		"2: " _ASM_MOV " %[return_hooker], (%[parent_replaced])\n"
		"1: " _ASM_MOV " (%[parent]), %[old]\n"
		"2: " _ASM_MOV " %[return_hooker], (%[parent])\n"
		"   movl $0, %[faulted]\n"
		"3:\n"

		".section .fixup, \"ax\"\n"
		"3: movl $1, %[faulted]\n"
		"4: movl $1, %[faulted]\n"
		"   jmp 3b\n"
		".previous\n"

		_ASM_EXTABLE(1b, 3b)
		_ASM_EXTABLE(2b, 3b)
		_ASM_EXTABLE(1b, 4b)
		_ASM_EXTABLE(2b, 4b)

		: [parent_replaced] "=r" (parent), [old] "=r" (old),
		  [faulted] "=r" (faulted)
		: [parent_old] "0" (parent), [return_hooker] "r" (return_hooker)
		: [old] "=r" (old), [faulted] "=r" (faulted)
		: [parent] "r" (parent), [return_hooker] "r" (return_hooker)
		: "memory"
	);

+3 −0
Original line number Diff line number Diff line
@@ -114,12 +114,15 @@ int __ref profile_init(void)
	if (!slab_is_available()) {
		prof_buffer = alloc_bootmem(buffer_bytes);
		alloc_bootmem_cpumask_var(&prof_cpu_mask);
		cpumask_copy(prof_cpu_mask, cpu_possible_mask);
		return 0;
	}

	if (!alloc_cpumask_var(&prof_cpu_mask, GFP_KERNEL))
		return -ENOMEM;

	cpumask_copy(prof_cpu_mask, cpu_possible_mask);

	prof_buffer = kzalloc(buffer_bytes, GFP_KERNEL);
	if (prof_buffer)
		return 0;