Commit 7ff95e89 authored by Anshuman Khandual's avatar Anshuman Khandual Committed by Junhao He
Browse files

perf: Add irq and exception return branch types

mainline inclusion
from mainline-v5.18-rc1
commit cedd3614
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I8EC9K
CVE: NA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=cedd3614e5d9c80908099c19f8716714ce0610b1



--------------------------------

This expands generic branch type classification by adding two more entries
there in i.e irq and exception return. Also updates the x86 implementation
to process X86_BR_IRET and X86_BR_IRQ records as appropriate. This changes
branch types reported to user space on x86 platform but it should not be a
problem. The possible scenarios and impacts are enumerated here.

Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/1645681014-3346-1-git-send-email-anshuman.khandual@arm.com


Signed-off-by: default avatarJunhao He <hejunhao3@huawei.com>
parent 8a7861db
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1350,10 +1350,10 @@ static int branch_map[X86_BR_TYPE_MAP_MAX] = {
	PERF_BR_SYSCALL,	/* X86_BR_SYSCALL */
	PERF_BR_SYSRET,		/* X86_BR_SYSRET */
	PERF_BR_UNKNOWN,	/* X86_BR_INT */
	PERF_BR_UNKNOWN,	/* X86_BR_IRET */
	PERF_BR_ERET,		/* X86_BR_IRET */
	PERF_BR_COND,		/* X86_BR_JCC */
	PERF_BR_UNCOND,		/* X86_BR_JMP */
	PERF_BR_UNKNOWN,	/* X86_BR_IRQ */
	PERF_BR_IRQ,		/* X86_BR_IRQ */
	PERF_BR_IND_CALL,	/* X86_BR_IND_CALL */
	PERF_BR_UNKNOWN,	/* X86_BR_ABORT */
	PERF_BR_UNKNOWN,	/* X86_BR_IN_TX */
+2 −0
Original line number Diff line number Diff line
@@ -235,6 +235,8 @@ enum {
	PERF_BR_SYSRET		= 8,	/* syscall return */
	PERF_BR_COND_CALL	= 9,	/* conditional function call */
	PERF_BR_COND_RET	= 10,	/* conditional function return */
	PERF_BR_ERET		= 11,	/* exception return */
	PERF_BR_IRQ		= 12,	/* irq */
	PERF_BR_MAX,
};

+2 −0
Original line number Diff line number Diff line
@@ -235,6 +235,8 @@ enum {
	PERF_BR_SYSRET		= 8,	/* syscall return */
	PERF_BR_COND_CALL	= 9,	/* conditional function call */
	PERF_BR_COND_RET	= 10,	/* conditional function return */
	PERF_BR_ERET		= 11,	/* exception return */
	PERF_BR_IRQ		= 12,	/* irq */
	PERF_BR_MAX,
};

+3 −1
Original line number Diff line number Diff line
@@ -49,7 +49,9 @@ const char *branch_type_name(int type)
		"SYSCALL",
		"SYSRET",
		"COND_CALL",
		"COND_RET"
		"COND_RET",
		"ERET",
		"IRQ"
	};

	if (type >= 0 && type < PERF_BR_MAX)