diff options
| author | Igor Nabirushkin <inabirushkin@nvidia.com> | 2014-02-20 11:48:48 -0500 |
|---|---|---|
| committer | Igor Nabirushkin <inabirushkin@nvidia.com> | 2017-07-13 10:18:39 -0400 |
| commit | 94502fe8782bb0bdfd37bb8e018c3bc3d78cfc1e (patch) | |
| tree | b2a06617b5a060d5de2fc246130042f6c3589eec /include/linux | |
| parent | 249208f32d415411f5d9efe147a1c59191716a54 (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/370036
(cherry picked from commit 2d6f923fa85bf67f3ec9fbd944785582df1d5f46)
Diffstat (limited to 'include/linux')
| -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 9a7299e45..9f849a46f 100644 --- a/include/linux/tegra_profiler.h +++ b/include/linux/tegra_profiler.h | |||
| @@ -19,18 +19,20 @@ | |||
| 19 | 19 | ||
| 20 | #include <linux/ioctl.h> | 20 | #include <linux/ioctl.h> |
| 21 | 21 | ||
| 22 | #define QUADD_SAMPLES_VERSION 21 | 22 | #define QUADD_SAMPLES_VERSION 22 |
| 23 | #define QUADD_IO_VERSION 9 | 23 | #define QUADD_IO_VERSION 10 |
| 24 | 24 | ||
| 25 | #define QUADD_IO_VERSION_DYNAMIC_RB 5 | 25 | #define QUADD_IO_VERSION_DYNAMIC_RB 5 |
| 26 | #define QUADD_IO_VERSION_RB_MAX_FILL_COUNT 6 | 26 | #define QUADD_IO_VERSION_RB_MAX_FILL_COUNT 6 |
| 27 | #define QUADD_IO_VERSION_MOD_STATE_STATUS_FIELD 7 | 27 | #define QUADD_IO_VERSION_MOD_STATE_STATUS_FIELD 7 |
| 28 | #define QUADD_IO_VERSION_BT_KERNEL_CTX 8 | 28 | #define QUADD_IO_VERSION_BT_KERNEL_CTX 8 |
| 29 | #define QUADD_IO_VERSION_GET_MMAP 9 | 29 | #define QUADD_IO_VERSION_GET_MMAP 9 |
| 30 | #define QUADD_IO_VERSION_BT_UNWIND_TABLES 10 | ||
| 30 | 31 | ||
| 31 | #define QUADD_SAMPLE_VERSION_THUMB_MODE_FLAG 17 | 32 | #define QUADD_SAMPLE_VERSION_THUMB_MODE_FLAG 17 |
| 32 | #define QUADD_SAMPLE_VERSION_GROUP_SAMPLES 18 | 33 | #define QUADD_SAMPLE_VERSION_GROUP_SAMPLES 18 |
| 33 | #define QUADD_SAMPLE_VERSION_THREAD_STATE_FLD 19 | 34 | #define QUADD_SAMPLE_VERSION_THREAD_STATE_FLD 19 |
| 35 | #define QUADD_SAMPLE_VERSION_BT_UNWIND_TABLES 22 | ||
| 34 | 36 | ||
| 35 | #define QUADD_MAX_COUNTERS 32 | 37 | #define QUADD_MAX_COUNTERS 32 |
| 36 | #define QUADD_MAX_PROCESS 64 | 38 | #define QUADD_MAX_PROCESS 64 |
| @@ -73,8 +75,10 @@ | |||
| 73 | */ | 75 | */ |
| 74 | #define IOCTL_GET_VERSION _IOR(QUADD_IOCTL, 5, struct quadd_module_version) | 76 | #define IOCTL_GET_VERSION _IOR(QUADD_IOCTL, 5, struct quadd_module_version) |
| 75 | 77 | ||
| 76 | 78 | /* | |
| 77 | #define QUADD_HRT_SCHED_IN_FUNC "finish_task_switch" | 79 | * Send exception-handling tables info |
| 80 | */ | ||
| 81 | #define IOCTL_SET_EXTAB _IOW(QUADD_IOCTL, 6, struct quadd_extables) | ||
| 78 | 82 | ||
| 79 | #define QUADD_CPUMODE_TEGRA_POWER_CLUSTER_LP (1 << 29) /* LP CPU */ | 83 | #define QUADD_CPUMODE_TEGRA_POWER_CLUSTER_LP (1 << 29) /* LP CPU */ |
| 80 | #define QUADD_CPUMODE_THUMB (1 << 30) /* thumb mode */ | 84 | #define QUADD_CPUMODE_THUMB (1 << 30) /* thumb mode */ |
| @@ -132,6 +136,32 @@ typedef u32 quadd_bt_addr_t; | |||
| 132 | 136 | ||
| 133 | #pragma pack(push, 1) | 137 | #pragma pack(push, 1) |
| 134 | 138 | ||
| 139 | #define QUADD_SAMPLE_UNW_METHOD_SHIFT 0 | ||
| 140 | #define QUADD_SAMPLE_UNW_METHOD_MASK (1 << QUADD_SAMPLE_UNW_METHOD_SHIFT) | ||
| 141 | |||
| 142 | enum { | ||
| 143 | QUADD_UNW_METHOD_FP = 0, | ||
| 144 | QUADD_UNW_METHOD_EHT, | ||
| 145 | }; | ||
| 146 | |||
| 147 | #define QUADD_SAMPLE_URC_SHIFT 1 | ||
| 148 | #define QUADD_SAMPLE_URC_MASK (0x0f << QUADD_SAMPLE_URC_SHIFT) | ||
| 149 | |||
| 150 | enum { | ||
| 151 | QUADD_URC_SUCCESS = 0, | ||
| 152 | QUADD_URC_FAILURE, | ||
| 153 | QUADD_URC_IDX_NOT_FOUND, | ||
| 154 | QUADD_URC_TBL_NOT_EXIST, | ||
| 155 | QUADD_URC_EACCESS, | ||
| 156 | QUADD_URC_TBL_IS_CORRUPT, | ||
| 157 | QUADD_URC_CANTUNWIND, | ||
| 158 | QUADD_URC_UNHANDLED_INSTRUCTION, | ||
| 159 | QUADD_URC_REFUSE_TO_UNWIND, | ||
| 160 | QUADD_URC_SP_INCORRECT, | ||
| 161 | QUADD_URC_SPARE_ENCODING, | ||
| 162 | QUADD_URC_UNSUPPORTED_PR, | ||
| 163 | }; | ||
| 164 | |||
| 135 | struct quadd_sample_data { | 165 | struct quadd_sample_data { |
| 136 | u64 ip; | 166 | u64 ip; |
| 137 | u32 pid; | 167 | u32 pid; |
| @@ -260,7 +290,9 @@ enum { | |||
| 260 | QUADD_PARAM_IDX_EXTRA = 1, | 290 | QUADD_PARAM_IDX_EXTRA = 1, |
| 261 | }; | 291 | }; |
| 262 | 292 | ||
| 263 | #define QUADD_PARAM_IDX_EXTRA_GET_MMAP (1 << 0) | 293 | #define QUADD_PARAM_EXTRA_GET_MMAP (1 << 0) |
| 294 | #define QUADD_PARAM_EXTRA_BT_FP (1 << 1) | ||
| 295 | #define QUADD_PARAM_EXTRA_BT_UNWIND_TABLES (1 << 2) | ||
| 264 | 296 | ||
| 265 | struct quadd_parameters { | 297 | struct quadd_parameters { |
| 266 | u32 freq; | 298 | u32 freq; |
| @@ -306,6 +338,7 @@ enum { | |||
| 306 | #define QUADD_COMM_CAP_EXTRA_BT_KERNEL_CTX (1 << 0) | 338 | #define QUADD_COMM_CAP_EXTRA_BT_KERNEL_CTX (1 << 0) |
| 307 | #define QUADD_COMM_CAP_EXTRA_GET_MMAP (1 << 1) | 339 | #define QUADD_COMM_CAP_EXTRA_GET_MMAP (1 << 1) |
| 308 | #define QUADD_COMM_CAP_EXTRA_GROUP_SAMPLES (1 << 2) | 340 | #define QUADD_COMM_CAP_EXTRA_GROUP_SAMPLES (1 << 2) |
| 341 | #define QUADD_COMM_CAP_EXTRA_BT_UNWIND_TABLES (1 << 3) | ||
| 309 | 342 | ||
| 310 | struct quadd_comm_cap { | 343 | struct quadd_comm_cap { |
| 311 | u32 pmu:1, | 344 | u32 pmu:1, |
| @@ -348,6 +381,21 @@ struct quadd_module_version { | |||
| 348 | u32 reserved[4]; /* reserved fields for future extensions */ | 381 | u32 reserved[4]; /* reserved fields for future extensions */ |
| 349 | }; | 382 | }; |
| 350 | 383 | ||
| 384 | struct quadd_sec_info { | ||
| 385 | u64 addr; | ||
| 386 | u64 length; | ||
| 387 | }; | ||
| 388 | |||
| 389 | struct quadd_extables { | ||
| 390 | u64 vm_start; | ||
| 391 | u64 vm_end; | ||
| 392 | |||
| 393 | struct quadd_sec_info extab; | ||
| 394 | struct quadd_sec_info exidx; | ||
| 395 | |||
| 396 | u32 reserved[4]; /* reserved fields for future extensions */ | ||
| 397 | }; | ||
| 398 | |||
| 351 | #pragma pack(pop) | 399 | #pragma pack(pop) |
| 352 | 400 | ||
| 353 | #ifdef __KERNEL__ | 401 | #ifdef __KERNEL__ |
