Module: xenomai-forge
Branch: next
Commit: 661a683acd7af9a1618f05e5ac63f732efcbea26
URL:    
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=661a683acd7af9a1618f05e5ac63f732efcbea26

Author: Philippe Gerum <r...@xenomai.org>
Date:   Tue Aug 12 11:24:20 2014 +0200

autotune: make completely silent in --quiet mode

---

 include/rtdm/uapi/autotune.h       |   11 ++++--
 kernel/drivers/autotune/autotune.c |   68 ++++++++++++++++++++++--------------
 utils/autotune/autotune.c          |   17 +++++----
 3 files changed, 61 insertions(+), 35 deletions(-)

diff --git a/include/rtdm/uapi/autotune.h b/include/rtdm/uapi/autotune.h
index df38b2c..4a75d72 100644
--- a/include/rtdm/uapi/autotune.h
+++ b/include/rtdm/uapi/autotune.h
@@ -23,9 +23,14 @@
 #define RTDM_CLASS_AUTOTUNE            RTDM_CLASS_MISC
 #define RTDM_SUBCLASS_AUTOTUNE         0
 
-#define AUTOTUNE_RTIOC_IRQ             _IOW(RTDM_CLASS_AUTOTUNE, 0, int)
-#define AUTOTUNE_RTIOC_KERN            _IOW(RTDM_CLASS_AUTOTUNE, 1, int)
-#define AUTOTUNE_RTIOC_USER            _IOW(RTDM_CLASS_AUTOTUNE, 2, int)
+struct autotune_setup {
+       int period;
+       int quiet;
+};
+
+#define AUTOTUNE_RTIOC_IRQ             _IOW(RTDM_CLASS_AUTOTUNE, 0, struct 
autotune_setup)
+#define AUTOTUNE_RTIOC_KERN            _IOW(RTDM_CLASS_AUTOTUNE, 1, struct 
autotune_setup)
+#define AUTOTUNE_RTIOC_USER            _IOW(RTDM_CLASS_AUTOTUNE, 2, struct 
autotune_setup)
 #define AUTOTUNE_RTIOC_PULSE           _IOW(RTDM_CLASS_AUTOTUNE, 3, 
nanosecs_abs_t)
 #define AUTOTUNE_RTIOC_RUN             _IOR(RTDM_CLASS_AUTOTUNE, 4, unsigned 
long)
 #define AUTOTUNE_RTIOC_RESET           _IO(RTDM_CLASS_AUTOTUNE, 5)
diff --git a/kernel/drivers/autotune/autotune.c 
b/kernel/drivers/autotune/autotune.c
index d73d0ac..e250527 100644
--- a/kernel/drivers/autotune/autotune.c
+++ b/kernel/drivers/autotune/autotune.c
@@ -73,7 +73,7 @@ struct uthread_gravity_tuner {
 
 struct autotune_context {
        struct gravity_tuner *tuner;
-       int period;
+       struct autotune_setup setup;
 };
 
 static inline void init_tuner(struct gravity_tuner *tuner)
@@ -382,7 +382,7 @@ struct uthread_gravity_tuner uthread_tuner = {
        },
 };
 
