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

Commit 87ac6fa2 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

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

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

* 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  hw breakpoints: Fix pid namespace bug
  x86: Fix instruction breakpoint encoding
  oprofile: Add Support for Intel CPU Family 6 / Model 22 (Intel Celeron 540)
  kprobes: Fix Kconfig dependency
parents 19746cad 068e35ee
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -32,8 +32,9 @@ config HAVE_OPROFILE

config KPROBES
	bool "Kprobes"
	depends on KALLSYMS && MODULES
	depends on MODULES
	depends on HAVE_KPROBES
	select KALLSYMS
	help
	  Kprobes allows you to trap at almost any kernel address and
	  execute a callback function.  register_kprobe() establishes
@@ -45,7 +46,6 @@ config OPTPROBES
	def_bool y
	depends on KPROBES && HAVE_OPTPROBES
	depends on !PREEMPT
	select KALLSYMS_ALL

config HAVE_EFFICIENT_UNALIGNED_ACCESS
	bool
+1 −1
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ struct arch_hw_breakpoint {
#include <linux/list.h>

/* Available HW breakpoint length encodings */
#define X86_BREAKPOINT_LEN_X		0x00
#define X86_BREAKPOINT_LEN_X		0x40
#define X86_BREAKPOINT_LEN_1		0x40
#define X86_BREAKPOINT_LEN_2		0x44
#define X86_BREAKPOINT_LEN_4		0x4c
+19 −21
Original line number Diff line number Diff line
@@ -206,11 +206,27 @@ int arch_check_bp_in_kernelspace(struct perf_event *bp)
int arch_bp_generic_fields(int x86_len, int x86_type,
			   int *gen_len, int *gen_type)
{
	/* Len */
	switch (x86_len) {
	case X86_BREAKPOINT_LEN_X:
	/* Type */
	switch (x86_type) {
	case X86_BREAKPOINT_EXECUTE:
		if (x86_len != X86_BREAKPOINT_LEN_X)
			return -EINVAL;

		*gen_type = HW_BREAKPOINT_X;
		*gen_len = sizeof(long);
		return 0;
	case X86_BREAKPOINT_WRITE:
		*gen_type = HW_BREAKPOINT_W;
		break;
	case X86_BREAKPOINT_RW:
		*gen_type = HW_BREAKPOINT_W | HW_BREAKPOINT_R;
		break;
	default:
		return -EINVAL;
	}

	/* Len */
	switch (x86_len) {
	case X86_BREAKPOINT_LEN_1:
		*gen_len = HW_BREAKPOINT_LEN_1;
		break;
@@ -229,21 +245,6 @@ int arch_bp_generic_fields(int x86_len, int x86_type,
		return -EINVAL;
	}

	/* Type */
	switch (x86_type) {
	case X86_BREAKPOINT_EXECUTE:
		*gen_type = HW_BREAKPOINT_X;
		break;
	case X86_BREAKPOINT_WRITE:
		*gen_type = HW_BREAKPOINT_W;
		break;
	case X86_BREAKPOINT_RW:
		*gen_type = HW_BREAKPOINT_W | HW_BREAKPOINT_R;
		break;
	default:
		return -EINVAL;
	}

	return 0;
}

@@ -316,9 +317,6 @@ int arch_validate_hwbkpt_settings(struct perf_event *bp)
	ret = -EINVAL;

	switch (info->len) {
	case X86_BREAKPOINT_LEN_X:
		align = sizeof(long) -1;
		break;
	case X86_BREAKPOINT_LEN_1:
		align = 0;
		break;
+3 −1
Original line number Diff line number Diff line
@@ -671,7 +671,9 @@ static int __init ppro_init(char **cpu_type)
	case 14:
		*cpu_type = "i386/core";
		break;
	case 15: case 23:
	case 0x0f:
	case 0x16:
	case 0x17:
		*cpu_type = "i386/core_2";
		break;
	case 0x1a:
+2 −1
Original line number Diff line number Diff line
@@ -433,7 +433,8 @@ register_user_hw_breakpoint(struct perf_event_attr *attr,
			    perf_overflow_handler_t triggered,
			    struct task_struct *tsk)
{
	return perf_event_create_kernel_counter(attr, -1, tsk->pid, triggered);
	return perf_event_create_kernel_counter(attr, -1, task_pid_vnr(tsk),
						triggered);
}
EXPORT_SYMBOL_GPL(register_user_hw_breakpoint);