diff options
author | Igor Nabirushkin <inabirushkin@nvidia.com> | 2014-02-20 20:48:48 +0400 |
---|---|---|
committer | Gabby Lee <galee@nvidia.com> | 2014-04-24 18:13:59 -0700 |
commit | 93ccea30658168bbcf9315fc0f19c902667ca1a0 (patch) | |
tree | 2ad415dee796c6f028bb4e754e381d95c30cb33b /include | |
parent | 7c96f497809447bb885c234b1504371db3a8bc73 (diff) |
misc: tegra_profiler: add unwinding
Tegra Profiler: unwinding based on exception-handling tables
Bug 1465331
Change-Id: I9e8bb2eb342c5dadf82af05bb87040c0925cca1b
Signed-off-by: Igor Nabirushkin <inabirushkin@nvidia.com>
Reviewed-on: http://git-master/r/377109
(cherry picked from commit ccde0304ffcf4a1cb75bad78507597edc1d69290)
Reviewed-on: http://git-master/r/382398
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Tested-by: Maxim Morin <mmorin@nvidia.com>
Reviewed-by: Gabby Lee <galee@nvidia.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/tegra_profiler.h | 58 |
1 files changed, 53 insertions, 5 deletions
diff --git a/include/linux/tegra_profiler.h b/include/linux/tegra_profiler.h index 9a7299e457ed..9f849a46fd3a 100644 --- a/include/linux/tegra_profiler.h +++ b/include/linux/tegra_profiler.h @@ -19,18 +19,20 @@ #include <linux/ioctl.h> -#define QUADD_SAMPLES_VERSION 21 -#define QUADD_IO_VERSION 9 +#define QUADD_SAMPLES_VERSION 22 +#define QUADD_IO_VERSION 10 #define QUADD_IO_VERSION_DYNAMIC_RB 5 #define QUADD_IO_VERSION_RB_MAX_FILL_COUNT 6 #define QUADD_IO_VERSION_MOD_STATE_STATUS_FIELD 7 #define QUADD_IO_VERSION_BT_KERNEL_CTX 8 #define QUADD_IO_VERSION_GET_MMAP 9 +#define QUADD_IO_VERSION_BT_UNWIND_TABLES 10 #define QUADD_SAMPLE_VERSION_THUMB_MODE_FLAG 17 #define QUADD_SAMPLE_VERSION_GROUP_SAMPLES 18 #define QUADD_SAMPLE_VERSION_THREAD_STATE_FLD 19 +#define QUADD_SAMPLE_VERSION_BT_UNWIND_TABLES 22 #define QUADD_MAX_COUNTERS 32 #define QUADD_MAX_PROCESS 64 @@ -73,8 +75,10 @@ */ #define IOCTL_GET_VERSION _IOR(QUADD_IOCTL, 5, struct quadd_module_version) - -#define QUADD_HRT_SCHED_IN_FUNC "finish_task_switch" +/* + * Send exception-handling tables info + */ +#define IOCTL_SET_EXTAB _IOW(QUADD_IOCTL, 6, struct quadd_extables) #define QUADD_CPUMODE_TEGRA_POWER_CLUSTER_LP (1 << 29) /* LP CPU */ #define QUADD_CPUMODE_THUMB (1 << 30) /* thumb mode */ @@ -132,6 +136,32 @@ typedef u32 quadd_bt_addr_t; #pragma pack(push, 1) +#define QUADD_SAMPLE_UNW_METHOD_SHIFT 0 +#define QUADD_SAMPLE_UNW_METHOD_MASK (1 << QUADD_SAMPLE_UNW_METHOD_SHIFT) + +enum { + QUADD_UNW_METHOD_FP = 0, + QUADD_UNW_METHOD_EHT, +}; + +#define QUADD_SAMPLE_URC_SHIFT 1 +#define QUADD_SAMPLE_URC_MASK (0x0f << QUADD_SAMPLE_URC_SHIFT) + +enum { + QUADD_URC_SUCCESS = 0, + QUADD_URC_FAILURE, + QUADD_URC_IDX_NOT_FOUND, + QUADD_URC_TBL_NOT_EXIST, + QUADD_URC_EACCESS, + QUADD_URC_TBL_IS_CORRUPT, + QUADD_URC_CANTUNWIND, + QUADD_URC_UNHANDLED_INSTRUCTION, + QUADD_URC_REFUSE_TO_UNWIND, + QUADD_URC_SP_INCORRECT, + QUADD_URC_SPARE_ENCODING, + QUADD_URC_UNSUPPORTED_PR, +}; + struct quadd_sample_data { u64 ip; u32 pid; @@ -260,7 +290,9 @@ enum { QUADD_PARAM_IDX_EXTRA = 1, }; -#define QUADD_PARAM_IDX_EXTRA_GET_MMAP (1 << 0) +#define QUADD_PARAM_EXTRA_GET_MMAP (1 << 0) +#define QUADD_PARAM_EXTRA_BT_FP (1 << 1) +#define QUADD_PARAM_EXTRA_BT_UNWIND_TABLES (1 << 2) struct quadd_parameters { u32 freq; @@ -306,6 +338,7 @@ enum { #define QUADD_COMM_CAP_EXTRA_BT_KERNEL_CTX (1 << 0) #define QUADD_COMM_CAP_EXTRA_GET_MMAP (1 << 1) #define QUADD_COMM_CAP_EXTRA_GROUP_SAMPLES (1 << 2) +#define QUADD_COMM_CAP_EXTRA_BT_UNWIND_TABLES (1 << 3) struct quadd_comm_cap { u32 pmu:1, @@ -348,6 +381,21 @@ struct quadd_module_version { u32 reserved[4]; /* reserved fields for future extensions */ }; +struct quadd_sec_info { + u64 addr; + u64 length; +}; + +struct quadd_extables { + u64 vm_start; + u64 vm_end; + + struct quadd_sec_info extab; + struct quadd_sec_info exidx; + + u32 reserved[4]; /* reserved fields for future extensions */ +}; + #pragma pack(pop) #ifdef __KERNEL__ |