mirror of
https://github.com/netdata/libbpf.git
synced 2026-04-04 23:59:07 +08:00
perf: Capture branch privilege information
Platforms like arm64 could capture privilege level information for all the branch records. Hence this adds a new element in the struct branch_entry to record the privilege level information, which could be requested through a new event.attr.branch_sample_type based flag PERF_SAMPLE_BRANCH_PRIV_SAVE. This flag helps user choose whether privilege information is captured. Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: James Clark <james.clark@arm.com> Link: https://lkml.kernel.org/r/20220824044822.70230-4-anshuman.khandual@arm.com
This commit is contained in:
committed by
Andrii Nakryiko
parent
ade228b8f0
commit
a14b39bd31
@@ -204,6 +204,8 @@ enum perf_branch_sample_type_shift {
|
|||||||
|
|
||||||
PERF_SAMPLE_BRANCH_HW_INDEX_SHIFT = 17, /* save low level index of raw branch records */
|
PERF_SAMPLE_BRANCH_HW_INDEX_SHIFT = 17, /* save low level index of raw branch records */
|
||||||
|
|
||||||
|
PERF_SAMPLE_BRANCH_PRIV_SAVE_SHIFT = 18, /* save privilege mode */
|
||||||
|
|
||||||
PERF_SAMPLE_BRANCH_MAX_SHIFT /* non-ABI */
|
PERF_SAMPLE_BRANCH_MAX_SHIFT /* non-ABI */
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -233,6 +235,8 @@ enum perf_branch_sample_type {
|
|||||||
|
|
||||||
PERF_SAMPLE_BRANCH_HW_INDEX = 1U << PERF_SAMPLE_BRANCH_HW_INDEX_SHIFT,
|
PERF_SAMPLE_BRANCH_HW_INDEX = 1U << PERF_SAMPLE_BRANCH_HW_INDEX_SHIFT,
|
||||||
|
|
||||||
|
PERF_SAMPLE_BRANCH_PRIV_SAVE = 1U << PERF_SAMPLE_BRANCH_PRIV_SAVE_SHIFT,
|
||||||
|
|
||||||
PERF_SAMPLE_BRANCH_MAX = 1U << PERF_SAMPLE_BRANCH_MAX_SHIFT,
|
PERF_SAMPLE_BRANCH_MAX = 1U << PERF_SAMPLE_BRANCH_MAX_SHIFT,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -282,6 +286,13 @@ enum {
|
|||||||
PERF_BR_NEW_MAX,
|
PERF_BR_NEW_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
PERF_BR_PRIV_UNKNOWN = 0,
|
||||||
|
PERF_BR_PRIV_USER = 1,
|
||||||
|
PERF_BR_PRIV_KERNEL = 2,
|
||||||
|
PERF_BR_PRIV_HV = 3,
|
||||||
|
};
|
||||||
|
|
||||||
#define PERF_SAMPLE_BRANCH_PLM_ALL \
|
#define PERF_SAMPLE_BRANCH_PLM_ALL \
|
||||||
(PERF_SAMPLE_BRANCH_USER|\
|
(PERF_SAMPLE_BRANCH_USER|\
|
||||||
PERF_SAMPLE_BRANCH_KERNEL|\
|
PERF_SAMPLE_BRANCH_KERNEL|\
|
||||||
@@ -1402,7 +1413,8 @@ struct perf_branch_entry {
|
|||||||
type:4, /* branch type */
|
type:4, /* branch type */
|
||||||
spec:2, /* branch speculation info */
|
spec:2, /* branch speculation info */
|
||||||
new_type:4, /* additional branch type */
|
new_type:4, /* additional branch type */
|
||||||
reserved:34;
|
priv:3, /* privilege level */
|
||||||
|
reserved:31;
|
||||||
};
|
};
|
||||||
|
|
||||||
union perf_sample_weight {
|
union perf_sample_weight {
|
||||||
|
|||||||
Reference in New Issue
Block a user