From: Andreas K. <kr...@li...> - 2013-01-09 09:24:08
|
From: andreas <kr...@li...> This patch adds support for the latest release of the IBM mainframe series - the IBM zEnterprise EC12 (zEC12). The CPU measurement facility didn't change. So only the new CPU type has to be tolerated. Signed-off-by: Andreas Krebbel<kr...@li...> --- arch/s390/oprofile/init.c | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-) diff --git a/arch/s390/oprofile/init.c b/arch/s390/oprofile/init.c index 584b936..f29af8b 100644 --- a/arch/s390/oprofile/init.c +++ b/arch/s390/oprofile/init.c @@ -438,9 +438,14 @@ static int oprofile_hwsampler_init(struct oprofile_operations *ops) get_cpu_id (&id); switch (id.machine) { + case 0x2064: case 0x2066: /* z900 */ + case 0x2084: case 0x2086: /* z990 */ + case 0x2094: case 0x2096: /* z9-109 */ + return -ENODEV; case 0x2097: case 0x2098: ops->cpu_type = "s390/z10"; break; case 0x2817: case 0x2818: ops->cpu_type = "s390/z196"; break; - default: return -ENODEV; + case 0x2827: ops->cpu_type = "s390/zEC12"; break; + default: ops->cpu_type = "s390/zEC12"; } } -- 1.7.1 |
From: Andreas K. <kr...@li...> - 2013-01-09 09:40:12
|
This patch adds support for the latest release of the IBM mainframe series - the IBM zEnterprise EC12 (zEC12). The CPU measurement facility didn't change. So only the new CPU type has to be tolerated. The patch also fixes a build failure for non-x86 targets in operf.cpp. Signed-off-by: Andreas Krebbel<kr...@li...> --- events/Makefile.am | 3 ++- libop/op_cpu_type.c | 1 + libop/op_cpu_type.h | 1 + libop/op_events.c | 1 + pe_profiling/operf.cpp | 2 +- utils/ophelp.c | 1 + 6 files changed, 7 insertions(+), 2 deletions(-) diff --git a/events/Makefile.am b/events/Makefile.am index 758925d..9191a83 100644 --- a/events/Makefile.am +++ b/events/Makefile.am @@ -78,7 +78,8 @@ event_files = \ tile/tilepro/events tile/tilepro/unit_masks \ tile/tilegx/events tile/tilegx/unit_masks \ s390/z10/events s390/z10/unit_masks \ - s390/z196/events s390/z196/unit_masks + s390/z196/events s390/z196/unit_masks \ + s390/zEC12/events s390/zEC12/unit_masks install-data-local: for i in ${event_files} ; do \ diff --git a/libop/op_cpu_type.c b/libop/op_cpu_type.c index a54b2a9..7d67395 100644 --- a/libop/op_cpu_type.c +++ b/libop/op_cpu_type.c @@ -103,6 +103,7 @@ static struct cpu_descr const cpu_descrs[MAX_CPU_TYPE] = { { "TILE-GX", "tile/tilegx", CPU_TILE_TILEGX, 4 }, { "IBM System z10", "s390/z10", CPU_S390_Z10, 1 }, { "IBM zEnterprise z196", "s390/z196", CPU_S390_Z196, 1 }, + { "IBM zEnterprise EC12", "s390/zEC12", CPU_S390_ZEC12, 1 }, { "Intel Ivy Bridge microarchitecture", "i386/ivybridge", CPU_IVYBRIDGE, 8 }, { "ARM Cortex-A5", "arm/armv7-ca5", CPU_ARM_V7_CA5, 3 }, { "ARM Cortex-A7", "arm/armv7-ca7", CPU_ARM_V7_CA7, 5 }, diff --git a/libop/op_cpu_type.h b/libop/op_cpu_type.h index 1d5cb64..9f682c7 100644 --- a/libop/op_cpu_type.h +++ b/libop/op_cpu_type.h @@ -96,6 +96,7 @@ typedef enum { CPU_TILE_TILEGX, /**< Tilera TILE-GX family */ CPU_S390_Z10, /* IBM System z10 */ CPU_S390_Z196, /* IBM zEnterprise z196 */ + CPU_S390_ZEC12, /* IBM zEnterprise EC12 */ CPU_IVYBRIDGE, /* Intel Ivy-Bridge microarchitecture */ CPU_ARM_V7_CA5, /**< ARM Cortex-A5 */ CPU_ARM_V7_CA7, /**< ARM Cortex-A7 */ diff --git a/libop/op_events.c b/libop/op_events.c index 6b02fcc..5327cd7 100644 --- a/libop/op_events.c +++ b/libop/op_events.c @@ -1191,6 +1191,7 @@ void op_default_event(op_cpu cpu_type, struct op_default_event_descr * descr) break; case CPU_S390_Z10: case CPU_S390_Z196: + case CPU_S390_ZEC12: if (op_get_nr_counters(cpu_type) > 1) { descr->name = "HWSAMPLING"; descr->count = 4127518; diff --git a/pe_profiling/operf.cpp b/pe_profiling/operf.cpp index f3b72f9..b823679 100644 --- a/pe_profiling/operf.cpp +++ b/pe_profiling/operf.cpp @@ -1048,7 +1048,6 @@ static void _get_event_code(operf_event_t * event) char oprof_event_code[9]; string command; u64 base_code, config; - char mask[12]; char buf[20]; if ((snprintf(buf, 20, "%lu", event->count)) < 0) { cerr << "Error parsing event count of " << event->count << endl; @@ -1080,6 +1079,7 @@ static void _get_event_code(operf_event_t * event) #if defined(__i386__) || defined(__x86_64__) + char mask[12]; // Setup EventSelct[11:8] field for AMD const char * vendor_AMD = "AuthenticAMD"; if (op_is_cpu_vendor((char *)vendor_AMD)) { diff --git a/utils/ophelp.c b/utils/ophelp.c index f48697b..2cd3f2a 100644 --- a/utils/ophelp.c +++ b/utils/ophelp.c @@ -772,6 +772,7 @@ int main(int argc, char const * argv[]) case CPU_S390_Z10: case CPU_S390_Z196: + case CPU_S390_ZEC12: event_doc = "IBM System z CPU Measurement Facility\n" "http://www-01.ibm.com/support/docview.wss" "?uid=isg26fcd1cc32246f4c8852574ce0044734a\n"; -- 1.7.5.4 |
From: Maynard J. <may...@us...> - 2013-01-10 14:50:42
|
On 01/09/2013 03:09 AM, Andreas Krebbel wrote: > This patch adds support for the latest release of the > IBM mainframe series - the IBM zEnterprise EC12 (zEC12). > > The CPU measurement facility didn't change. So only the new CPU type > has to be tolerated. > > The patch also fixes a build failure for non-x86 targets in operf.cpp. > > Signed-off-by: Andreas Krebbel<kr...@li...> > --- > events/Makefile.am | 3 ++- > libop/op_cpu_type.c | 1 + > libop/op_cpu_type.h | 1 + > libop/op_events.c | 1 + > pe_profiling/operf.cpp | 2 +- > utils/ophelp.c | 1 + > 6 files changed, 7 insertions(+), 2 deletions(-) > > diff --git a/events/Makefile.am b/events/Makefile.am > index 758925d..9191a83 100644 > --- a/events/Makefile.am > +++ b/events/Makefile.am > @@ -78,7 +78,8 @@ event_files = \ > tile/tilepro/events tile/tilepro/unit_masks \ > tile/tilegx/events tile/tilegx/unit_masks \ > s390/z10/events s390/z10/unit_masks \ > - s390/z196/events s390/z196/unit_masks > + s390/z196/events s390/z196/unit_masks \ > + s390/zEC12/events s390/zEC12/unit_masks Where are the new events and unit_masks files? I guess you forgot to do 'git add' before generating your patch. :-o Easy mistake to make, as I've done it myself. > > install-data-local: > for i in ${event_files} ; do \ As the comment in op_cpu_type.h says, "Always add new CPU types at the very end." > diff --git a/libop/op_cpu_type.c b/libop/op_cpu_type.c > index a54b2a9..7d67395 100644 > --- a/libop/op_cpu_type.c > +++ b/libop/op_cpu_type.c > @@ -103,6 +103,7 @@ static struct cpu_descr const cpu_descrs[MAX_CPU_TYPE] = { > { "TILE-GX", "tile/tilegx", CPU_TILE_TILEGX, 4 }, > { "IBM System z10", "s390/z10", CPU_S390_Z10, 1 }, > { "IBM zEnterprise z196", "s390/z196", CPU_S390_Z196, 1 }, > + { "IBM zEnterprise EC12", "s390/zEC12", CPU_S390_ZEC12, 1 }, > { "Intel Ivy Bridge microarchitecture", "i386/ivybridge", CPU_IVYBRIDGE, 8 }, > { "ARM Cortex-A5", "arm/armv7-ca5", CPU_ARM_V7_CA5, 3 }, > { "ARM Cortex-A7", "arm/armv7-ca7", CPU_ARM_V7_CA7, 5 }, > diff --git a/libop/op_cpu_type.h b/libop/op_cpu_type.h > index 1d5cb64..9f682c7 100644 > --- a/libop/op_cpu_type.h > +++ b/libop/op_cpu_type.h > @@ -96,6 +96,7 @@ typedef enum { > CPU_TILE_TILEGX, /**< Tilera TILE-GX family */ > CPU_S390_Z10, /* IBM System z10 */ > CPU_S390_Z196, /* IBM zEnterprise z196 */ > + CPU_S390_ZEC12, /* IBM zEnterprise EC12 */ > CPU_IVYBRIDGE, /* Intel Ivy-Bridge microarchitecture */ > CPU_ARM_V7_CA5, /**< ARM Cortex-A5 */ > CPU_ARM_V7_CA7, /**< ARM Cortex-A7 */ > diff --git a/libop/op_events.c b/libop/op_events.c > index 6b02fcc..5327cd7 100644 > --- a/libop/op_events.c > +++ b/libop/op_events.c > @@ -1191,6 +1191,7 @@ void op_default_event(op_cpu cpu_type, struct op_default_event_descr * descr) > break; > case CPU_S390_Z10: > case CPU_S390_Z196: > + case CPU_S390_ZEC12: > if (op_get_nr_counters(cpu_type) > 1) { > descr->name = "HWSAMPLING"; > descr->count = 4127518; > diff --git a/pe_profiling/operf.cpp b/pe_profiling/operf.cpp > index f3b72f9..b823679 100644 > --- a/pe_profiling/operf.cpp > +++ b/pe_profiling/operf.cpp > @@ -1048,7 +1048,6 @@ static void _get_event_code(operf_event_t * event) > char oprof_event_code[9]; > string command; > u64 base_code, config; > - char mask[12]; heh, I'll bet this change was because you ran into this compile error here. I fixed it upstream yesterday. Dumb mistake on my part in a commit from last week. > char buf[20]; > if ((snprintf(buf, 20, "%lu", event->count)) < 0) { > cerr << "Error parsing event count of " << event->count << endl; > @@ -1080,6 +1079,7 @@ static void _get_event_code(operf_event_t * event) > > > #if defined(__i386__) || defined(__x86_64__) > + char mask[12]; > // Setup EventSelct[11:8] field for AMD > const char * vendor_AMD = "AuthenticAMD"; > if (op_is_cpu_vendor((char *)vendor_AMD)) { > diff --git a/utils/ophelp.c b/utils/ophelp.c > index f48697b..2cd3f2a 100644 > --- a/utils/ophelp.c > +++ b/utils/ophelp.c > @@ -772,6 +772,7 @@ int main(int argc, char const * argv[]) > > case CPU_S390_Z10: > case CPU_S390_Z196: > + case CPU_S390_ZEC12: > event_doc = "IBM System z CPU Measurement Facility\n" > "http://www-01.ibm.com/support/docview.wss" > "?uid=isg26fcd1cc32246f4c8852574ce0044734a\n"; |
From: Andreas K. <kr...@li...> - 2013-01-10 15:47:39
|
This patch adds support for the latest release of the IBM mainframe series - the IBM zEnterprise EC12 (zEC12). The CPU measurement facility didn't change. So only the new CPU type has to be tolerated. Signed-off-by: Andreas Krebbel <kr...@li...> --- events/Makefile.am | 3 ++- events/s390/zEC12/events | 7 +++++++ events/s390/zEC12/unit_masks | 7 +++++++ libop/op_cpu_type.c | 1 + libop/op_cpu_type.h | 1 + libop/op_events.c | 1 + utils/ophelp.c | 1 + 7 files changed, 20 insertions(+), 1 deletions(-) create mode 100644 events/s390/zEC12/events create mode 100644 events/s390/zEC12/unit_masks diff --git a/events/Makefile.am b/events/Makefile.am index 758925d..9191a83 100644 --- a/events/Makefile.am +++ b/events/Makefile.am @@ -78,7 +78,8 @@ event_files = \ tile/tilepro/events tile/tilepro/unit_masks \ tile/tilegx/events tile/tilegx/unit_masks \ s390/z10/events s390/z10/unit_masks \ - s390/z196/events s390/z196/unit_masks + s390/z196/events s390/z196/unit_masks \ + s390/zEC12/events s390/zEC12/unit_masks install-data-local: for i in ${event_files} ; do \ diff --git a/events/s390/zEC12/events b/events/s390/zEC12/events new file mode 100644 index 0000000..3a167f7 --- /dev/null +++ b/events/s390/zEC12/events @@ -0,0 +1,7 @@ +# Copyright OProfile authors +# Copyright (c) International Business Machines, 2013. +# Contributed by Andreas Krebbel <kr...@li...>. +# +# IBM Enterprise EC12 Basic Mode Sampling events +# +event:0x00 counters:0 um:zero minimum:19264 name:HWSAMPLING : Sampling using Basic Mode Hardware Sampling diff --git a/events/s390/zEC12/unit_masks b/events/s390/zEC12/unit_masks new file mode 100644 index 0000000..cfc4dc1 --- /dev/null +++ b/events/s390/zEC12/unit_masks @@ -0,0 +1,7 @@ +# Copyright OProfile authors +# Copyright (c) International Business Machines, 2013. +# Contributed by Andreas Krebbel <kr...@li...>. +# +# S/390 Basic Mode Hardware Sampling unit masks +# +include:s390/z10 diff --git a/libop/op_cpu_type.c b/libop/op_cpu_type.c index a54b2a9..8114f14 100644 --- a/libop/op_cpu_type.c +++ b/libop/op_cpu_type.c @@ -108,6 +108,7 @@ static struct cpu_descr const cpu_descrs[MAX_CPU_TYPE] = { { "ARM Cortex-A7", "arm/armv7-ca7", CPU_ARM_V7_CA7, 5 }, { "ARM Cortex-A15", "arm/armv7-ca15", CPU_ARM_V7_CA15, 7 }, { "Intel Haswell microarchitecture", "i386/haswell", CPU_HASWELL, 4 }, + { "IBM zEnterprise EC12", "s390/zEC12", CPU_S390_ZEC12, 1 }, }; static size_t const nr_cpu_descrs = sizeof(cpu_descrs) / sizeof(struct cpu_descr); diff --git a/libop/op_cpu_type.h b/libop/op_cpu_type.h index 1d5cb64..3d58f3e 100644 --- a/libop/op_cpu_type.h +++ b/libop/op_cpu_type.h @@ -101,6 +101,7 @@ typedef enum { CPU_ARM_V7_CA7, /**< ARM Cortex-A7 */ CPU_ARM_V7_CA15, /**< ARM Cortex-A15 */ CPU_HASWELL, /** < Intel Haswell microarchitecture */ + CPU_S390_ZEC12, /**< IBM zEnterprise EC12 */ MAX_CPU_TYPE } op_cpu; diff --git a/libop/op_events.c b/libop/op_events.c index 6b02fcc..5327cd7 100644 --- a/libop/op_events.c +++ b/libop/op_events.c @@ -1191,6 +1191,7 @@ void op_default_event(op_cpu cpu_type, struct op_default_event_descr * descr) break; case CPU_S390_Z10: case CPU_S390_Z196: + case CPU_S390_ZEC12: if (op_get_nr_counters(cpu_type) > 1) { descr->name = "HWSAMPLING"; descr->count = 4127518; diff --git a/utils/ophelp.c b/utils/ophelp.c index f48697b..2cd3f2a 100644 --- a/utils/ophelp.c +++ b/utils/ophelp.c @@ -772,6 +772,7 @@ int main(int argc, char const * argv[]) case CPU_S390_Z10: case CPU_S390_Z196: + case CPU_S390_ZEC12: event_doc = "IBM System z CPU Measurement Facility\n" "http://www-01.ibm.com/support/docview.wss" "?uid=isg26fcd1cc32246f4c8852574ce0044734a\n"; -- 1.7.5.4 |
From: Maynard J. <may...@us...> - 2013-01-10 17:00:48
|
On 01/10/2013 09:47 AM, Andreas Krebbel wrote: > This patch adds support for the latest release of the > IBM mainframe series - the IBM zEnterprise EC12 (zEC12). > > The CPU measurement facility didn't change. So only the new CPU type > has to be tolerated. Andreas, Patch looks good with the following exceptions: - Line 92: space before tab in indent. This is your addition to libop/op_events.c:op_default_event. As a matter of fact, the two existing entries for CPU_S390_Z10 and CPU_S390_Z196 also have spaces instead of indents. - The link http://www-01.ibm.com/support/docview.wss doesn't seem to be valid. -Maynard > > Signed-off-by: Andreas Krebbel <kr...@li...> > --- > events/Makefile.am | 3 ++- > events/s390/zEC12/events | 7 +++++++ > events/s390/zEC12/unit_masks | 7 +++++++ > libop/op_cpu_type.c | 1 + > libop/op_cpu_type.h | 1 + > libop/op_events.c | 1 + > utils/ophelp.c | 1 + > 7 files changed, 20 insertions(+), 1 deletions(-) > create mode 100644 events/s390/zEC12/events > create mode 100644 events/s390/zEC12/unit_masks > > diff --git a/events/Makefile.am b/events/Makefile.am > index 758925d..9191a83 100644 > --- a/events/Makefile.am > +++ b/events/Makefile.am > @@ -78,7 +78,8 @@ event_files = \ > tile/tilepro/events tile/tilepro/unit_masks \ > tile/tilegx/events tile/tilegx/unit_masks \ > s390/z10/events s390/z10/unit_masks \ > - s390/z196/events s390/z196/unit_masks > + s390/z196/events s390/z196/unit_masks \ > + s390/zEC12/events s390/zEC12/unit_masks > > install-data-local: > for i in ${event_files} ; do \ > diff --git a/events/s390/zEC12/events b/events/s390/zEC12/events > new file mode 100644 > index 0000000..3a167f7 > --- /dev/null > +++ b/events/s390/zEC12/events > @@ -0,0 +1,7 @@ > +# Copyright OProfile authors > +# Copyright (c) International Business Machines, 2013. > +# Contributed by Andreas Krebbel <kr...@li...>. > +# > +# IBM Enterprise EC12 Basic Mode Sampling events > +# > +event:0x00 counters:0 um:zero minimum:19264 name:HWSAMPLING : Sampling using Basic Mode Hardware Sampling > diff --git a/events/s390/zEC12/unit_masks b/events/s390/zEC12/unit_masks > new file mode 100644 > index 0000000..cfc4dc1 > --- /dev/null > +++ b/events/s390/zEC12/unit_masks > @@ -0,0 +1,7 @@ > +# Copyright OProfile authors > +# Copyright (c) International Business Machines, 2013. > +# Contributed by Andreas Krebbel <kr...@li...>. > +# > +# S/390 Basic Mode Hardware Sampling unit masks > +# > +include:s390/z10 > diff --git a/libop/op_cpu_type.c b/libop/op_cpu_type.c > index a54b2a9..8114f14 100644 > --- a/libop/op_cpu_type.c > +++ b/libop/op_cpu_type.c > @@ -108,6 +108,7 @@ static struct cpu_descr const cpu_descrs[MAX_CPU_TYPE] = { > { "ARM Cortex-A7", "arm/armv7-ca7", CPU_ARM_V7_CA7, 5 }, > { "ARM Cortex-A15", "arm/armv7-ca15", CPU_ARM_V7_CA15, 7 }, > { "Intel Haswell microarchitecture", "i386/haswell", CPU_HASWELL, 4 }, > + { "IBM zEnterprise EC12", "s390/zEC12", CPU_S390_ZEC12, 1 }, > }; > > static size_t const nr_cpu_descrs = sizeof(cpu_descrs) / sizeof(struct cpu_descr); > diff --git a/libop/op_cpu_type.h b/libop/op_cpu_type.h > index 1d5cb64..3d58f3e 100644 > --- a/libop/op_cpu_type.h > +++ b/libop/op_cpu_type.h > @@ -101,6 +101,7 @@ typedef enum { > CPU_ARM_V7_CA7, /**< ARM Cortex-A7 */ > CPU_ARM_V7_CA15, /**< ARM Cortex-A15 */ > CPU_HASWELL, /** < Intel Haswell microarchitecture */ > + CPU_S390_ZEC12, /**< IBM zEnterprise EC12 */ > MAX_CPU_TYPE > } op_cpu; > > diff --git a/libop/op_events.c b/libop/op_events.c > index 6b02fcc..5327cd7 100644 > --- a/libop/op_events.c > +++ b/libop/op_events.c > @@ -1191,6 +1191,7 @@ void op_default_event(op_cpu cpu_type, struct op_default_event_descr * descr) > break; > case CPU_S390_Z10: > case CPU_S390_Z196: > + case CPU_S390_ZEC12: > if (op_get_nr_counters(cpu_type) > 1) { > descr->name = "HWSAMPLING"; > descr->count = 4127518; > diff --git a/utils/ophelp.c b/utils/ophelp.c > index f48697b..2cd3f2a 100644 > --- a/utils/ophelp.c > +++ b/utils/ophelp.c > @@ -772,6 +772,7 @@ int main(int argc, char const * argv[]) > > case CPU_S390_Z10: > case CPU_S390_Z196: > + case CPU_S390_ZEC12: > event_doc = "IBM System z CPU Measurement Facility\n" > "http://www-01.ibm.com/support/docview.wss" > "?uid=isg26fcd1cc32246f4c8852574ce0044734a\n"; |
From: Maynard J. <may...@us...> - 2013-01-10 19:50:40
|
On 01/10/2013 10:29 AM, Maynard Johnson wrote: > On 01/10/2013 09:47 AM, Andreas Krebbel wrote: >> This patch adds support for the latest release of the >> IBM mainframe series - the IBM zEnterprise EC12 (zEC12). >> >> The CPU measurement facility didn't change. So only the new CPU type >> has to be tolerated. > Andreas, > Patch looks good with the following exceptions: > > - Line 92: space before tab in indent. This is your addition to libop/op_events.c:op_default_event. > As a matter of fact, the two existing entries for CPU_S390_Z10 and CPU_S390_Z196 also have spaces > instead of indents. > - The link http://www-01.ibm.com/support/docview.wss doesn't seem to be valid. heh. I just checked the URL for IBM PowerPC and that's invalid now, too. grrrr. -Maynard > > -Maynard >> [snip] |
From: Andreas K. <kr...@li...> - 2013-01-11 07:49:49
|
On 10/01/13 17:29, Maynard Johnson wrote: > On 01/10/2013 09:47 AM, Andreas Krebbel wrote: >> This patch adds support for the latest release of the >> IBM mainframe series - the IBM zEnterprise EC12 (zEC12). >> >> The CPU measurement facility didn't change. So only the new CPU type >> has to be tolerated. > Andreas, > Patch looks good with the following exceptions: > > - Line 92: space before tab in indent. This is your addition to libop/op_events.c:op_default_event. > As a matter of fact, the two existing entries for CPU_S390_Z10 and CPU_S390_Z196 also have spaces > instead of indents. > - The link http://www-01.ibm.com/support/docview.wss doesn't seem to be valid. The link is split into two separate strings. You probably missed copying the second part starting with ?uid=. The full link is: http://www-01.ibm.com/support/docview.wss?uid=isg26fcd1cc32246f4c8852574ce0044734a -Andreas- > > -Maynard >> >> Signed-off-by: Andreas Krebbel <kr...@li...> >> --- >> events/Makefile.am | 3 ++- >> events/s390/zEC12/events | 7 +++++++ >> events/s390/zEC12/unit_masks | 7 +++++++ >> libop/op_cpu_type.c | 1 + >> libop/op_cpu_type.h | 1 + >> libop/op_events.c | 1 + >> utils/ophelp.c | 1 + >> 7 files changed, 20 insertions(+), 1 deletions(-) >> create mode 100644 events/s390/zEC12/events >> create mode 100644 events/s390/zEC12/unit_masks >> >> diff --git a/events/Makefile.am b/events/Makefile.am >> index 758925d..9191a83 100644 >> --- a/events/Makefile.am >> +++ b/events/Makefile.am >> @@ -78,7 +78,8 @@ event_files = \ >> tile/tilepro/events tile/tilepro/unit_masks \ >> tile/tilegx/events tile/tilegx/unit_masks \ >> s390/z10/events s390/z10/unit_masks \ >> - s390/z196/events s390/z196/unit_masks >> + s390/z196/events s390/z196/unit_masks \ >> + s390/zEC12/events s390/zEC12/unit_masks >> >> install-data-local: >> for i in ${event_files} ; do \ >> diff --git a/events/s390/zEC12/events b/events/s390/zEC12/events >> new file mode 100644 >> index 0000000..3a167f7 >> --- /dev/null >> +++ b/events/s390/zEC12/events >> @@ -0,0 +1,7 @@ >> +# Copyright OProfile authors >> +# Copyright (c) International Business Machines, 2013. >> +# Contributed by Andreas Krebbel <kr...@li...>. >> +# >> +# IBM Enterprise EC12 Basic Mode Sampling events >> +# >> +event:0x00 counters:0 um:zero minimum:19264 name:HWSAMPLING : Sampling using Basic Mode Hardware Sampling >> diff --git a/events/s390/zEC12/unit_masks b/events/s390/zEC12/unit_masks >> new file mode 100644 >> index 0000000..cfc4dc1 >> --- /dev/null >> +++ b/events/s390/zEC12/unit_masks >> @@ -0,0 +1,7 @@ >> +# Copyright OProfile authors >> +# Copyright (c) International Business Machines, 2013. >> +# Contributed by Andreas Krebbel <kr...@li...>. >> +# >> +# S/390 Basic Mode Hardware Sampling unit masks >> +# >> +include:s390/z10 >> diff --git a/libop/op_cpu_type.c b/libop/op_cpu_type.c >> index a54b2a9..8114f14 100644 >> --- a/libop/op_cpu_type.c >> +++ b/libop/op_cpu_type.c >> @@ -108,6 +108,7 @@ static struct cpu_descr const cpu_descrs[MAX_CPU_TYPE] = { >> { "ARM Cortex-A7", "arm/armv7-ca7", CPU_ARM_V7_CA7, 5 }, >> { "ARM Cortex-A15", "arm/armv7-ca15", CPU_ARM_V7_CA15, 7 }, >> { "Intel Haswell microarchitecture", "i386/haswell", CPU_HASWELL, 4 }, >> + { "IBM zEnterprise EC12", "s390/zEC12", CPU_S390_ZEC12, 1 }, >> }; >> >> static size_t const nr_cpu_descrs = sizeof(cpu_descrs) / sizeof(struct cpu_descr); >> diff --git a/libop/op_cpu_type.h b/libop/op_cpu_type.h >> index 1d5cb64..3d58f3e 100644 >> --- a/libop/op_cpu_type.h >> +++ b/libop/op_cpu_type.h >> @@ -101,6 +101,7 @@ typedef enum { >> CPU_ARM_V7_CA7, /**< ARM Cortex-A7 */ >> CPU_ARM_V7_CA15, /**< ARM Cortex-A15 */ >> CPU_HASWELL, /** < Intel Haswell microarchitecture */ >> + CPU_S390_ZEC12, /**< IBM zEnterprise EC12 */ >> MAX_CPU_TYPE >> } op_cpu; >> >> diff --git a/libop/op_events.c b/libop/op_events.c >> index 6b02fcc..5327cd7 100644 >> --- a/libop/op_events.c >> +++ b/libop/op_events.c >> @@ -1191,6 +1191,7 @@ void op_default_event(op_cpu cpu_type, struct op_default_event_descr * descr) >> break; >> case CPU_S390_Z10: >> case CPU_S390_Z196: >> + case CPU_S390_ZEC12: >> if (op_get_nr_counters(cpu_type) > 1) { >> descr->name = "HWSAMPLING"; >> descr->count = 4127518; >> diff --git a/utils/ophelp.c b/utils/ophelp.c >> index f48697b..2cd3f2a 100644 >> --- a/utils/ophelp.c >> +++ b/utils/ophelp.c >> @@ -772,6 +772,7 @@ int main(int argc, char const * argv[]) >> >> case CPU_S390_Z10: >> case CPU_S390_Z196: >> + case CPU_S390_ZEC12: >> event_doc = "IBM System z CPU Measurement Facility\n" >> "http://www-01.ibm.com/support/docview.wss" >> "?uid=isg26fcd1cc32246f4c8852574ce0044734a\n"; > |
From: Andreas K. <kr...@li...> - 2013-01-11 08:07:39
|
This patch adds support for the latest release of the IBM mainframe series - the IBM zEnterprise EC12 (zEC12). The CPU measurement facility didn't change. So only the new CPU type has to be tolerated. Signed-off-by: Andreas Krebbel <kr...@li...> --- events/Makefile.am | 3 ++- events/s390/zEC12/events | 7 +++++++ events/s390/zEC12/unit_masks | 7 +++++++ libop/op_cpu_type.c | 1 + libop/op_cpu_type.h | 1 + libop/op_events.c | 6 ++++-- utils/ophelp.c | 1 + 7 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 events/s390/zEC12/events create mode 100644 events/s390/zEC12/unit_masks diff --git a/events/Makefile.am b/events/Makefile.am index 758925d..9191a83 100644 --- a/events/Makefile.am +++ b/events/Makefile.am @@ -78,7 +78,8 @@ event_files = \ tile/tilepro/events tile/tilepro/unit_masks \ tile/tilegx/events tile/tilegx/unit_masks \ s390/z10/events s390/z10/unit_masks \ - s390/z196/events s390/z196/unit_masks + s390/z196/events s390/z196/unit_masks \ + s390/zEC12/events s390/zEC12/unit_masks install-data-local: for i in ${event_files} ; do \ diff --git a/events/s390/zEC12/events b/events/s390/zEC12/events new file mode 100644 index 0000000..3a167f7 --- /dev/null +++ b/events/s390/zEC12/events @@ -0,0 +1,7 @@ +# Copyright OProfile authors +# Copyright (c) International Business Machines, 2013. +# Contributed by Andreas Krebbel <kr...@li...>. +# +# IBM Enterprise EC12 Basic Mode Sampling events +# +event:0x00 counters:0 um:zero minimum:19264 name:HWSAMPLING : Sampling using Basic Mode Hardware Sampling diff --git a/events/s390/zEC12/unit_masks b/events/s390/zEC12/unit_masks new file mode 100644 index 0000000..cfc4dc1 --- /dev/null +++ b/events/s390/zEC12/unit_masks @@ -0,0 +1,7 @@ +# Copyright OProfile authors +# Copyright (c) International Business Machines, 2013. +# Contributed by Andreas Krebbel <kr...@li...>. +# +# S/390 Basic Mode Hardware Sampling unit masks +# +include:s390/z10 diff --git a/libop/op_cpu_type.c b/libop/op_cpu_type.c index a54b2a9..8114f14 100644 --- a/libop/op_cpu_type.c +++ b/libop/op_cpu_type.c @@ -108,6 +108,7 @@ static struct cpu_descr const cpu_descrs[MAX_CPU_TYPE] = { { "ARM Cortex-A7", "arm/armv7-ca7", CPU_ARM_V7_CA7, 5 }, { "ARM Cortex-A15", "arm/armv7-ca15", CPU_ARM_V7_CA15, 7 }, { "Intel Haswell microarchitecture", "i386/haswell", CPU_HASWELL, 4 }, + { "IBM zEnterprise EC12", "s390/zEC12", CPU_S390_ZEC12, 1 }, }; static size_t const nr_cpu_descrs = sizeof(cpu_descrs) / sizeof(struct cpu_descr); diff --git a/libop/op_cpu_type.h b/libop/op_cpu_type.h index 1d5cb64..3d58f3e 100644 --- a/libop/op_cpu_type.h +++ b/libop/op_cpu_type.h @@ -101,6 +101,7 @@ typedef enum { CPU_ARM_V7_CA7, /**< ARM Cortex-A7 */ CPU_ARM_V7_CA15, /**< ARM Cortex-A15 */ CPU_HASWELL, /** < Intel Haswell microarchitecture */ + CPU_S390_ZEC12, /**< IBM zEnterprise EC12 */ MAX_CPU_TYPE } op_cpu; diff --git a/libop/op_events.c b/libop/op_events.c index 6b02fcc..c91f04e 100644 --- a/libop/op_events.c +++ b/libop/op_events.c @@ -1189,8 +1189,10 @@ void op_default_event(op_cpu cpu_type, struct op_default_event_descr * descr) case CPU_PPC_E300: descr->name = "CPU_CLK"; break; - case CPU_S390_Z10: - case CPU_S390_Z196: + + case CPU_S390_Z10: + case CPU_S390_Z196: + case CPU_S390_ZEC12: if (op_get_nr_counters(cpu_type) > 1) { descr->name = "HWSAMPLING"; descr->count = 4127518; diff --git a/utils/ophelp.c b/utils/ophelp.c index f48697b..2cd3f2a 100644 --- a/utils/ophelp.c +++ b/utils/ophelp.c @@ -772,6 +772,7 @@ int main(int argc, char const * argv[]) case CPU_S390_Z10: case CPU_S390_Z196: + case CPU_S390_ZEC12: event_doc = "IBM System z CPU Measurement Facility\n" "http://www-01.ibm.com/support/docview.wss" "?uid=isg26fcd1cc32246f4c8852574ce0044734a\n"; -- 1.7.5.4 |
From: Maynard J. <may...@us...> - 2013-01-11 14:41:58
|
On 01/11/2013 02:07 AM, Andreas Krebbel wrote: > This patch adds support for the latest release of the > IBM mainframe series - the IBM zEnterprise EC12 (zEC12). Patch committed. -Maynard P.S. You were right about the URL. I *did* miss copying the second line of the URL when I tried using it. The full URL is indeed valid. > > The CPU measurement facility didn't change. So only the new CPU type > has to be tolerated. > > Signed-off-by: Andreas Krebbel <kr...@li...> > --- > events/Makefile.am | 3 ++- > events/s390/zEC12/events | 7 +++++++ > events/s390/zEC12/unit_masks | 7 +++++++ > libop/op_cpu_type.c | 1 + > libop/op_cpu_type.h | 1 + > libop/op_events.c | 6 ++++-- > utils/ophelp.c | 1 + > 7 files changed, 23 insertions(+), 3 deletions(-) > create mode 100644 events/s390/zEC12/events > create mode 100644 events/s390/zEC12/unit_masks > > diff --git a/events/Makefile.am b/events/Makefile.am > index 758925d..9191a83 100644 > --- a/events/Makefile.am > +++ b/events/Makefile.am > @@ -78,7 +78,8 @@ event_files = \ > tile/tilepro/events tile/tilepro/unit_masks \ > tile/tilegx/events tile/tilegx/unit_masks \ > s390/z10/events s390/z10/unit_masks \ > - s390/z196/events s390/z196/unit_masks > + s390/z196/events s390/z196/unit_masks \ > + s390/zEC12/events s390/zEC12/unit_masks > > install-data-local: > for i in ${event_files} ; do \ > diff --git a/events/s390/zEC12/events b/events/s390/zEC12/events > new file mode 100644 > index 0000000..3a167f7 > --- /dev/null > +++ b/events/s390/zEC12/events > @@ -0,0 +1,7 @@ > +# Copyright OProfile authors > +# Copyright (c) International Business Machines, 2013. > +# Contributed by Andreas Krebbel <kr...@li...>. > +# > +# IBM Enterprise EC12 Basic Mode Sampling events > +# > +event:0x00 counters:0 um:zero minimum:19264 name:HWSAMPLING : Sampling using Basic Mode Hardware Sampling > diff --git a/events/s390/zEC12/unit_masks b/events/s390/zEC12/unit_masks > new file mode 100644 > index 0000000..cfc4dc1 > --- /dev/null > +++ b/events/s390/zEC12/unit_masks > @@ -0,0 +1,7 @@ > +# Copyright OProfile authors > +# Copyright (c) International Business Machines, 2013. > +# Contributed by Andreas Krebbel <kr...@li...>. > +# > +# S/390 Basic Mode Hardware Sampling unit masks > +# > +include:s390/z10 > diff --git a/libop/op_cpu_type.c b/libop/op_cpu_type.c > index a54b2a9..8114f14 100644 > --- a/libop/op_cpu_type.c > +++ b/libop/op_cpu_type.c > @@ -108,6 +108,7 @@ static struct cpu_descr const cpu_descrs[MAX_CPU_TYPE] = { > { "ARM Cortex-A7", "arm/armv7-ca7", CPU_ARM_V7_CA7, 5 }, > { "ARM Cortex-A15", "arm/armv7-ca15", CPU_ARM_V7_CA15, 7 }, > { "Intel Haswell microarchitecture", "i386/haswell", CPU_HASWELL, 4 }, > + { "IBM zEnterprise EC12", "s390/zEC12", CPU_S390_ZEC12, 1 }, > }; > > static size_t const nr_cpu_descrs = sizeof(cpu_descrs) / sizeof(struct cpu_descr); > diff --git a/libop/op_cpu_type.h b/libop/op_cpu_type.h > index 1d5cb64..3d58f3e 100644 > --- a/libop/op_cpu_type.h > +++ b/libop/op_cpu_type.h > @@ -101,6 +101,7 @@ typedef enum { > CPU_ARM_V7_CA7, /**< ARM Cortex-A7 */ > CPU_ARM_V7_CA15, /**< ARM Cortex-A15 */ > CPU_HASWELL, /** < Intel Haswell microarchitecture */ > + CPU_S390_ZEC12, /**< IBM zEnterprise EC12 */ > MAX_CPU_TYPE > } op_cpu; > > diff --git a/libop/op_events.c b/libop/op_events.c > index 6b02fcc..c91f04e 100644 > --- a/libop/op_events.c > +++ b/libop/op_events.c > @@ -1189,8 +1189,10 @@ void op_default_event(op_cpu cpu_type, struct op_default_event_descr * descr) > case CPU_PPC_E300: > descr->name = "CPU_CLK"; > break; > - case CPU_S390_Z10: > - case CPU_S390_Z196: > + > + case CPU_S390_Z10: > + case CPU_S390_Z196: > + case CPU_S390_ZEC12: > if (op_get_nr_counters(cpu_type) > 1) { > descr->name = "HWSAMPLING"; > descr->count = 4127518; > diff --git a/utils/ophelp.c b/utils/ophelp.c > index f48697b..2cd3f2a 100644 > --- a/utils/ophelp.c > +++ b/utils/ophelp.c > @@ -772,6 +772,7 @@ int main(int argc, char const * argv[]) > > case CPU_S390_Z10: > case CPU_S390_Z196: > + case CPU_S390_ZEC12: > event_doc = "IBM System z CPU Measurement Facility\n" > "http://www-01.ibm.com/support/docview.wss" > "?uid=isg26fcd1cc32246f4c8852574ce0044734a\n"; |
From: Robert R. <rr...@ke...> - 2013-04-04 14:34:20
|
Andreas, sorry for this (very) late response. See my comments below. On 09.01.13 10:13:55, Andreas Krebbel wrote: > @@ -438,9 +438,14 @@ static int oprofile_hwsampler_init(struct oprofile_operations *ops) > get_cpu_id (&id); > > switch (id.machine) { > + case 0x2064: case 0x2066: /* z900 */ > + case 0x2084: case 0x2086: /* z990 */ > + case 0x2094: case 0x2096: /* z9-109 */ > + return -ENODEV; > case 0x2097: case 0x2098: ops->cpu_type = "s390/z10"; break; > case 0x2817: case 0x2818: ops->cpu_type = "s390/z196"; break; > - default: return -ENODEV; > + case 0x2827: ops->cpu_type = "s390/zEC12"; break; > + default: ops->cpu_type = "s390/zEC12"; Better add a break here too. If s390/zEC12 is the default, why case 0x2827:? In general I don't feel comfortable with making s390/zEC12 the default for all (present and future) systems. What is your intention of this? This might cause problems if a newer system which is no longer compatible will be detected as s390/zEC12. (Older systems not catched in the -ENODEV case are affected too.) Of course we need to add cpu detection code if the machine id changes for another s390/zEC12 type system. But I prefer to explecitly enable it. Or, if we don't want to change the kernel to implement cpu detection, maybe we move it to userland as done for some other architectures? Anyway I applied your patch as shown below for v3.10. If there are reasons to make s390/zEC12 the default, we can do this in a later patch. Thanks Andreas and sorry again for this late answer. -Robert @@ -440,6 +440,7 @@ static int oprofile_hwsampler_init(struct oprofile_operations *ops) switch (id.machine) { case 0x2097: case 0x2098: ops->cpu_type = "s390/z10"; break; case 0x2817: case 0x2818: ops->cpu_type = "s390/z196"; break; + case 0x2827: ops->cpu_type = "s390/zEC12"; break; default: return -ENODEV; } } |
From: Andreas K. <kr...@li...> - 2013-04-08 07:24:43
|
On 04/04/13 16:34, Robert Richter wrote: > Andreas, > > sorry for this (very) late response. See my comments below. > > On 09.01.13 10:13:55, Andreas Krebbel wrote: >> @@ -438,9 +438,14 @@ static int oprofile_hwsampler_init(struct oprofile_operations *ops) >> get_cpu_id (&id); >> >> switch (id.machine) { >> + case 0x2064: case 0x2066: /* z900 */ >> + case 0x2084: case 0x2086: /* z990 */ >> + case 0x2094: case 0x2096: /* z9-109 */ >> + return -ENODEV; >> case 0x2097: case 0x2098: ops->cpu_type = "s390/z10"; break; >> case 0x2817: case 0x2818: ops->cpu_type = "s390/z196"; break; >> - default: return -ENODEV; >> + case 0x2827: ops->cpu_type = "s390/zEC12"; break; >> + default: ops->cpu_type = "s390/zEC12"; > > Better add a break here too. > > If s390/zEC12 is the default, why case 0x2827:? Just for the sake of having all the CPU IDs in the statement. > > In general I don't feel comfortable with making s390/zEC12 the default > for all (present and future) systems. What is your intention of this? Future systems will support the CPUMF feature since it is a documented facility of the cpu. So while OProfile would show a wrong CPU type for future machines the feature would still be usable. > > This might cause problems if a newer system which is no longer > compatible will be detected as s390/zEC12. (Older systems not catched > in the -ENODEV case are affected too.) Of course we need to add cpu > detection code if the machine id changes for another s390/zEC12 type > system. But I prefer to explecitly enable it. To my understanding future systems are doomed to be compatible with this. The case statement lists all z/Architecture CPU levels. So there should be no system without CPUMF running into the default path. > > Or, if we don't want to change the kernel to implement cpu detection, > maybe we move it to userland as done for some other architectures? > > Anyway I applied your patch as shown below for v3.10. If there are > reasons to make s390/zEC12 the default, we can do this in a later > patch. I would like zEC12 to be the default since it would prevent the hardware sampling from being diabled on future machines in case we don't get a kernel patch upstream in time. -Andreas- > > Thanks Andreas and sorry again for this late answer. > > -Robert > > > > @@ -440,6 +440,7 @@ static int oprofile_hwsampler_init(struct oprofile_operations *ops) > switch (id.machine) { > case 0x2097: case 0x2098: ops->cpu_type = "s390/z10"; break; > case 0x2817: case 0x2818: ops->cpu_type = "s390/z196"; break; > + case 0x2827: ops->cpu_type = "s390/zEC12"; break; > default: return -ENODEV; > } > } > |