Re: [PATCH] Update Alpha EV67 CPU support and remove all other Alpha CPU support
Maynard Johnson <[email protected]>
| Newsgroups | gmane.linux.oprofile |
|---|---|
| Message-ID | <[email protected]> |
On 08/15/2014 05:39 AM, Michael Cree wrote: > Only the EV67 and later CPUs are supported by the kernel performance > events. Remove all older Alpha CPU support and update EV67 support > to match the kernel implementation. > Michael, As you mentioned in your other posting (preceding this patch posting), testing this patch with operf fails with "perf_event_open failed with Operation not permitted". Looking through kernel code in arch/alpha/kernel/perf_events.c, the only EPERM I see is where it checks if any mode exclusion is done. And in fact, we do automatically exclude hypervisor because oprofile post-processing tools and ocount have no support for showing/not showing hypervisor counts. So I think it's a good bet that this is what's causing your failure. Normally, I would want to ensure a patch actually *works* before committing it, but I really want to get the 1.0 release candidate out today, so I'll take a chance. If you still have problems, we'll fix them post-RC1, and I'll have to do an RC2. Not a big deal. So, the upshot is I committed this patch upstream. Thanks much for your efforts! -Maynard > Signed-off-by: Michael Cree <[email protected]> > --- > events/Makefile.am | 4 ---- > events/alpha/ev4/events | 18 -------------- > events/alpha/ev4/unit_masks | 4 ---- > events/alpha/ev5/events | 49 --------------------------------------- > events/alpha/ev5/unit_masks | 4 ---- > events/alpha/ev6/events | 11 --------- > events/alpha/ev6/unit_masks | 4 ---- > events/alpha/ev67/events | 29 ++++------------------- > events/alpha/pca56/events | 2 -- > events/alpha/pca56/unit_masks | 3 --- > libop/op_cpu_type.c | 31 +++++++++++++++++++++---- > libop/op_cpu_type.h | 4 ---- > libop/op_events.c | 5 +--- > libop/op_hw_config.h | 4 ---- > libop/tests/alloc_counter_tests.c | 15 ------------ > libop/tests/cpu_type_tests.c | 4 ---- > utils/ophelp.c | 4 ---- > 17 files changed, 32 insertions(+), 163 deletions(-) > delete mode 100644 events/alpha/ev4/events > delete mode 100644 events/alpha/ev4/unit_masks > delete mode 100644 events/alpha/ev5/events > delete mode 100644 events/alpha/ev5/unit_masks > delete mode 100644 events/alpha/ev6/events > delete mode 100644 events/alpha/ev6/unit_masks > delete mode 100644 events/alpha/pca56/events > delete mode 100644 events/alpha/pca56/unit_masks > > diff --git a/events/Makefile.am b/events/Makefile.am > index 14531cd..d68f0e8 100644 > --- a/events/Makefile.am > +++ b/events/Makefile.am > @@ -1,9 +1,5 @@ > event_files = \ > - alpha/ev4/events alpha/ev4/unit_masks \ > - alpha/ev5/events alpha/ev5/unit_masks \ > alpha/ev67/events alpha/ev67/unit_masks \ > - alpha/ev6/events alpha/ev6/unit_masks \ > - alpha/pca56/events alpha/pca56/unit_masks \ > i386/athlon/events i386/athlon/unit_masks \ > i386/core_2/events i386/core_2/unit_masks \ > i386/p4/events i386/p4-ht/events \ > diff --git a/events/alpha/ev4/events b/events/alpha/ev4/events > deleted file mode 100644 > index 8b193d1..0000000 > --- a/events/alpha/ev4/events > +++ /dev/null > @@ -1,18 +0,0 @@ > -# Alpha EV4 events. > -# > -event:0x00 counters:0 um:zero minimum:4096 name:ISSUES : Total issues divided by 2 > -event:0x02 counters:0 um:zero minimum:4096 name:PIPELINE_DRY : Nothing issued, no valid I-stream data > -event:0x04 counters:0 um:zero minimum:4096 name:LOAD_INSNS : All load instructions > -event:0x06 counters:0 um:zero minimum:4096 name:PIPELINE_FROZEN : Nothing issued, resource conflict > -event:0x08 counters:0 um:zero minimum:4096 name:BRANCH_INSNS : All branches (conditional, unconditional, jsr, hw_rei) > -event:0x0a counters:0 um:zero minimum:4096 name:CYCLES : Total cycles > -event:0x0b counters:0 um:zero minimum:4096 name:PAL_MODE : Cycles while in PALcode environment > -event:0x0c counters:0 um:zero minimum:4096 name:NON_ISSUES : Total nonissues divided by 2 > -event:0x10 counters:0 um:zero minimum:256 name:DCACHE_MISSES : Total D-cache misses > -event:0x11 counters:0 um:zero minimum:256 name:ICACHE_MISSES : Total I-cache misses > -event:0x12 counters:0 um:zero minimum:256 name:DUAL_ISSUE_CYCLES : Cycles of dual issue > -event:0x13 counters:0 um:zero minimum:256 name:BRANCH_MISPREDICTS : Branch mispredicts (conditional, jsr, hw_rei) > -event:0x14 counters:0 um:zero minimum:256 name:FP_INSNS : FP operate instructions (not br, load, store) > -event:0x15 counters:0 um:zero minimum:256 name:INTEGER_OPERATE : Integer operate instructions > -event:0x16 counters:0 um:zero minimum:256 name:STORE_INSNS : Store instructions > -# There's also EXTERNAL, by which we could monitor the 21066/21068 bus controller. > diff --git a/events/alpha/ev4/unit_masks b/events/alpha/ev4/unit_masks > deleted file mode 100644 > index bc77cc8..0000000 > --- a/events/alpha/ev4/unit_masks > +++ /dev/null > @@ -1,4 +0,0 @@ > -# Alpha EV4 possible unit masks > -# > -name:zero type:mandatory default:0x0 > - 0x0 No unit mask > diff --git a/events/alpha/ev5/events b/events/alpha/ev5/events > deleted file mode 100644 > index 709e06a..0000000 > --- a/events/alpha/ev5/events > +++ /dev/null > @@ -1,49 +0,0 @@ > -# Alpha EV5 events > -# > -event:0x00 counters:0,2 um:zero minimum:256 name:CYCLES : Total cycles > -event:0x01 counters:0 um:zero minimum:256 name:ISSUES : Total issues > -event:0x02 counters:1 um:zero minimum:256 name:NON_ISSUE_CYCLES : Nothing issued, pipeline frozen > -event:0x03 counters:1 um:zero minimum:256 name:SPLIT_ISSUE_CYCLES : Some but not all issuable instructions issued > -event:0x04 counters:1 um:zero minimum:256 name:PIPELINE_DRY : Nothing issued, pipeline dry > -event:0x05 counters:1 um:zero minimum:256 name:REPLAY_TRAP : Replay traps (ldu, wb/maf, litmus test) > -event:0x06 counters:1 um:zero minimum:256 name:SINGLE_ISSUE_CYCLES : Single issue cycles > -event:0x07 counters:1 um:zero minimum:256 name:DUAL_ISSUE_CYCLES : Dual issue cycles > -event:0x08 counters:1 um:zero minimum:256 name:TRIPLE_ISSUE_CYCLES : Triple issue cycles > -event:0x09 counters:1 um:zero minimum:256 name:QUAD_ISSUE_CYCLES : Quad issue cycles > -event:0x0a counters:1 um:zero minimum:256 name:FLOW_CHANGE : Flow change (meaning depends on counter 2) > -# ??? This one's dependent on the value in PCSEL2: If measuring PC_MISPR, > -# this is jsr-ret instructions, if measuring BRANCH_MISPREDICTS, this is > -# conditional branches, otherwise this is all branch insns, including hw_rei. > -event:0x0b counters:1 um:zero minimum:256 name:INTEGER_OPERATE : Integer operate instructions > -event:0x0c counters:1 um:zero minimum:256 name:FP_INSNS : FP operate instructions (not br, load, store) > -# FIXME: Bug carried over > -event:0x0c counters:1 um:zero minimum:256 name:LOAD_INSNS : Load instructions > -event:0x0d counters:1 um:zero minimum:256 name:STORE_INSNS : Store instructions > -event:0x0e counters:1 um:zero minimum:256 name:ICACHE_ACCESS : Instruction cache access > -event:0x0f um:zero minimum:256 name:DCACHE_ACCESS : Data cache access > -event:0x10 counters:2 um:zero minimum:256 name:LONG_STALLS : Stalls longer than 15 cycles > -event:0x11 counters:2 um:zero minimum:256 name:PC_MISPR : PC mispredicts > -event:0x12 counters:2 um:zero minimum:256 name:BRANCH_MISPREDICTS : Branch mispredicts > -event:0x13 counters:2 um:zero minimum:256 name:ICACHE_MISSES : Instruction cache misses > -event:0x14 counters:2 um:zero minimum:256 name:ITB_MISS : Instruction TLB miss > -event:0x15 counters:2 um:zero minimum:256 name:DCACHE_MISSES : Data cache misses > -event:0x16 counters:2 um:zero minimum:256 name:DTB_MISS : Data TLB miss > -event:0x17 counters:2 um:zero minimum:256 name:LOADS_MERGED : Loads merged in MAF > -event:0x18 counters:2 um:zero minimum:256 name:LDU_REPLAYS : LDU replay traps > -event:0x19 counters:2 um:zero minimum:256 name:WB_MAF_FULL_REPLAYS : WB/MAF full replay traps > -event:0x1a counters:2 um:zero minimum:256 name:MEM_BARRIER : Memory barrier instructions > -event:0x1b counters:2 um:zero minimum:256 name:LOAD_LOCKED : LDx/L instructions > -event:0x1c counters:1 um:zero minimum:256 name:SCACHE_ACCESS : S-cache access > -event:0x1d counters:1 um:zero minimum:256 name:SCACHE_READ : S-cache read > -event:0x1e counters:1,2 um:zero minimum:256 name:SCACHE_WRITE : S-cache write > -event:0x1f counters:1 um:zero minimum:256 name:SCACHE_VICTIM : S-cache victim > -event:0x20 counters:2 um:zero minimum:256 name:SCACHE_MISS : S-cache miss > -event:0x21 counters:2 um:zero minimum:256 name:SCACHE_READ_MISS : S-cache read miss > -event:0x22 counters:2 um:zero minimum:256 name:SCACHE_WRITE_MISS : S-cache write miss > -event:0x23 counters:2 um:zero minimum:256 name:SCACHE_SH_WRITE : S-cache shared writes > -event:0x24 counters:1 um:zero minimum:256 name:BCACHE_HIT : B-cache hit > -event:0x25 counters:1 um:zero minimum:256 name:BCACHE_VICTIM : B-cache victim > -event:0x26 counters:2 um:zero minimum:256 name:BCACHE_MISS : B-cache miss > -event:0x27 counters:1 um:zero minimum:256 name:SYS_REQ : System requests > -event:0x28 counters:2 um:zero minimum:256 name:SYS_INV : System invalidates > -event:0x29 counters:2 um:zero minimum:256 name:SYS_READ_REQ : System read requests > diff --git a/events/alpha/ev5/unit_masks b/events/alpha/ev5/unit_masks > deleted file mode 100644 > index 4f24fa9..0000000 > --- a/events/alpha/ev5/unit_masks > +++ /dev/null > @@ -1,4 +0,0 @@ > -# Alpha EV-5 possible unit masks > -# > -name:zero type:mandatory default:0x0 > - 0x0 No unit mask > diff --git a/events/alpha/ev6/events b/events/alpha/ev6/events > deleted file mode 100644 > index 2039cef..0000000 > --- a/events/alpha/ev6/events > +++ /dev/null > @@ -1,11 +0,0 @@ > -# Alpha EV6 events > -# > -event:0x00 counters:0,1 um:zero minimum:500 name:CYCLES : Total cycles > -event:0x01 counters:1 um:zero minimum:500 name:RETIRED : Retired instructions > -event:0x02 counters:1 um:zero minimum:500 name:COND_BRANCHES : Retired conditional branches > -event:0x03 counters:1 um:zero minimum:500 name:BRANCH_MISPREDICTS : Retired branch mispredicts > -event:0x04 counters:1 um:zero minimum:500 name:DTB_MISS : Retired DTB single misses * 2 > -event:0x05 counters:1 um:zero minimum:500 name:DTB_DD_MISS : Retired DTB double double misses > -event:0x06 counters:1 um:zero minimum:500 name:ITB_MISS : Retired ITB misses > -event:0x07 counters:1 um:zero minimum:500 name:UNALIGNED_TRAP : Retired unaligned traps > -event:0x08 counters:1 um:zero minimum:500 name:REPLAY_TRAP : Replay traps > diff --git a/events/alpha/ev6/unit_masks b/events/alpha/ev6/unit_masks > deleted file mode 100644 > index bbe38c6..0000000 > --- a/events/alpha/ev6/unit_masks > +++ /dev/null > @@ -1,4 +0,0 @@ > -# Alpha EV-6 possible unit masks > -# > -name:zero type:mandatory default:0x0 > - 0x0 No unit mask > diff --git a/events/alpha/ev67/events b/events/alpha/ev67/events > index b603871..6e62383 100644 > --- a/events/alpha/ev67/events > +++ b/events/alpha/ev67/events > @@ -1,27 +1,6 @@ > # Alpha EV-67 Events > # > -event:0x00 counters:0 um:zero minimum:500 name:CYCLES : Total cycles > -event:0x01 counters:1 um:zero minimum:500 name:DELAYED_CYCLES : Cycles of delayed retire pointer advance > -# FIXME: bug carried over > -event:0x00 counters:0,1 um:zero minimum:500 name:RETIRED : Retired instructions > -event:0x02 counters:1 um:zero minimum:500 name:BCACHE_MISS : Bcache misses/long probe latency > -event:0x03 counters:1 um:zero minimum:500 name:MBOX_REPLAY : Mbox replay traps > -# FIXME: all the below used PM_CTR > -event:0x04 counters:0 um:zero minimum:500 name:STALLED_0 : PCTR0 triggered; stalled between fetch and map stages > -event:0x05 counters:0 um:zero minimum:500 name:TAKEN_0 : PCTR0 triggered; branch was not mispredicted and taken > -event:0x06 counters:0 um:zero minimum:500 name:MISPREDICT_0 : PCTR0 triggered; branch was mispredicted > -event:0x07 counters:0 um:zero minimum:500 name:ITB_MISS_0 : PCTR0 triggered; ITB miss > -event:0x08 counters:0 um:zero minimum:500 name:DTB_MISS_0 : PCTR0 triggered; DTB miss > -event:0x09 counters:0 um:zero minimum:500 name:REPLAY_0 : PCTR0 triggered; replay trap > -event:0x0a counters:0 um:zero minimum:500 name:LOAD_STORE_0 : PCTR0 triggered; load-store order replay trap > -event:0x0b counters:0 um:zero minimum:500 name:ICACHE_MISS_0 : PCTR0 triggered; Icache miss > -event:0x0c counters:0 um:zero minimum:500 name:UNALIGNED_0 : PCTR0 triggered; unaligned load/store trap > -event:0x0d counters:0 um:zero minimum:500 name:STALLED_1 : PCTR1 triggered; stalled between fetch and map stages > -event:0x0e counters:0 um:zero minimum:500 name:TAKEN_1 : PCTR1 triggered; branch was not mispredicted and taken > -event:0x0f counters:0 um:zero minimum:500 name:MISPREDICT_1 : PCTR1 triggered; branch was mispredicted > -event:0x10 counters:0 um:zero minimum:500 name:ITB_MISS_1 : PCTR1 triggered; ITB miss > -event:0x11 counters:0 um:zero minimum:500 name:DTB_MISS_1 : PCTR1 triggered; DTB miss > -event:0x12 counters:0 um:zero minimum:500 name:REPLAY_1 : PCTR1 triggered; replay trap > -event:0x13 counters:0 um:zero minimum:500 name:LOAD_STORE_1 : PCTR1 triggered; load-store order replay trap > -event:0x14 counters:0 um:zero minimum:500 name:ICACHE_MISS_1 : PCTR1 triggered; Icache miss > -event:0x15 counters:0 um:zero minimum:500 name:UNALIGNED_1 : PCTR1 triggered; unaligned load/store trap > +event:0x01 counters:0,1 um:zero minimum:500 name:CYCLES : Total cycles > +event:0x02 counters:0 um:zero minimum:500 name:INSTRUCTIONS : Retired instructions > +event:0x03 counters:1 um:zero minimum:500 name:BCACHE_MISS : Bcache misses/long probe latency > +event:0x04 counters:1 um:zero minimum:500 name:MBOX_REPLAY : Mbox replay traps > diff --git a/events/alpha/pca56/events b/events/alpha/pca56/events > deleted file mode 100644 > index 334babe..0000000 > --- a/events/alpha/pca56/events > +++ /dev/null > @@ -1,2 +0,0 @@ > -# PCA-56 > -# FIXME: no events ? What's going on here Falk ? > diff --git a/events/alpha/pca56/unit_masks b/events/alpha/pca56/unit_masks > deleted file mode 100644 > index 2b807b7..0000000 > --- a/events/alpha/pca56/unit_masks > +++ /dev/null > @@ -1,3 +0,0 @@ > -# Alpha PCA-56 possible unit masks > -# > -# FIXME: any events ...? > diff --git a/libop/op_cpu_type.c b/libop/op_cpu_type.c > index 90fa861..6ce1f13 100644 > --- a/libop/op_cpu_type.c > +++ b/libop/op_cpu_type.c > @@ -49,10 +49,6 @@ static struct cpu_descr const cpu_descrs[MAX_CPU_TYPE] = { > { "P4 / Xeon", "i386/p4", CPU_P4, 8 }, > { "AMD64 processors", "x86-64/hammer", CPU_HAMMER, 4 }, > { "P4 / Xeon with 2 hyper-threads", "i386/p4-ht", CPU_P4_HT2, 4 }, > - { "Alpha EV4", "alpha/ev4", CPU_AXP_EV4, 2 }, > - { "Alpha EV5", "alpha/ev5", CPU_AXP_EV5, 3 }, > - { "Alpha PCA56", "alpha/pca56", CPU_AXP_PCA56, 3 }, > - { "Alpha EV6", "alpha/ev6", CPU_AXP_EV6, 2 }, > { "Alpha EV67", "alpha/ev67", CPU_AXP_EV67, 20 }, > { "Pentium M (P6 core)", "i386/p6_mobile", CPU_P6_MOBILE, 2 }, > { "ARM/XScale PMU1", "arm/xscale1", CPU_ARM_XSCALE1, 3 }, > @@ -343,6 +339,30 @@ static op_cpu _get_ppc64_cpu_type(void) > #endif > > > +static char *alpha_cpu_models[] = { > + "EV67", "EV68CB", "EV68AL", "EV68CX", "EV7", "EV79", "EV69", NULL > +}; > + > + > +static op_cpu _get_alpha_cpu_type(void) > +{ > + char *cpu_model; > + char **p; > + char line[100]; > + > + cpu_model = _get_cpuinfo_cpu_type(line, 100, "cpu model"); > + if (!cpu_model) > + return CPU_NO_GOOD; > + > + for (p = alpha_cpu_models; *p; p++) { > + if (strcmp(cpu_model, *p) == 0) > + return CPU_AXP_EV67; > + } > + > + return CPU_NO_GOOD; > +} > + > + > static op_cpu _get_arm_cpu_type(void) > { > unsigned long cpuid, vendorid; > @@ -668,6 +688,9 @@ static op_cpu __get_cpu_type(void) > (strncmp(uname_info.machine, "ppc64le", 7) == 0)) { > return _get_ppc64_cpu_type(); > } > + if (strncmp(uname_info.machine, "alpha", 5) == 0) { > + return _get_alpha_cpu_type(); > + } > if (strncmp(uname_info.machine, "arm", 3) == 0 || > strncmp(uname_info.machine, "aarch64", 7) == 0) { > return _get_arm_cpu_type(); > diff --git a/libop/op_cpu_type.h b/libop/op_cpu_type.h > index a65918a..bd8170a 100644 > --- a/libop/op_cpu_type.h > +++ b/libop/op_cpu_type.h > @@ -29,10 +29,6 @@ typedef enum { > CPU_P4, /**< Pentium 4 / Xeon series */ > CPU_HAMMER, /**< AMD Hammer family */ > CPU_P4_HT2, /**< Pentium 4 / Xeon series with 2 hyper-threads */ > - CPU_AXP_EV4, /**< Alpha EV4 family */ > - CPU_AXP_EV5, /**< Alpha EV5 family */ > - CPU_AXP_PCA56, /**< Alpha PCA56 family */ > - CPU_AXP_EV6, /**< Alpha EV6 family */ > CPU_AXP_EV67, /**< Alpha EV67 family */ > CPU_P6_MOBILE, /**< Pentium M series */ > CPU_ARM_XSCALE1, /**< ARM XScale 1 */ > diff --git a/libop/op_events.c b/libop/op_events.c > index d3eee60..8bfd3d2 100644 > --- a/libop/op_events.c > +++ b/libop/op_events.c > @@ -1165,12 +1165,9 @@ void op_default_event(op_cpu cpu_type, struct op_default_event_descr * descr) > descr->um = 0x1; > break; > > - case CPU_AXP_EV4: > - case CPU_AXP_EV5: > - case CPU_AXP_PCA56: > - case CPU_AXP_EV6: > case CPU_AXP_EV67: > descr->name = "CYCLES"; > + descr->um = 0x1; > break; > > // we could possibly use the CCNT > diff --git a/libop/op_hw_config.h b/libop/op_hw_config.h > index 169b36b..5969f1f 100644 > --- a/libop/op_hw_config.h > +++ b/libop/op_hw_config.h > @@ -16,11 +16,7 @@ > * use of this variable is for static/local array dimension. Never use it in > * loop or in array index access/index checking unless you know what you > * made. */ > -#ifdef __alpha__ > -#define OP_MAX_COUNTERS 20 > -#else > #define OP_MAX_COUNTERS 8 > -#endif > > /** maximum number of events between interrupts. Counters are 40 bits, but > * for convenience we only use 32 bits. The top bit is used for overflow > diff --git a/libop/tests/alloc_counter_tests.c b/libop/tests/alloc_counter_tests.c > index f14cc0c..d0da7a7 100644 > --- a/libop/tests/alloc_counter_tests.c > +++ b/libop/tests/alloc_counter_tests.c > @@ -18,8 +18,6 @@ > #include "op_cpu_type.h" > #include "op_events.h" > > -/* FIXME: alpha description events need 20 but when running test on x86 > - * OP_MAX_COUNTERS is 8, so we can't use it */ > #define MAX_EVENTS 20 > > > @@ -39,17 +37,6 @@ struct allocated_counter { > }; > > > -/* not more than MAX_EVENTS string for all these arrays */ > -static char const * const events_alpha_ev4_1[] = { > - "ISSUES:4096:0:1:1", > - NULL > -}; > - > -static char const * const events_alpha_ev4_2[] = { > - "UNKNOWN_EVENT:4096:0:1:1", > - NULL > -}; > - > static char const * const events_ppro_1[] = { > "CPU_CLK_UNHALTED:4096:0:1:1", > NULL > @@ -114,8 +101,6 @@ static char const * const events_mips_34k[] = { > }; > > static struct allocated_counter const tests[] = { > - { CPU_AXP_EV4, events_alpha_ev4_1, { 0 }, no_failure }, > - { CPU_AXP_EV4, events_alpha_ev4_2, { -1 }, fail_to_find_event }, > { CPU_PPRO, events_ppro_1, { 0 }, no_failure }, > { CPU_PPRO, events_ppro_2, { 0, 1 }, no_failure }, > { CPU_PPRO, events_ppro_3, { -1 }, fail_to_alloc_counter }, > diff --git a/libop/tests/cpu_type_tests.c b/libop/tests/cpu_type_tests.c > index beb0dee..468d351 100644 > --- a/libop/tests/cpu_type_tests.c > +++ b/libop/tests/cpu_type_tests.c > @@ -27,10 +27,6 @@ static struct cpu_type { > { "i386/p4", CPU_P4 }, > { "x86-64/hammer", CPU_HAMMER }, > { "i386/p4-ht", CPU_P4_HT2 }, > - { "alpha/ev4", CPU_AXP_EV4 }, > - { "alpha/ev5", CPU_AXP_EV5 }, > - { "alpha/pca56", CPU_AXP_PCA56 }, > - { "alpha/ev6", CPU_AXP_EV6 }, > { "alpha/ev67", CPU_AXP_EV67 }, > { "tile/tile64", CPU_TILE_TILE64 }, > { "tile/tilepro", CPU_TILE_TILEPRO }, > diff --git a/utils/ophelp.c b/utils/ophelp.c > index b152db7..e38e417 100644 > --- a/utils/ophelp.c > +++ b/utils/ophelp.c > @@ -559,10 +559,6 @@ int main(int argc, char const * argv[]) > "This is a limited set of fallback events because oprofile doesn't know your CPU\n"; > break; > > - case CPU_AXP_EV4: > - case CPU_AXP_EV5: > - case CPU_AXP_PCA56: > - case CPU_AXP_EV6: > case CPU_AXP_EV67: > event_doc = > "See Alpha Architecture Reference Manual\n" > ------------------------------------------------------------------------------