This patch changes initialization of pfmon. Now initialization runs
after options are parsed and changes to options take effect also to
pfmon_initialize(). Additionally, the functions argument argv[0] is
now taken from struct options. Initialization is also added to some
stand-alone functions that exit pfmon immediately.

Signed-off-by: Robert Richter <robert.rich...@amd.com>
---
 pfmon/pfmon.c       |   14 ++++++++++----
 pfmon/pfmon_amd64.c |    4 ++--
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/pfmon/pfmon.c b/pfmon/pfmon.c
index 7c2bbc1..6a92814 100644
--- a/pfmon/pfmon.c
+++ b/pfmon/pfmon.c
@@ -85,7 +85,7 @@ static pfmon_support_t *pfmon_cpus[]={
 pfmon_support_t                *pfmon_current; /* current pfmon support */
 program_options_t      options;        /* keep track of global program options 
*/
 
- 
+static void pfmon_initialize(void);
 
 static void
 parse_smpl_pmds(pfmon_event_set_t *set)
@@ -635,6 +635,7 @@ pfmon_list_all_events(char *pattern, int mode)
        char *name;
        size_t len;
 
+       pfmon_initialize();
        pfm_get_max_event_name_len(&len);
        pfm_get_num_events(&count);
        len++; /* accomodate null character */
@@ -760,6 +761,7 @@ static size_t pfmon_option_base_size        = 
sizeof(pfmon_common_options);
 static void
 usage(char **argv)
 {
+       pfmon_initialize();
        printf("usage: %s [OPTIONS]... COMMAND\n", argv[0]);
 
        /*                1         2         3         4         5         6   
      7         8  */
@@ -1257,6 +1259,7 @@ pfmon_show_event_info(char *event)
        unsigned long lcode;
        char name[PFMON_MAX_EVTNAME_LEN];
 
+       pfmon_initialize();
        if (isdigit(*event)) {
 
                /* using strotul() allows base auto-detection */
@@ -1300,6 +1303,7 @@ pfmon_show_info(void)
        pfmon_support_t **supp;
        int ret;
 
+       pfmon_initialize();
        pfm_get_num_counters(&num_cnt);
        pfmon_print_simple_cpuinfo(stdout, "detected host CPUs: ");
        printf("detected PMU model: %s\n", pfmon_current->name ? 
pfmon_current->name : "None");
@@ -1348,7 +1352,7 @@ setup_common_signals(void)
 }
 
 static void
-pfmon_initialize(char **argv)
+pfmon_initialize(void)
 {
        uint64_t long_val;
        pfmlib_event_t e;
@@ -1403,7 +1407,7 @@ pfmon_initialize(char **argv)
                fatal_error("cannot determine max counters\n");
        }
 
-       if (check_forced_generic(argv[0])) {
+       if (check_forced_generic(options.argv[0])) {
 
                if (options.opt_support_gen == 0) 
                        fatal_error("pfmon cannot be forced to generic mode\n");
@@ -1867,7 +1871,7 @@ main(int argc, char **argv)
 
        memset(&pfmlib_options, 0, sizeof(pfmlib_options));
 
-       pfmon_initialize(argv);
+       options.argv    = argv;
 
        while ((c=getopt_long(argc, argv,"+0123kuvhe:Il::L::i:Vt:S:p:", 
pfmon_cmd_options, 0)) != -1) {
                switch(c) {
@@ -2033,6 +2037,7 @@ main(int argc, char **argv)
 
                        case 'S':
                        case 21 : 
+                                 pfmon_initialize();
                                  if (*optarg == '\0') 
fatal_error("--smpl-module-info needs an argument\n");
                                  r = pfmon_find_smpl_module(optarg, &smpl_mod, 
1);
                                  if (r != PFMLIB_SUCCESS)
@@ -2190,6 +2195,7 @@ main(int argc, char **argv)
                }
        }
 
+       pfmon_initialize();
        pfmon_verify_cmdline_options(argc, argv);
        pfmon_verify_event_sets();
 
diff --git a/pfmon/pfmon_amd64.c b/pfmon/pfmon_amd64.c
index 0240135..5683818 100644
--- a/pfmon/pfmon_amd64.c
+++ b/pfmon/pfmon_amd64.c
@@ -296,8 +296,8 @@ pfmon_support_t pfmon_amd64={
        .name                           = "AMD64",
        .pmu_type                       = PFMLIB_AMD64_PMU,
        .generic_pmu_type               = PFMLIB_AMD64_PMU,
-       .pfmon_initialize               = pfmon_amd64_initialize,               
-       .pfmon_usage                    = pfmon_amd64_usage,    
+       .pfmon_initialize               = pfmon_amd64_initialize,
+       .pfmon_usage                    = pfmon_amd64_usage,
        .pfmon_parse_options            = pfmon_amd64_parse_options,
        .pfmon_setup                    = pfmon_amd64_setup,
        .pfmon_verify_cmdline           = pfmon_amd64_verify_cmdline,
-- 
1.6.1.2



------------------------------------------------------------------------------
_______________________________________________
perfmon2-devel mailing list
perfmon2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/perfmon2-devel

Reply via email to