Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

powerpc/perf: Pass the struct perf_events down to compute_mmcr()

To support per-event exclude settings on Power8 we need access to the
struct perf_events in compute_mmcr().

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>

authored by

Michael Ellerman and committed by
Benjamin Herrenschmidt
8abd818f 79a4cb28

+16 -11
+4 -1
arch/powerpc/include/asm/perf_event_server.h
··· 19 19 #define MAX_EVENT_ALTERNATIVES 8 20 20 #define MAX_LIMITED_HWCOUNTERS 2 21 21 22 + struct perf_event; 23 + 22 24 /* 23 25 * This struct provides the constants and functions needed to 24 26 * describe the PMU on a particular POWER-family CPU. ··· 32 30 unsigned long add_fields; 33 31 unsigned long test_adder; 34 32 int (*compute_mmcr)(u64 events[], int n_ev, 35 - unsigned int hwc[], unsigned long mmcr[]); 33 + unsigned int hwc[], unsigned long mmcr[], 34 + struct perf_event *pevents[]); 36 35 int (*get_constraint)(u64 event_id, unsigned long *mskp, 37 36 unsigned long *valp); 38 37 int (*get_alternatives)(u64 event_id, unsigned int flags,
+1 -1
arch/powerpc/perf/core-book3s.c
··· 1224 1224 memset(cpuhw->mmcr, 0, sizeof(cpuhw->mmcr)); 1225 1225 1226 1226 if (ppmu->compute_mmcr(cpuhw->events, cpuhw->n_events, hwc_index, 1227 - cpuhw->mmcr)) { 1227 + cpuhw->mmcr, cpuhw->event)) { 1228 1228 /* shouldn't ever get here */ 1229 1229 printk(KERN_ERR "oops compute_mmcr failed\n"); 1230 1230 goto out;
+3 -2
arch/powerpc/perf/mpc7450-pmu.c
··· 260 260 /* 261 261 * Compute MMCR0/1/2 values for a set of events. 262 262 */ 263 - static int mpc7450_compute_mmcr(u64 event[], int n_ev, 264 - unsigned int hwc[], unsigned long mmcr[]) 263 + static int mpc7450_compute_mmcr(u64 event[], int n_ev, unsigned int hwc[], 264 + unsigned long mmcr[], 265 + struct perf_event *pevents[]) 265 266 { 266 267 u8 event_index[N_CLASSES][N_COUNTER]; 267 268 int n_classevent[N_CLASSES];
+1 -1
arch/powerpc/perf/power4-pmu.c
··· 356 356 } 357 357 358 358 static int p4_compute_mmcr(u64 event[], int n_ev, 359 - unsigned int hwc[], unsigned long mmcr[]) 359 + unsigned int hwc[], unsigned long mmcr[], struct perf_event *pevents[]) 360 360 { 361 361 unsigned long mmcr0 = 0, mmcr1 = 0, mmcra = 0; 362 362 unsigned int pmc, unit, byte, psel, lower;
+1 -1
arch/powerpc/perf/power5+-pmu.c
··· 452 452 } 453 453 454 454 static int power5p_compute_mmcr(u64 event[], int n_ev, 455 - unsigned int hwc[], unsigned long mmcr[]) 455 + unsigned int hwc[], unsigned long mmcr[], struct perf_event *pevents[]) 456 456 { 457 457 unsigned long mmcr1 = 0; 458 458 unsigned long mmcra = 0;
+1 -1
arch/powerpc/perf/power5-pmu.c
··· 383 383 } 384 384 385 385 static int power5_compute_mmcr(u64 event[], int n_ev, 386 - unsigned int hwc[], unsigned long mmcr[]) 386 + unsigned int hwc[], unsigned long mmcr[], struct perf_event *pevents[]) 387 387 { 388 388 unsigned long mmcr1 = 0; 389 389 unsigned long mmcra = MMCRA_SDAR_DCACHE_MISS | MMCRA_SDAR_ERAT_MISS;
+1 -1
arch/powerpc/perf/power6-pmu.c
··· 175 175 * Assign PMC numbers and compute MMCR1 value for a set of events 176 176 */ 177 177 static int p6_compute_mmcr(u64 event[], int n_ev, 178 - unsigned int hwc[], unsigned long mmcr[]) 178 + unsigned int hwc[], unsigned long mmcr[], struct perf_event *pevents[]) 179 179 { 180 180 unsigned long mmcr1 = 0; 181 181 unsigned long mmcra = MMCRA_SDAR_DCACHE_MISS | MMCRA_SDAR_ERAT_MISS;
+1 -1
arch/powerpc/perf/power7-pmu.c
··· 245 245 } 246 246 247 247 static int power7_compute_mmcr(u64 event[], int n_ev, 248 - unsigned int hwc[], unsigned long mmcr[]) 248 + unsigned int hwc[], unsigned long mmcr[], struct perf_event *pevents[]) 249 249 { 250 250 unsigned long mmcr1 = 0; 251 251 unsigned long mmcra = MMCRA_SDAR_DCACHE_MISS | MMCRA_SDAR_ERAT_MISS;
+2 -1
arch/powerpc/perf/power8-pmu.c
··· 393 393 } 394 394 395 395 static int power8_compute_mmcr(u64 event[], int n_ev, 396 - unsigned int hwc[], unsigned long mmcr[]) 396 + unsigned int hwc[], unsigned long mmcr[], 397 + struct perf_event *pevents[]) 397 398 { 398 399 unsigned long mmcra, mmcr1, unit, combine, psel, cache, val; 399 400 unsigned int pmc, pmc_inuse;
+1 -1
arch/powerpc/perf/ppc970-pmu.c
··· 257 257 } 258 258 259 259 static int p970_compute_mmcr(u64 event[], int n_ev, 260 - unsigned int hwc[], unsigned long mmcr[]) 260 + unsigned int hwc[], unsigned long mmcr[], struct perf_event *pevents[]) 261 261 { 262 262 unsigned long mmcr0 = 0, mmcr1 = 0, mmcra = 0; 263 263 unsigned int pmc, unit, byte, psel;