mem-events.c (abe9544ea78a2e0c3cc92b4410a57a9c0732293f) | mem-events.c (1eaf496ed386934f1c2439a120fe84a05194f91a) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2#include <stddef.h> 3#include <stdlib.h> 4#include <string.h> 5#include <errno.h> 6#include <sys/types.h> 7#include <sys/stat.h> 8#include <unistd.h> 9#include <api/fs/fs.h> 10#include <linux/kernel.h> 11#include "map_symbol.h" 12#include "mem-events.h" 13#include "debug.h" 14#include "symbol.h" 15#include "pmu.h" | 1// SPDX-License-Identifier: GPL-2.0 2#include <stddef.h> 3#include <stdlib.h> 4#include <string.h> 5#include <errno.h> 6#include <sys/types.h> 7#include <sys/stat.h> 8#include <unistd.h> 9#include <api/fs/fs.h> 10#include <linux/kernel.h> 11#include "map_symbol.h" 12#include "mem-events.h" 13#include "debug.h" 14#include "symbol.h" 15#include "pmu.h" |
16#include "pmus.h" |
|
16 17unsigned int perf_mem_events__loads_ldlat = 30; 18 19#define E(t, n, s) { .tag = t, .name = n, .sysfs_name = s } 20 21static struct perf_mem_event perf_mem_events[PERF_MEM_EVENTS__MAX] = { 22 E("ldlat-loads", "cpu/mem-loads,ldlat=%u/P", "cpu/events/mem-loads"), 23 E("ldlat-stores", "cpu/mem-stores/P", "cpu/events/mem-stores"), --- 99 unchanged lines hidden (view full) --- 123 124 /* 125 * If the event entry isn't valid, skip initialization 126 * and "e->supported" will keep false. 127 */ 128 if (!e->tag) 129 continue; 130 | 17 18unsigned int perf_mem_events__loads_ldlat = 30; 19 20#define E(t, n, s) { .tag = t, .name = n, .sysfs_name = s } 21 22static struct perf_mem_event perf_mem_events[PERF_MEM_EVENTS__MAX] = { 23 E("ldlat-loads", "cpu/mem-loads,ldlat=%u/P", "cpu/events/mem-loads"), 24 E("ldlat-stores", "cpu/mem-stores/P", "cpu/events/mem-stores"), --- 99 unchanged lines hidden (view full) --- 124 125 /* 126 * If the event entry isn't valid, skip initialization 127 * and "e->supported" will keep false. 128 */ 129 if (!e->tag) 130 continue; 131 |
131 if (!perf_pmu__has_hybrid()) { | 132 if (!perf_pmus__has_hybrid()) { |
132 scnprintf(sysfs_name, sizeof(sysfs_name), 133 e->sysfs_name, "cpu"); 134 e->supported = perf_mem_event__supported(mnt, sysfs_name); 135 } else { 136 struct perf_pmu *pmu = NULL; 137 | 133 scnprintf(sysfs_name, sizeof(sysfs_name), 134 e->sysfs_name, "cpu"); 135 e->supported = perf_mem_event__supported(mnt, sysfs_name); 136 } else { 137 struct perf_pmu *pmu = NULL; 138 |
138 while ((pmu = perf_pmu__scan(pmu)) != NULL) { | 139 while ((pmu = perf_pmus__scan(pmu)) != NULL) { |
139 if (!pmu->is_core) 140 continue; 141 142 scnprintf(sysfs_name, sizeof(sysfs_name), 143 e->sysfs_name, pmu->name); 144 e->supported |= perf_mem_event__supported(mnt, sysfs_name); 145 } 146 } --- 23 unchanged lines hidden (view full) --- 170 171static void perf_mem_events__print_unsupport_hybrid(struct perf_mem_event *e, 172 int idx) 173{ 174 const char *mnt = sysfs__mount(); 175 char sysfs_name[100]; 176 struct perf_pmu *pmu = NULL; 177 | 140 if (!pmu->is_core) 141 continue; 142 143 scnprintf(sysfs_name, sizeof(sysfs_name), 144 e->sysfs_name, pmu->name); 145 e->supported |= perf_mem_event__supported(mnt, sysfs_name); 146 } 147 } --- 23 unchanged lines hidden (view full) --- 171 172static void perf_mem_events__print_unsupport_hybrid(struct perf_mem_event *e, 173 int idx) 174{ 175 const char *mnt = sysfs__mount(); 176 char sysfs_name[100]; 177 struct perf_pmu *pmu = NULL; 178 |
178 while ((pmu = perf_pmu__scan(pmu)) != NULL) { | 179 while ((pmu = perf_pmus__scan(pmu)) != NULL) { |
179 if (!pmu->is_core) 180 continue; 181 182 scnprintf(sysfs_name, sizeof(sysfs_name), e->sysfs_name, 183 pmu->name); 184 if (!perf_mem_event__supported(mnt, sysfs_name)) { 185 pr_err("failed: event '%s' not supported\n", 186 perf_mem_events__name(idx, pmu->name)); --- 9 unchanged lines hidden (view full) --- 196 struct perf_pmu *pmu; 197 char *s; 198 199 for (int j = 0; j < PERF_MEM_EVENTS__MAX; j++) { 200 e = perf_mem_events__ptr(j); 201 if (!e->record) 202 continue; 203 | 180 if (!pmu->is_core) 181 continue; 182 183 scnprintf(sysfs_name, sizeof(sysfs_name), e->sysfs_name, 184 pmu->name); 185 if (!perf_mem_event__supported(mnt, sysfs_name)) { 186 pr_err("failed: event '%s' not supported\n", 187 perf_mem_events__name(idx, pmu->name)); --- 9 unchanged lines hidden (view full) --- 197 struct perf_pmu *pmu; 198 char *s; 199 200 for (int j = 0; j < PERF_MEM_EVENTS__MAX; j++) { 201 e = perf_mem_events__ptr(j); 202 if (!e->record) 203 continue; 204 |
204 if (!perf_pmu__has_hybrid()) { | 205 if (!perf_pmus__has_hybrid()) { |
205 if (!e->supported) { 206 pr_err("failed: event '%s' not supported\n", 207 perf_mem_events__name(j, NULL)); 208 return -1; 209 } 210 211 rec_argv[i++] = "-e"; 212 rec_argv[i++] = perf_mem_events__name(j, NULL); 213 } else { 214 if (!e->supported) { 215 perf_mem_events__print_unsupport_hybrid(e, j); 216 return -1; 217 } 218 | 206 if (!e->supported) { 207 pr_err("failed: event '%s' not supported\n", 208 perf_mem_events__name(j, NULL)); 209 return -1; 210 } 211 212 rec_argv[i++] = "-e"; 213 rec_argv[i++] = perf_mem_events__name(j, NULL); 214 } else { 215 if (!e->supported) { 216 perf_mem_events__print_unsupport_hybrid(e, j); 217 return -1; 218 } 219 |
219 while ((pmu = perf_pmu__scan(pmu)) != NULL) { | 220 while ((pmu = perf_pmus__scan(pmu)) != NULL) { |
220 if (!pmu->is_core) 221 continue; 222 rec_argv[i++] = "-e"; 223 s = perf_mem_events__name(j, pmu->name); 224 if (s) { 225 s = strdup(s); 226 if (!s) 227 return -1; --- 486 unchanged lines hidden --- | 221 if (!pmu->is_core) 222 continue; 223 rec_argv[i++] = "-e"; 224 s = perf_mem_events__name(j, pmu->name); 225 if (s) { 226 s = strdup(s); 227 if (!s) 228 return -1; --- 486 unchanged lines hidden --- |