Add lttctl support for switch_timer
authorMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Thu, 12 Nov 2009 21:57:28 +0000 (16:57 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Thu, 12 Nov 2009 21:57:28 +0000 (16:57 -0500)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
configure.in
liblttctl/liblttctl.c
liblttctl/lttctl.h
lttctl/lttctl.c

index 6ce398fc3ecd80c6039be89046ecfa5bf7467aa5..39d7f49753d023d5f77b584b88de8582ce5e445a 100644 (file)
@@ -23,7 +23,7 @@
 AC_PREREQ(2.57)
 AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
 #AC_WITH_LTDL  # not needed ?
-AM_INIT_AUTOMAKE(ltt-control,0.72-23102009)
+AM_INIT_AUTOMAKE(ltt-control,0.73-12112009)
 AM_CONFIG_HEADER(config.h)
 AM_PROG_LIBTOOL
 
index 6d49aeb37b440dc631376975ef1cac3acb2120d6..e9f4f180e0728e52ccf76f7902ca4a65d5c8db48 100644 (file)
@@ -640,6 +640,7 @@ static int __lttctl_set_channel_subbuf_size(const char *name,
        if (ret)
                fprintf(stderr, "Set channel's subbuf size failed\n");
 }
+
 int lttctl_set_channel_subbuf_size(const char *name, const char *channel,
                unsigned subbuf_size)
 {
@@ -690,6 +691,73 @@ arg_error:
        return ret;
 }
 
+static int __lttctl_set_channel_switch_timer(const char *name,
+               const char *channel, unsigned switch_timer)
+{
+       int ret;
+       char ctlfname[PATH_MAX];
+       char opstr[32];
+
+       sprintf(ctlfname, "%s/ltt/control/%s/channel/%s/switch_timer",
+               debugfsmntdir, name, channel);
+
+       sprintf(opstr, "%u", switch_timer);
+
+       ret = lttctl_sendop(ctlfname, opstr);
+       if (ret)
+               fprintf(stderr, "Set channel's switch timer failed\n");
+}
+
+int lttctl_set_channel_switch_timer(const char *name, const char *channel,
+               unsigned switch_timer)
+{
+       int ret;
+       char **channellist;
+       int n_channel;
+
+       if (!name || !channel) {
+               fprintf(stderr, "%s: args invalid\n", __func__);
+               ret = -EINVAL;
+               goto arg_error;
+       }
+
+       ret = lttctl_check_trace(name, 1);
+       if (ret)
+               goto arg_error;
+
+       if (strcmp(channel, "all")) {
+               ret = __lttctl_set_channel_subbuf_size(name, channel,
+                       switch_timer);
+               if (ret)
+                       goto op_err;
+       } else {
+               /* allow set subbuf_size for metadata channel */
+               n_channel = lttctl_get_channellist(name, &channellist, 1);
+               if (n_channel < 0) {
+                       fprintf(stderr, "%s: lttctl_get_channellist failed\n",
+                               __func__);
+                       ret = -ENOENT;
+                       goto op_err;
+               }
+
+               for (; n_channel > 0; n_channel--) {
+                       ret = __lttctl_set_channel_switch_timer(name,
+                               channellist[n_channel - 1], switch_timer);
+                       if (ret)
+                               goto op_err_clean;
+               }
+               lttctl_free_channellist(channellist, n_channel);
+       }
+
+       return 0;
+
+op_err_clean:
+       lttctl_free_channellist(channellist, n_channel);
+op_err:
+arg_error:
+       return ret;
+}
+
 int getdebugfsmntdir(char *mntdir)
 {
        char mnt_dir[PATH_MAX];
index facc8f05f0b4ada702e936f0d6bc8970f49f4e8e..55a7b4cfd6a3330e9d32fa634178d754993a0e62 100644 (file)
@@ -35,6 +35,8 @@ int lttctl_set_channel_subbuf_num(const char *name, const char *channel,
                unsigned subbuf_num);
 int lttctl_set_channel_subbuf_size(const char *name, const char *channel,
                unsigned subbuf_size);
+int lttctl_set_channel_switch_timer(const char *name, const char *channel,
+               unsigned switch_timer);
 
 /* Helper functions */
 int getdebugfsmntdir(char *mntdir);
index e08280aab2e066cd19f3b8479df1e6ae8ad9397a..7380136fc6eefcbe1e0c4bb3da3e81e80815a438 100644 (file)
@@ -41,6 +41,7 @@ struct channel_option {
        int overwrite;
        int bufnum;
        int bufsize;
+       int switch_timer;
 };
 
 struct lttctl_option {
@@ -124,6 +125,8 @@ static void show_arguments(void)
        printf("        channel.<channelname>.bufsize= (in bytes, rounded to "
               "next power of 2)\n");
        printf("        <channelname> can be set to all for all channels\n");
+       printf("        channel.<channelname>.switch_timer= (timer interval in "
+              "ms)\n");
        printf("\n");
        printf(" Integration options:\n");
        printf("  -C, --create_start\n");
@@ -205,6 +208,7 @@ static void init_channel_opt(struct channel_option *opt, char *opt_name)
                opt->overwrite = -1;
                opt->bufnum = -1;
                opt->bufsize = -1;
+               opt->switch_timer = -1;
                strcpy(opt->chan_name, opt_name);
        }
 }
@@ -291,6 +295,14 @@ int set_channel_opt(struct channel_option *opt, char *opt_name, char *opt_valstr
                
                opt->bufsize = opt_val;
                return 0;
+       } else if (!strcmp("switch_timer", opt_name)) {
+               ret = sscanf(opt_valstr, "%d", &opt_val);
+               if (ret != 1 || opt_val < 0) {
+                       return -EINVAL;
+               }
+               
+               opt->switch_timer = opt_val;
+               return 0;
        } else {
                return -EINVAL;
        }
@@ -622,6 +634,11 @@ static int lttctl_channel_setup(struct channel_option *opt)
                                                          opt->bufsize)) != 0)
                        return ret;
        }
+       if (opt->switch_timer != -1) {
+               if ((ret = lttctl_set_channel_switch_timer(opt_tracename,
+                               opt->chan_name, opt->switch_timer)) != 0)
+                       return ret;
+       }
 
        return 0;
 }
This page took 0.026202 seconds and 4 git commands to generate.