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