Re: [PATCH 01/12] time: Rename udelay_test.c to test_udelay.c
On Fri, Nov 21, 2014 at 11:44 AM, John Stultz wrote: > Kees requested that this test module be renamed for consistency sake, > so this patch renames the udelay_test.c file (recently added to > tip/timers/core for 3.17) to test_udelay.c > > Cc: Kees Cook > Cc: Greg KH > Cc: Stephen Rothwell > Cc: Thomas Gleixner > Cc: Ingo Molnar > Cc: Linux-Next > Cc: David Riley > Signed-off-by: John Stultz Reviewed-by: David Riley -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 01/12] time: Rename udelay_test.c to test_udelay.c
On Fri, Nov 21, 2014 at 11:44 AM, John Stultz john.stu...@linaro.org wrote: Kees requested that this test module be renamed for consistency sake, so this patch renames the udelay_test.c file (recently added to tip/timers/core for 3.17) to test_udelay.c Cc: Kees Cook keesc...@chromium.org Cc: Greg KH g...@kroah.com Cc: Stephen Rothwell s...@canb.auug.org.au Cc: Thomas Gleixner t...@linutronix.de Cc: Ingo Molnar mi...@elte.hu Cc: Linux-Next linux-n...@vger.kernel.org Cc: David Riley davidri...@chromium.org Signed-off-by: John Stultz john.stu...@linaro.org Reviewed-by: David Riley davidri...@chromium.org -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 01/12] time: Rename udelay_test.c to test_udelay.c
On Fri, Nov 21, 2014 at 03:30:51PM -0800, Kees Cook wrote: > On Fri, Nov 21, 2014 at 11:44 AM, John Stultz wrote: > > Kees requested that this test module be renamed for consistency sake, > > so this patch renames the udelay_test.c file (recently added to > > tip/timers/core for 3.17) to test_udelay.c > > > > Cc: Kees Cook > > Cc: Greg KH > > Cc: Stephen Rothwell > > Cc: Thomas Gleixner > > Cc: Ingo Molnar > > Cc: Linux-Next > > Cc: David Riley > > Signed-off-by: John Stultz > > Reviewed-by: Kees Cook Acked-by: Greg Kroah-Hartman -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 01/12] time: Rename udelay_test.c to test_udelay.c
On Fri, Nov 21, 2014 at 11:44 AM, John Stultz wrote: > Kees requested that this test module be renamed for consistency sake, > so this patch renames the udelay_test.c file (recently added to > tip/timers/core for 3.17) to test_udelay.c > > Cc: Kees Cook > Cc: Greg KH > Cc: Stephen Rothwell > Cc: Thomas Gleixner > Cc: Ingo Molnar > Cc: Linux-Next > Cc: David Riley > Signed-off-by: John Stultz Reviewed-by: Kees Cook Yes please! :) -Kees > --- > kernel/time/Makefile | 2 +- > kernel/time/test_udelay.c | 168 > ++ > kernel/time/udelay_test.c | 168 > -- > 3 files changed, 169 insertions(+), 169 deletions(-) > create mode 100644 kernel/time/test_udelay.c > delete mode 100644 kernel/time/udelay_test.c > > diff --git a/kernel/time/Makefile b/kernel/time/Makefile > index 7347426..f622cf2 100644 > --- a/kernel/time/Makefile > +++ b/kernel/time/Makefile > @@ -13,7 +13,7 @@ obj-$(CONFIG_TICK_ONESHOT)+= > tick-oneshot.o > obj-$(CONFIG_TICK_ONESHOT) += tick-sched.o > obj-$(CONFIG_TIMER_STATS) += timer_stats.o > obj-$(CONFIG_DEBUG_FS) += timekeeping_debug.o > -obj-$(CONFIG_TEST_UDELAY) += udelay_test.o > +obj-$(CONFIG_TEST_UDELAY) += test_udelay.o > > $(obj)/time.o: $(obj)/timeconst.h > > diff --git a/kernel/time/test_udelay.c b/kernel/time/test_udelay.c > new file mode 100644 > index 000..e622ba3 > --- /dev/null > +++ b/kernel/time/test_udelay.c > @@ -0,0 +1,168 @@ > +/* > + * udelay() test kernel module > + * > + * Test is executed by writing and reading to /sys/kernel/debug/udelay_test > + * Tests are configured by writing: USECS ITERATIONS > + * Tests are executed by reading from the same file. > + * Specifying usecs of 0 or negative values will run multiples tests. > + * > + * Copyright (C) 2014 Google, Inc. > + * > + * This software is licensed under the terms of the GNU General Public > + * License version 2, as published by the Free Software Foundation, and > + * may be copied, distributed, and modified under those terms. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + */ > + > +#include > +#include > +#include > +#include > +#include > + > +#define DEFAULT_ITERATIONS 100 > + > +#define DEBUGFS_FILENAME "udelay_test" > + > +static DEFINE_MUTEX(udelay_test_lock); > +static struct dentry *udelay_test_debugfs_file; > +static int udelay_test_usecs; > +static int udelay_test_iterations = DEFAULT_ITERATIONS; > + > +static int udelay_test_single(struct seq_file *s, int usecs, uint32_t iters) > +{ > + int min = 0, max = 0, fail_count = 0; > + uint64_t sum = 0; > + uint64_t avg; > + int i; > + /* Allow udelay to be up to 0.5% fast */ > + int allowed_error_ns = usecs * 5; > + > + for (i = 0; i < iters; ++i) { > + struct timespec ts1, ts2; > + int time_passed; > + > + ktime_get_ts(); > + udelay(usecs); > + ktime_get_ts(); > + time_passed = timespec_to_ns() - timespec_to_ns(); > + > + if (i == 0 || time_passed < min) > + min = time_passed; > + if (i == 0 || time_passed > max) > + max = time_passed; > + if ((time_passed + allowed_error_ns) / 1000 < usecs) > + ++fail_count; > + WARN_ON(time_passed < 0); > + sum += time_passed; > + } > + > + avg = sum; > + do_div(avg, iters); > + seq_printf(s, "%d usecs x %d: exp=%d allowed=%d min=%d avg=%lld > max=%d", > + usecs, iters, usecs * 1000, > + (usecs * 1000) - allowed_error_ns, min, avg, max); > + if (fail_count) > + seq_printf(s, " FAIL=%d", fail_count); > + seq_puts(s, "\n"); > + > + return 0; > +} > + > +static int udelay_test_show(struct seq_file *s, void *v) > +{ > + int usecs; > + int iters; > + int ret = 0; > + > + mutex_lock(_test_lock); > + usecs = udelay_test_usecs; > + iters = udelay_test_iterations; > + mutex_unlock(_test_lock); > + > + if (usecs > 0 && iters > 0) { > + return udelay_test_single(s, usecs, iters); > + } else if (usecs == 0) { > + struct timespec ts; > + > + ktime_get_ts(); > + seq_printf(s, "udelay() test (lpj=%ld kt=%ld.%09ld)\n", > + loops_per_jiffy, ts.tv_sec, ts.tv_nsec); > + seq_puts(s, "usage:\n"); > + seq_puts(s, "echo USECS [ITERS] > " DEBUGFS_FILENAME "\n");
[PATCH 01/12] time: Rename udelay_test.c to test_udelay.c
Kees requested that this test module be renamed for consistency sake, so this patch renames the udelay_test.c file (recently added to tip/timers/core for 3.17) to test_udelay.c Cc: Kees Cook Cc: Greg KH Cc: Stephen Rothwell Cc: Thomas Gleixner Cc: Ingo Molnar Cc: Linux-Next Cc: David Riley Signed-off-by: John Stultz --- kernel/time/Makefile | 2 +- kernel/time/test_udelay.c | 168 ++ kernel/time/udelay_test.c | 168 -- 3 files changed, 169 insertions(+), 169 deletions(-) create mode 100644 kernel/time/test_udelay.c delete mode 100644 kernel/time/udelay_test.c diff --git a/kernel/time/Makefile b/kernel/time/Makefile index 7347426..f622cf2 100644 --- a/kernel/time/Makefile +++ b/kernel/time/Makefile @@ -13,7 +13,7 @@ obj-$(CONFIG_TICK_ONESHOT)+= tick-oneshot.o obj-$(CONFIG_TICK_ONESHOT) += tick-sched.o obj-$(CONFIG_TIMER_STATS) += timer_stats.o obj-$(CONFIG_DEBUG_FS) += timekeeping_debug.o -obj-$(CONFIG_TEST_UDELAY) += udelay_test.o +obj-$(CONFIG_TEST_UDELAY) += test_udelay.o $(obj)/time.o: $(obj)/timeconst.h diff --git a/kernel/time/test_udelay.c b/kernel/time/test_udelay.c new file mode 100644 index 000..e622ba3 --- /dev/null +++ b/kernel/time/test_udelay.c @@ -0,0 +1,168 @@ +/* + * udelay() test kernel module + * + * Test is executed by writing and reading to /sys/kernel/debug/udelay_test + * Tests are configured by writing: USECS ITERATIONS + * Tests are executed by reading from the same file. + * Specifying usecs of 0 or negative values will run multiples tests. + * + * Copyright (C) 2014 Google, Inc. + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include + +#define DEFAULT_ITERATIONS 100 + +#define DEBUGFS_FILENAME "udelay_test" + +static DEFINE_MUTEX(udelay_test_lock); +static struct dentry *udelay_test_debugfs_file; +static int udelay_test_usecs; +static int udelay_test_iterations = DEFAULT_ITERATIONS; + +static int udelay_test_single(struct seq_file *s, int usecs, uint32_t iters) +{ + int min = 0, max = 0, fail_count = 0; + uint64_t sum = 0; + uint64_t avg; + int i; + /* Allow udelay to be up to 0.5% fast */ + int allowed_error_ns = usecs * 5; + + for (i = 0; i < iters; ++i) { + struct timespec ts1, ts2; + int time_passed; + + ktime_get_ts(); + udelay(usecs); + ktime_get_ts(); + time_passed = timespec_to_ns() - timespec_to_ns(); + + if (i == 0 || time_passed < min) + min = time_passed; + if (i == 0 || time_passed > max) + max = time_passed; + if ((time_passed + allowed_error_ns) / 1000 < usecs) + ++fail_count; + WARN_ON(time_passed < 0); + sum += time_passed; + } + + avg = sum; + do_div(avg, iters); + seq_printf(s, "%d usecs x %d: exp=%d allowed=%d min=%d avg=%lld max=%d", + usecs, iters, usecs * 1000, + (usecs * 1000) - allowed_error_ns, min, avg, max); + if (fail_count) + seq_printf(s, " FAIL=%d", fail_count); + seq_puts(s, "\n"); + + return 0; +} + +static int udelay_test_show(struct seq_file *s, void *v) +{ + int usecs; + int iters; + int ret = 0; + + mutex_lock(_test_lock); + usecs = udelay_test_usecs; + iters = udelay_test_iterations; + mutex_unlock(_test_lock); + + if (usecs > 0 && iters > 0) { + return udelay_test_single(s, usecs, iters); + } else if (usecs == 0) { + struct timespec ts; + + ktime_get_ts(); + seq_printf(s, "udelay() test (lpj=%ld kt=%ld.%09ld)\n", + loops_per_jiffy, ts.tv_sec, ts.tv_nsec); + seq_puts(s, "usage:\n"); + seq_puts(s, "echo USECS [ITERS] > " DEBUGFS_FILENAME "\n"); + seq_puts(s, "cat " DEBUGFS_FILENAME "\n"); + } + + return ret; +} + +static int udelay_test_open(struct inode *inode, struct file *file) +{ + return single_open(file, udelay_test_show, inode->i_private); +} + +static ssize_t udelay_test_write(struct file *file, const char __user *buf, + size_t count, loff_t *pos) +{ +
[PATCH 01/12] time: Rename udelay_test.c to test_udelay.c
Kees requested that this test module be renamed for consistency sake, so this patch renames the udelay_test.c file (recently added to tip/timers/core for 3.17) to test_udelay.c Cc: Kees Cook keesc...@chromium.org Cc: Greg KH g...@kroah.com Cc: Stephen Rothwell s...@canb.auug.org.au Cc: Thomas Gleixner t...@linutronix.de Cc: Ingo Molnar mi...@elte.hu Cc: Linux-Next linux-n...@vger.kernel.org Cc: David Riley davidri...@chromium.org Signed-off-by: John Stultz john.stu...@linaro.org --- kernel/time/Makefile | 2 +- kernel/time/test_udelay.c | 168 ++ kernel/time/udelay_test.c | 168 -- 3 files changed, 169 insertions(+), 169 deletions(-) create mode 100644 kernel/time/test_udelay.c delete mode 100644 kernel/time/udelay_test.c diff --git a/kernel/time/Makefile b/kernel/time/Makefile index 7347426..f622cf2 100644 --- a/kernel/time/Makefile +++ b/kernel/time/Makefile @@ -13,7 +13,7 @@ obj-$(CONFIG_TICK_ONESHOT)+= tick-oneshot.o obj-$(CONFIG_TICK_ONESHOT) += tick-sched.o obj-$(CONFIG_TIMER_STATS) += timer_stats.o obj-$(CONFIG_DEBUG_FS) += timekeeping_debug.o -obj-$(CONFIG_TEST_UDELAY) += udelay_test.o +obj-$(CONFIG_TEST_UDELAY) += test_udelay.o $(obj)/time.o: $(obj)/timeconst.h diff --git a/kernel/time/test_udelay.c b/kernel/time/test_udelay.c new file mode 100644 index 000..e622ba3 --- /dev/null +++ b/kernel/time/test_udelay.c @@ -0,0 +1,168 @@ +/* + * udelay() test kernel module + * + * Test is executed by writing and reading to /sys/kernel/debug/udelay_test + * Tests are configured by writing: USECS ITERATIONS + * Tests are executed by reading from the same file. + * Specifying usecs of 0 or negative values will run multiples tests. + * + * Copyright (C) 2014 Google, Inc. + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include linux/debugfs.h +#include linux/delay.h +#include linux/ktime.h +#include linux/module.h +#include linux/uaccess.h + +#define DEFAULT_ITERATIONS 100 + +#define DEBUGFS_FILENAME udelay_test + +static DEFINE_MUTEX(udelay_test_lock); +static struct dentry *udelay_test_debugfs_file; +static int udelay_test_usecs; +static int udelay_test_iterations = DEFAULT_ITERATIONS; + +static int udelay_test_single(struct seq_file *s, int usecs, uint32_t iters) +{ + int min = 0, max = 0, fail_count = 0; + uint64_t sum = 0; + uint64_t avg; + int i; + /* Allow udelay to be up to 0.5% fast */ + int allowed_error_ns = usecs * 5; + + for (i = 0; i iters; ++i) { + struct timespec ts1, ts2; + int time_passed; + + ktime_get_ts(ts1); + udelay(usecs); + ktime_get_ts(ts2); + time_passed = timespec_to_ns(ts2) - timespec_to_ns(ts1); + + if (i == 0 || time_passed min) + min = time_passed; + if (i == 0 || time_passed max) + max = time_passed; + if ((time_passed + allowed_error_ns) / 1000 usecs) + ++fail_count; + WARN_ON(time_passed 0); + sum += time_passed; + } + + avg = sum; + do_div(avg, iters); + seq_printf(s, %d usecs x %d: exp=%d allowed=%d min=%d avg=%lld max=%d, + usecs, iters, usecs * 1000, + (usecs * 1000) - allowed_error_ns, min, avg, max); + if (fail_count) + seq_printf(s, FAIL=%d, fail_count); + seq_puts(s, \n); + + return 0; +} + +static int udelay_test_show(struct seq_file *s, void *v) +{ + int usecs; + int iters; + int ret = 0; + + mutex_lock(udelay_test_lock); + usecs = udelay_test_usecs; + iters = udelay_test_iterations; + mutex_unlock(udelay_test_lock); + + if (usecs 0 iters 0) { + return udelay_test_single(s, usecs, iters); + } else if (usecs == 0) { + struct timespec ts; + + ktime_get_ts(ts); + seq_printf(s, udelay() test (lpj=%ld kt=%ld.%09ld)\n, + loops_per_jiffy, ts.tv_sec, ts.tv_nsec); + seq_puts(s, usage:\n); + seq_puts(s, echo USECS [ITERS] DEBUGFS_FILENAME \n); + seq_puts(s, cat DEBUGFS_FILENAME \n); + } + + return ret; +} + +static int udelay_test_open(struct inode *inode, struct
Re: [PATCH 01/12] time: Rename udelay_test.c to test_udelay.c
On Fri, Nov 21, 2014 at 11:44 AM, John Stultz john.stu...@linaro.org wrote: Kees requested that this test module be renamed for consistency sake, so this patch renames the udelay_test.c file (recently added to tip/timers/core for 3.17) to test_udelay.c Cc: Kees Cook keesc...@chromium.org Cc: Greg KH g...@kroah.com Cc: Stephen Rothwell s...@canb.auug.org.au Cc: Thomas Gleixner t...@linutronix.de Cc: Ingo Molnar mi...@elte.hu Cc: Linux-Next linux-n...@vger.kernel.org Cc: David Riley davidri...@chromium.org Signed-off-by: John Stultz john.stu...@linaro.org Reviewed-by: Kees Cook keesc...@chromium.org Yes please! :) -Kees --- kernel/time/Makefile | 2 +- kernel/time/test_udelay.c | 168 ++ kernel/time/udelay_test.c | 168 -- 3 files changed, 169 insertions(+), 169 deletions(-) create mode 100644 kernel/time/test_udelay.c delete mode 100644 kernel/time/udelay_test.c diff --git a/kernel/time/Makefile b/kernel/time/Makefile index 7347426..f622cf2 100644 --- a/kernel/time/Makefile +++ b/kernel/time/Makefile @@ -13,7 +13,7 @@ obj-$(CONFIG_TICK_ONESHOT)+= tick-oneshot.o obj-$(CONFIG_TICK_ONESHOT) += tick-sched.o obj-$(CONFIG_TIMER_STATS) += timer_stats.o obj-$(CONFIG_DEBUG_FS) += timekeeping_debug.o -obj-$(CONFIG_TEST_UDELAY) += udelay_test.o +obj-$(CONFIG_TEST_UDELAY) += test_udelay.o $(obj)/time.o: $(obj)/timeconst.h diff --git a/kernel/time/test_udelay.c b/kernel/time/test_udelay.c new file mode 100644 index 000..e622ba3 --- /dev/null +++ b/kernel/time/test_udelay.c @@ -0,0 +1,168 @@ +/* + * udelay() test kernel module + * + * Test is executed by writing and reading to /sys/kernel/debug/udelay_test + * Tests are configured by writing: USECS ITERATIONS + * Tests are executed by reading from the same file. + * Specifying usecs of 0 or negative values will run multiples tests. + * + * Copyright (C) 2014 Google, Inc. + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include linux/debugfs.h +#include linux/delay.h +#include linux/ktime.h +#include linux/module.h +#include linux/uaccess.h + +#define DEFAULT_ITERATIONS 100 + +#define DEBUGFS_FILENAME udelay_test + +static DEFINE_MUTEX(udelay_test_lock); +static struct dentry *udelay_test_debugfs_file; +static int udelay_test_usecs; +static int udelay_test_iterations = DEFAULT_ITERATIONS; + +static int udelay_test_single(struct seq_file *s, int usecs, uint32_t iters) +{ + int min = 0, max = 0, fail_count = 0; + uint64_t sum = 0; + uint64_t avg; + int i; + /* Allow udelay to be up to 0.5% fast */ + int allowed_error_ns = usecs * 5; + + for (i = 0; i iters; ++i) { + struct timespec ts1, ts2; + int time_passed; + + ktime_get_ts(ts1); + udelay(usecs); + ktime_get_ts(ts2); + time_passed = timespec_to_ns(ts2) - timespec_to_ns(ts1); + + if (i == 0 || time_passed min) + min = time_passed; + if (i == 0 || time_passed max) + max = time_passed; + if ((time_passed + allowed_error_ns) / 1000 usecs) + ++fail_count; + WARN_ON(time_passed 0); + sum += time_passed; + } + + avg = sum; + do_div(avg, iters); + seq_printf(s, %d usecs x %d: exp=%d allowed=%d min=%d avg=%lld max=%d, + usecs, iters, usecs * 1000, + (usecs * 1000) - allowed_error_ns, min, avg, max); + if (fail_count) + seq_printf(s, FAIL=%d, fail_count); + seq_puts(s, \n); + + return 0; +} + +static int udelay_test_show(struct seq_file *s, void *v) +{ + int usecs; + int iters; + int ret = 0; + + mutex_lock(udelay_test_lock); + usecs = udelay_test_usecs; + iters = udelay_test_iterations; + mutex_unlock(udelay_test_lock); + + if (usecs 0 iters 0) { + return udelay_test_single(s, usecs, iters); + } else if (usecs == 0) { + struct timespec ts; + + ktime_get_ts(ts); + seq_printf(s, udelay() test (lpj=%ld kt=%ld.%09ld)\n, + loops_per_jiffy,
Re: [PATCH 01/12] time: Rename udelay_test.c to test_udelay.c
On Fri, Nov 21, 2014 at 03:30:51PM -0800, Kees Cook wrote: On Fri, Nov 21, 2014 at 11:44 AM, John Stultz john.stu...@linaro.org wrote: Kees requested that this test module be renamed for consistency sake, so this patch renames the udelay_test.c file (recently added to tip/timers/core for 3.17) to test_udelay.c Cc: Kees Cook keesc...@chromium.org Cc: Greg KH g...@kroah.com Cc: Stephen Rothwell s...@canb.auug.org.au Cc: Thomas Gleixner t...@linutronix.de Cc: Ingo Molnar mi...@elte.hu Cc: Linux-Next linux-n...@vger.kernel.org Cc: David Riley davidri...@chromium.org Signed-off-by: John Stultz john.stu...@linaro.org Reviewed-by: Kees Cook keesc...@chromium.org Acked-by: Greg Kroah-Hartman gre...@linuxfoundation.org -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/