diff options
| author | Igor Nabirushkin <inabirushkin@nvidia.com> | 2019-02-25 06:52:32 -0500 |
|---|---|---|
| committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2019-04-11 16:42:52 -0400 |
| commit | 68303a6bdeb9ac5fd193941b61dc8a2246d014d3 (patch) | |
| tree | 39745f520f96d6476e6cc1067f73a7e5adfb5c02 /include | |
| parent | 9d1f5e243d40759e6eaed6b2d03ae7559b9da600 (diff) | |
misc: tegra-profiler: add task comm events
Add task COMM events:
- Add support for quadd_event_comm() callback.
- Send task COMM events to userspace.
Bug 2514095
Jira DTSP-2432
Change-Id: Id5b92f544497b69098e3b16bf82baf0f6abb77e1
Signed-off-by: Igor Nabirushkin <inabirushkin@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/2027490
(cherry picked from commit a0c0d3bf9eeabbdad2a43b768235e1cc846b04ef)
Reviewed-on: https://git-master.nvidia.com/r/2093405
GVS: Gerrit_Virtual_Submit
Reviewed-by: Roman Rybalko <rrybalko@nvidia.com>
Reviewed-by: Bibek Basu <bbasu@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/tegra_profiler.h | 10 | ||||
| -rw-r--r-- | include/uapi/linux/tegra_profiler.h | 179 |
2 files changed, 106 insertions, 83 deletions
diff --git a/include/linux/tegra_profiler.h b/include/linux/tegra_profiler.h index c55f25b57..edca37b25 100644 --- a/include/linux/tegra_profiler.h +++ b/include/linux/tegra_profiler.h | |||
| @@ -31,6 +31,7 @@ extern void __quadd_task_sched_out(struct task_struct *prev, | |||
| 31 | extern void __quadd_event_mmap(struct vm_area_struct *vma); | 31 | extern void __quadd_event_mmap(struct vm_area_struct *vma); |
| 32 | extern void __quadd_event_fork(struct task_struct *task); | 32 | extern void __quadd_event_fork(struct task_struct *task); |
| 33 | extern void __quadd_event_exit(struct task_struct *task); | 33 | extern void __quadd_event_exit(struct task_struct *task); |
| 34 | extern void __quadd_event_comm(struct task_struct *task, bool exec); | ||
| 34 | 35 | ||
| 35 | static inline void quadd_task_sched_in(struct task_struct *prev, | 36 | static inline void quadd_task_sched_in(struct task_struct *prev, |
| 36 | struct task_struct *task) | 37 | struct task_struct *task) |
| @@ -59,6 +60,11 @@ static inline void quadd_event_exit(struct task_struct *task) | |||
| 59 | __quadd_event_exit(task); | 60 | __quadd_event_exit(task); |
| 60 | } | 61 | } |
| 61 | 62 | ||
| 63 | static inline void quadd_event_comm(struct task_struct *task, bool exec) | ||
| 64 | { | ||
| 65 | __quadd_event_comm(task, exec); | ||
| 66 | } | ||
| 67 | |||
| 62 | #else /* CONFIG_TEGRA_PROFILER */ | 68 | #else /* CONFIG_TEGRA_PROFILER */ |
| 63 | 69 | ||
| 64 | static inline void quadd_task_sched_in(struct task_struct *prev, | 70 | static inline void quadd_task_sched_in(struct task_struct *prev, |
| @@ -83,6 +89,10 @@ static inline void quadd_event_exit(struct task_struct *task) | |||
| 83 | { | 89 | { |
| 84 | } | 90 | } |
| 85 | 91 | ||
| 92 | static inline void quadd_event_comm(struct task_struct *task, bool exec) | ||
| 93 | { | ||
| 94 | } | ||
| 95 | |||
| 86 | #endif /* CONFIG_TEGRA_PROFILER */ | 96 | #endif /* CONFIG_TEGRA_PROFILER */ |
| 87 | 97 | ||
| 88 | #endif /* __TEGRA_PROFILER_H */ | 98 | #endif /* __TEGRA_PROFILER_H */ |
diff --git a/include/uapi/linux/tegra_profiler.h b/include/uapi/linux/tegra_profiler.h index 0e0c36f15..b05e46724 100644 --- a/include/uapi/linux/tegra_profiler.h +++ b/include/uapi/linux/tegra_profiler.h | |||
| @@ -20,71 +20,72 @@ | |||
| 20 | #include <linux/ioctl.h> | 20 | #include <linux/ioctl.h> |
| 21 | #include <linux/types.h> | 21 | #include <linux/types.h> |
| 22 | 22 | ||
| 23 | #define QUADD_SAMPLES_VERSION 46 | 23 | #define QUADD_SAMPLES_VERSION 47 |
| 24 | #define QUADD_IO_VERSION 26 | 24 | #define QUADD_IO_VERSION 26 |
| 25 | 25 | ||
| 26 | #define QUADD_IO_VERSION_DYNAMIC_RB 5 | 26 | #define QUADD_IO_VERSION_DYNAMIC_RB 5 |
| 27 | #define QUADD_IO_VERSION_RB_MAX_FILL_COUNT 6 | 27 | #define QUADD_IO_VERSION_RB_MAX_FILL_COUNT 6 |
| 28 | #define QUADD_IO_VERSION_MOD_STATE_STATUS_FIELD 7 | 28 | #define QUADD_IO_VERSION_MOD_STATE_STATUS_FIELD 7 |
| 29 | #define QUADD_IO_VERSION_BT_KERNEL_CTX 8 | 29 | #define QUADD_IO_VERSION_BT_KERNEL_CTX 8 |
| 30 | #define QUADD_IO_VERSION_GET_MMAP 9 | 30 | #define QUADD_IO_VERSION_GET_MMAP 9 |
| 31 | #define QUADD_IO_VERSION_BT_UNWIND_TABLES 10 | 31 | #define QUADD_IO_VERSION_BT_UNWIND_TABLES 10 |
| 32 | #define QUADD_IO_VERSION_UNWIND_MIXED 11 | 32 | #define QUADD_IO_VERSION_UNWIND_MIXED 11 |
| 33 | #define QUADD_IO_VERSION_EXTABLES_MMAP 12 | 33 | #define QUADD_IO_VERSION_EXTABLES_MMAP 12 |
| 34 | #define QUADD_IO_VERSION_ARCH_TIMER_OPT 13 | 34 | #define QUADD_IO_VERSION_ARCH_TIMER_OPT 13 |
| 35 | #define QUADD_IO_VERSION_DATA_MMAP 14 | 35 | #define QUADD_IO_VERSION_DATA_MMAP 14 |
| 36 | #define QUADD_IO_VERSION_BT_LOWER_BOUND 15 | 36 | #define QUADD_IO_VERSION_BT_LOWER_BOUND 15 |
| 37 | #define QUADD_IO_VERSION_STACK_OFFSET 16 | 37 | #define QUADD_IO_VERSION_STACK_OFFSET 16 |
| 38 | #define QUADD_IO_VERSION_SECTIONS_INFO 17 | 38 | #define QUADD_IO_VERSION_SECTIONS_INFO 17 |
| 39 | #define QUADD_IO_VERSION_UNW_METHODS_OPT 18 | 39 | #define QUADD_IO_VERSION_UNW_METHODS_OPT 18 |
| 40 | #define QUADD_IO_VERSION_PER_CPU_SETUP 19 | 40 | #define QUADD_IO_VERSION_PER_CPU_SETUP 19 |
| 41 | #define QUADD_IO_VERSION_TRACE_ALL_TASKS 20 | 41 | #define QUADD_IO_VERSION_TRACE_ALL_TASKS 20 |
| 42 | #define QUADD_IO_VERSION_CB_POWER_OF_2 21 | 42 | #define QUADD_IO_VERSION_CB_POWER_OF_2 21 |
| 43 | #define QUADD_IO_VERSION_RAW_EVENTS 22 | 43 | #define QUADD_IO_VERSION_RAW_EVENTS 22 |
| 44 | #define QUADD_IO_VERSION_SAMPLING_MODE 23 | 44 | #define QUADD_IO_VERSION_SAMPLING_MODE 23 |
| 45 | #define QUADD_IO_VERSION_FORCE_ARCH_TIMER 24 | 45 | #define QUADD_IO_VERSION_FORCE_ARCH_TIMER 24 |
| 46 | #define QUADD_IO_VERSION_SAMPLE_ALL_TASKS 25 | 46 | #define QUADD_IO_VERSION_SAMPLE_ALL_TASKS 25 |
| 47 | #define QUADD_IO_VERSION_EXTABLES_PID 26 | 47 | #define QUADD_IO_VERSION_EXTABLES_PID 26 |
| 48 | 48 | ||
| 49 | #define QUADD_SAMPLE_VERSION_THUMB_MODE_FLAG 17 | 49 | #define QUADD_SAMPLE_VERSION_THUMB_MODE_FLAG 17 |
| 50 | #define QUADD_SAMPLE_VERSION_GROUP_SAMPLES 18 | 50 | #define QUADD_SAMPLE_VERSION_GROUP_SAMPLES 18 |
| 51 | #define QUADD_SAMPLE_VERSION_THREAD_STATE_FLD 19 | 51 | #define QUADD_SAMPLE_VERSION_THREAD_STATE_FLD 19 |
| 52 | #define QUADD_SAMPLE_VERSION_BT_UNWIND_TABLES 22 | 52 | #define QUADD_SAMPLE_VERSION_BT_UNWIND_TABLES 22 |
| 53 | #define QUADD_SAMPLE_VERSION_SUPPORT_IP64 23 | 53 | #define QUADD_SAMPLE_VERSION_SUPPORT_IP64 23 |
| 54 | #define QUADD_SAMPLE_VERSION_SPECIAL_MMAP 24 | 54 | #define QUADD_SAMPLE_VERSION_SPECIAL_MMAP 24 |
| 55 | #define QUADD_SAMPLE_VERSION_UNWIND_MIXED 25 | 55 | #define QUADD_SAMPLE_VERSION_UNWIND_MIXED 25 |
| 56 | #define QUADD_SAMPLE_VERSION_UNW_ENTRY_TYPE 26 | 56 | #define QUADD_SAMPLE_VERSION_UNW_ENTRY_TYPE 26 |
| 57 | #define QUADD_SAMPLE_VERSION_USE_ARCH_TIMER 27 | 57 | #define QUADD_SAMPLE_VERSION_USE_ARCH_TIMER 27 |
| 58 | #define QUADD_SAMPLE_VERSION_SCHED_SAMPLES 28 | 58 | #define QUADD_SAMPLE_VERSION_SCHED_SAMPLES 28 |
| 59 | #define QUADD_SAMPLE_VERSION_HDR_UNW_METHOD 29 | 59 | #define QUADD_SAMPLE_VERSION_HDR_UNW_METHOD 29 |
| 60 | #define QUADD_SAMPLE_VERSION_HDR_ARCH_TIMER 30 | 60 | #define QUADD_SAMPLE_VERSION_HDR_ARCH_TIMER 30 |
| 61 | #define QUADD_SAMPLE_VERSION_STACK_OFFSET 31 | 61 | #define QUADD_SAMPLE_VERSION_STACK_OFFSET 31 |
| 62 | #define QUADD_SAMPLE_VERSION_SCHED_TASK_STATE 32 | 62 | #define QUADD_SAMPLE_VERSION_SCHED_TASK_STATE 32 |
| 63 | #define QUADD_SAMPLE_VERSION_URCS 33 | 63 | #define QUADD_SAMPLE_VERSION_URCS 33 |
| 64 | #define QUADD_SAMPLE_VERSION_HOTPLUG 34 | 64 | #define QUADD_SAMPLE_VERSION_HOTPLUG 34 |
| 65 | #define QUADD_SAMPLE_VERSION_PER_CPU_SETUP 35 | 65 | #define QUADD_SAMPLE_VERSION_PER_CPU_SETUP 35 |
| 66 | #define QUADD_SAMPLE_VERSION_REPORT_TGID 36 | 66 | #define QUADD_SAMPLE_VERSION_REPORT_TGID 36 |
| 67 | #define QUADD_SAMPLE_VERSION_MMAP_TS 37 | 67 | #define QUADD_SAMPLE_VERSION_MMAP_TS 37 |
| 68 | #define QUADD_SAMPLE_VERSION_RAW_EVENTS 38 | 68 | #define QUADD_SAMPLE_VERSION_RAW_EVENTS 38 |
| 69 | #define QUADD_SAMPLE_VERSION_OVERHEAD_INFO 39 | 69 | #define QUADD_SAMPLE_VERSION_OVERHEAD_INFO 39 |
| 70 | #define QUADD_SAMPLE_VERSION_REPORT_VPID 40 | 70 | #define QUADD_SAMPLE_VERSION_REPORT_VPID 40 |
| 71 | #define QUADD_SAMPLE_VERSION_SCHED_REPORT_VPID 41 | 71 | #define QUADD_SAMPLE_VERSION_SCHED_REPORT_VPID 41 |
| 72 | #define QUADD_SAMPLE_VERSION_SAMPLING_MODE 42 | 72 | #define QUADD_SAMPLE_VERSION_SAMPLING_MODE 42 |
| 73 | #define QUADD_SAMPLE_VERSION_SAMPLE_ALL_TASKS 43 | 73 | #define QUADD_SAMPLE_VERSION_SAMPLE_ALL_TASKS 43 |
| 74 | #define QUADD_SAMPLE_VERSION_KTHREAD_TSK_FLAG 44 | 74 | #define QUADD_SAMPLE_VERSION_KTHREAD_TSK_FLAG 44 |
| 75 | #define QUADD_SAMPLE_VERSION_MMAP_CPUID 45 | 75 | #define QUADD_SAMPLE_VERSION_MMAP_CPUID 45 |
| 76 | #define QUADD_SAMPLE_VERSION_PCLK_SEND_CHANGES 46 | 76 | #define QUADD_SAMPLE_VERSION_PCLK_SEND_CHANGES 46 |
| 77 | 77 | #define QUADD_SAMPLE_VERSION_COMM_SAMPLES 47 | |
| 78 | #define QUADD_MMAP_HEADER_VERSION 1 | 78 | |
| 79 | 79 | #define QUADD_MMAP_HEADER_VERSION 1 | |
| 80 | #define QUADD_MAX_COUNTERS 32 | 80 | |
| 81 | #define QUADD_MAX_PROCESS 64 | 81 | #define QUADD_MAX_COUNTERS 32 |
| 82 | 82 | #define QUADD_MAX_PROCESS 64 | |
| 83 | #define QUADD_DEVICE_NAME "quadd" | 83 | |
| 84 | #define QUADD_AUTH_DEVICE_NAME "quadd_auth" | 84 | #define QUADD_DEVICE_NAME "quadd" |
| 85 | 85 | #define QUADD_AUTH_DEVICE_NAME "quadd_auth" | |
| 86 | #define QUADD_MOD_DEVICE_NAME "quadd_mod" | 86 | |
| 87 | #define QUADD_MOD_AUTH_DEVICE_NAME "quadd_mod_auth" | 87 | #define QUADD_MOD_DEVICE_NAME "quadd_mod" |
| 88 | #define QUADD_MOD_AUTH_DEVICE_NAME "quadd_mod_auth" | ||
| 88 | 89 | ||
| 89 | #define QUADD_IOCTL 100 | 90 | #define QUADD_IOCTL 100 |
| 90 | 91 | ||
| @@ -345,6 +346,17 @@ enum { | |||
| 345 | QM_DEBUG_SAMPLE_TYPE_SOURCE_STOP, | 346 | QM_DEBUG_SAMPLE_TYPE_SOURCE_STOP, |
| 346 | }; | 347 | }; |
| 347 | 348 | ||
| 349 | #define QUADD_COMM_FLAG_EXEC (1U << 0) | ||
| 350 | |||
| 351 | struct quadd_comm_data { | ||
| 352 | __u32 pid; | ||
| 353 | __u32 tgid; | ||
| 354 | __u64 time; | ||
| 355 | |||
| 356 | __u16 length; | ||
| 357 | __u32 flags; | ||
| 358 | }; | ||
| 359 | |||
| 348 | struct quadd_debug_data { | 360 | struct quadd_debug_data { |
| 349 | __u8 type; | 361 | __u8 type; |
| 350 | 362 | ||
| @@ -414,6 +426,7 @@ struct quadd_record_data { | |||
| 414 | struct quadd_power_rate_data power_rate; | 426 | struct quadd_power_rate_data power_rate; |
| 415 | struct quadd_hotplug_data hotplug; | 427 | struct quadd_hotplug_data hotplug; |
| 416 | struct quadd_sched_data sched; | 428 | struct quadd_sched_data sched; |
| 429 | struct quadd_comm_data comm; | ||
| 417 | struct quadd_additional_sample additional_sample; | 430 | struct quadd_additional_sample additional_sample; |
| 418 | }; | 431 | }; |
| 419 | } __aligned(4); | 432 | } __aligned(4); |
| @@ -457,34 +470,34 @@ struct quadd_event { | |||
| 457 | }; | 470 | }; |
| 458 | 471 | ||
| 459 | struct quadd_parameters { | 472 | struct quadd_parameters { |
| 460 | __u32 freq; | 473 | __u32 freq; |
| 461 | __u32 ma_freq; | 474 | __u32 ma_freq; |
| 462 | __u32 power_rate_freq; | 475 | __u32 power_rate_freq; |
| 463 | 476 | ||
| 464 | __u64 backtrace:1, | 477 | __u64 backtrace:1, |
| 465 | use_freq:1, | 478 | use_freq:1, |
| 466 | system_wide:1, | 479 | system_wide:1, |
| 467 | debug_samples:1, | 480 | debug_samples:1, |
| 468 | trace_all_tasks:1; | 481 | trace_all_tasks:1; |
| 469 | 482 | ||
| 470 | __u32 pids[QUADD_MAX_PROCESS]; | 483 | __u32 pids[QUADD_MAX_PROCESS]; |
| 471 | __u32 nr_pids; | 484 | __u32 nr_pids; |
| 472 | 485 | ||
| 473 | __u8 package_name[QUADD_MAX_PACKAGE_NAME]; | 486 | __u8 package_name[QUADD_MAX_PACKAGE_NAME]; |
| 474 | 487 | ||
| 475 | struct quadd_event events[QUADD_MAX_COUNTERS]; | 488 | struct quadd_event events[QUADD_MAX_COUNTERS]; |
| 476 | __u32 nr_events; | 489 | __u32 nr_events; |
| 477 | 490 | ||
| 478 | __u32 reserved[16]; /* reserved fields for future extensions */ | 491 | __u32 reserved[16]; /* reserved fields for future extensions */ |
| 479 | }; | 492 | }; |
| 480 | 493 | ||
| 481 | struct quadd_pmu_setup_for_cpu { | 494 | struct quadd_pmu_setup_for_cpu { |
| 482 | __u32 cpuid; | 495 | __u32 cpuid; |
| 483 | 496 | ||
| 484 | struct quadd_event events[QUADD_MAX_COUNTERS]; | 497 | struct quadd_event events[QUADD_MAX_COUNTERS]; |
| 485 | __u32 nr_events; | 498 | __u32 nr_events; |
| 486 | 499 | ||
| 487 | __u32 reserved[16]; | 500 | __u32 reserved[16]; |
| 488 | }; | 501 | }; |
| 489 | 502 | ||
| 490 | struct quadd_events_cap { | 503 | struct quadd_events_cap { |