-static int tune_gravity(struct gravity_tuner *tuner, int period)
+static int tune_gravity(struct gravity_tuner *tuner, int period, int quiet)
 {
        unsigned long old_gravity, gravity;
        struct tuner_state *state;
@@ -428,7 +428,8 @@ static int tune_gravity(struct gravity_tuner *tuner, int 
period)
                        goto fail;
 
                if (state->min_lat <= 0) {
-                       printk(XENO_WARN
+                       if (!quiet)
+                               printk(XENO_WARN
                               "auto-tuning[%s]: early shot by %Ld ns"
                               ": disabling gravity\n",
                               tuner->name,
@@ -446,12 +447,14 @@ static int tune_gravity(struct gravity_tuner *tuner, int 
period)
                 */
                if (state->min_lat > minlat) {
 #ifdef CONFIG_XENO_OPT_DEBUG_NUCLEUS
-                       printk(XENO_INFO "autotune[%s]: "
-                              "at wedge (min_ns %Ld => %Ld), gravity reset to 
%Ld ns\n",
-                              tuner->name,
-                              xnclock_ticks_to_ns(&nkclock, minlat),
-                              xnclock_ticks_to_ns(&nkclock, state->min_lat),
-                              xnclock_ticks_to_ns(&nkclock, gravity));
+                       if (!quiet)
+                               printk(XENO_INFO "autotune[%s]: "
+                                      "at wedge (min_ns %Ld => %Ld), "
+                                      "gravity reset to %Ld ns\n",
+                                      tuner->name,
+                                      xnclock_ticks_to_ns(&nkclock, minlat),
+                                      xnclock_ticks_to_ns(&nkclock, 
state->min_lat),
+                                      xnclock_ticks_to_ns(&nkclock, gravity));
 #endif
                        if (++wedge >= 5)
                                goto done;
@@ -472,27 +475,32 @@ static int tune_gravity(struct gravity_tuner *tuner, int 
period)
                gravity = tuner->get_gravity(tuner);
                tuner->adjust_gravity(tuner, adjust);
 #ifdef CONFIG_XENO_OPT_DEBUG_NUCLEUS
-               printk(XENO_INFO "autotune[%s]: min=%Ld | max=%Ld | avg=%Ld | 
gravity(%lut + adj=%ldt)\n",
-                      tuner->name,
-                      xnclock_ticks_to_ns(&nkclock, minlat),
-                      xnclock_ticks_to_ns(&nkclock, state->max_lat),
-                      xnclock_ticks_to_ns(&nkclock,
-                          xnarch_llimd(state->sum_lat, 1, (state->cur_samples 
?: 1))),
+               if (!quiet)
+                       printk(XENO_INFO "autotune[%s]: min=%Ld | max=%Ld |"
+                              "avg=%Ld | gravity(%lut + adj=%ldt)\n",
+                              tuner->name,
+                              xnclock_ticks_to_ns(&nkclock, minlat),
+                              xnclock_ticks_to_ns(&nkclock, state->max_lat),
+                              xnclock_ticks_to_ns(&nkclock,
+                                  xnarch_llimd(state->sum_lat, 1,
+                                               (state->cur_samples ?: 1))),
                       gravity, adjust);
 #endif
        }
 
-       printk(XENO_INFO "could not auto-tune (%s) after %ds\n",
+       printk(XENO_ERR "could not auto-tune (%s) after %ds\n",
               tuner->name, AUTOTUNE_STEPS);
 
        return -EINVAL;
 done:
        tuner->set_gravity(tuner, H2G2_FACTOR(gravity));
 
-       printk(XENO_INFO "auto-tuning[%s]: gravity_ns=%Ld, min_ns=%Ld\n",
-              tuner->name,
-              xnclock_ticks_to_ns(&nkclock, tuner->get_gravity(tuner)),
-              step > 1 ? xnclock_ticks_to_ns(&nkclock, minlat) : 0);
+       if (!quiet)
+               printk(XENO_INFO
+                      "auto-tuning[%s]: gravity_ns=%Ld, min_ns=%Ld\n",
+                      tuner->name,
+                      xnclock_ticks_to_ns(&nkclock, tuner->get_gravity(tuner)),
+                      step > 1 ? xnclock_ticks_to_ns(&nkclock, minlat) : 0);
 
        return 0;
 fail:
@@ -504,9 +512,14 @@ fail:
 static int autotune_ioctl_nrt(struct rtdm_fd *fd, unsigned int request, void 
*arg)
 {
        struct autotune_context *context;
+       struct autotune_setup setup;
        struct gravity_tuner *tuner;
        int period, ret;
 
+       ret = rtdm_copy_from_user(fd, &setup, arg, sizeof(setup));
+       if (ret)
+               return ret;
+
        context = rtdm_fd_to_private(fd);
 
        /* Clear previous tuner. */
@@ -542,8 +555,11 @@ static int autotune_ioctl_nrt(struct rtdm_fd *fd, unsigned 
int request, void *ar
                return ret;
 
        context->tuner = tuner;
-       context->period = period;
-       printk(XENO_INFO "auto-tuning core clock gravity, %s\n", tuner->name);
+       context->setup = setup;
+
+       if (!setup.quiet)
+               printk(XENO_INFO "auto-tuning core clock gravity, %s\n",
+                      tuner->name);
 
        return ret;
 }
@@ -554,18 +570,18 @@ static int autotune_ioctl_rt(struct rtdm_fd *fd, unsigned 
int request, void *arg
        struct gravity_tuner *tuner;
        nanosecs_abs_t timestamp;
        unsigned long gravity;
-       int period, ret;
+       int ret;
 
        context = rtdm_fd_to_private(fd);
        tuner = context->tuner;
        if (tuner == NULL)
                return -ENOSYS;
 
-       period = context->period;
-
        switch (request) {
        case AUTOTUNE_RTIOC_RUN:
-               ret = tune_gravity(tuner, period);
+               ret = tune_gravity(tuner,
+                                  context->setup.period,
+                                  context->setup.quiet);
                if (ret)
                        break;
                gravity = xnclock_ticks_to_ns(&nkclock,
diff --git a/utils/autotune/autotune.c b/utils/autotune/autotune.c
index 874b4e4..a36c606 100644
--- a/utils/autotune/autotune.c
+++ b/utils/autotune/autotune.c
@@ -188,11 +188,14 @@ static void usage(void)
 
 static void run_tuner(int fd, int op, int period, const char *type)
 {
+       struct autotune_setup setup;
        unsigned long gravity;
        pthread_t sampler;
        int ret;
 
-       ret = ioctl(fd, op, &period);
+       setup.period = period;
+       setup.quiet = quiet;
+       ret = ioctl(fd, op, &setup);
        if (ret)
                error(1, errno, "setup failed (%s)", type);
 
@@ -262,13 +265,15 @@ int main(int argc, char *const argv[])
                        error(1, errno, "reset failed");
        }
 
-       if (!nohog)
-               create_hog(&hog);
-
        period = CONFIG_XENO_DEFAULT_PERIOD;
 
-       if (tune_irqlat || tune_kernlat || tune_userlat)
-               printf("Auto-tuning started (may take some time)\n");
+       if (tune_irqlat || tune_kernlat || tune_userlat) {
+               if (!nohog)
+                       create_hog(&hog);
+               if (!quiet)
+                       printf("Auto-tuning started (may take a while)\n");
+       } else
+               nohog = 1;
 
        if (tune_irqlat)
                run_tuner(fd, AUTOTUNE_RTIOC_IRQ, period, "irq");


_______________________________________________
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git

Reply via email to