From patchwork Fri Nov 21 19:44:07 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Stultz X-Patchwork-Id: 41353 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-wi0-f197.google.com (mail-wi0-f197.google.com [209.85.212.197]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 776432452C for ; Fri, 21 Nov 2014 19:44:38 +0000 (UTC) Received: by mail-wi0-f197.google.com with SMTP id l15sf108266wiw.8 for ; Fri, 21 Nov 2014 11:44:37 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:delivered-to:from:to:cc:subject :date:message-id:in-reply-to:references:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :list-post:list-help:list-archive:list-unsubscribe; bh=DiCobm7jOdhZ2umtl02LSbEZWEFMrYM1Yz0ySIiSz0U=; b=m7xbHIKigFl+p2wQsWl9ItUezdLEOCmVtaBxSs6LXAj2nwDgFrY9ufC/wWt0llMNwx g8421nQlzXEhgBNGkCyzFB235soQN8kEA/adHgwBOTDNP7K3wW/gqIwDf49AvBfCe85s Itv5xdD+3OuB6MhLRxuI5dhkv/qx9/UYquKQ0sLohohshFJiuJ68ZIpSgnKdmHx2/Vvp VijO3umn5pbk9Wl1fXQhHu9jRRIBav0fkuGhQimN+5FHrzTe9G6b5hPt2ecqBb/+GwgQ zn91abS0QwO6Dx3HeQjr0xZF7ceAlhIg8dC8FjU4NEpNzaF58Jgjl21XlUekIDkm8iHm u9mg== X-Gm-Message-State: ALoCoQntf4LloCtaCYJtnLtoVtIAk/06/UrghUjlSxzXvIKWENGqPT5xC8/8S05yWEcXv//r3MVu X-Received: by 10.152.30.66 with SMTP id q2mr2118036lah.2.1416599077770; Fri, 21 Nov 2014 11:44:37 -0800 (PST) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.87.146 with SMTP id ay18ls248465lab.51.gmail; Fri, 21 Nov 2014 11:44:37 -0800 (PST) X-Received: by 10.152.203.137 with SMTP id kq9mr7224547lac.51.1416599077621; Fri, 21 Nov 2014 11:44:37 -0800 (PST) Received: from mail-la0-f47.google.com (mail-la0-f47.google.com. [209.85.215.47]) by mx.google.com with ESMTPS id qu3si7094546lbb.27.2014.11.21.11.44.37 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 21 Nov 2014 11:44:37 -0800 (PST) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.47 as permitted sender) client-ip=209.85.215.47; Received: by mail-la0-f47.google.com with SMTP id hz20so4783821lab.6 for ; Fri, 21 Nov 2014 11:44:37 -0800 (PST) X-Received: by 10.152.6.228 with SMTP id e4mr7241684laa.71.1416599077517; Fri, 21 Nov 2014 11:44:37 -0800 (PST) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patches@linaro.org Received: by 10.112.184.201 with SMTP id ew9csp153704lbc; Fri, 21 Nov 2014 11:44:36 -0800 (PST) X-Received: by 10.66.232.168 with SMTP id tp8mr10314571pac.132.1416599075093; Fri, 21 Nov 2014 11:44:35 -0800 (PST) Received: from mail-pa0-f46.google.com (mail-pa0-f46.google.com. [209.85.220.46]) by mx.google.com with ESMTPS id bt16si10295386pdb.179.2014.11.21.11.44.34 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 21 Nov 2014 11:44:35 -0800 (PST) Received-SPF: pass (google.com: domain of john.stultz@linaro.org designates 209.85.220.46 as permitted sender) client-ip=209.85.220.46; Received: by mail-pa0-f46.google.com with SMTP id lj1so5482630pab.19 for ; Fri, 21 Nov 2014 11:44:34 -0800 (PST) X-Received: by 10.69.1.34 with SMTP id bd2mr10176105pbd.67.1416599074353; Fri, 21 Nov 2014 11:44:34 -0800 (PST) Received: from localhost.localdomain (c-67-170-153-23.hsd1.or.comcast.net. [67.170.153.23]) by mx.google.com with ESMTPSA id t9sm5513621pbs.75.2014.11.21.11.44.32 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 21 Nov 2014 11:44:33 -0800 (PST) From: John Stultz To: lkml Cc: John Stultz , Kees Cook , Greg KH , Stephen Rothwell , Thomas Gleixner , Ingo Molnar , Linux-Next , David Riley Subject: [PATCH 01/12] time: Rename udelay_test.c to test_udelay.c Date: Fri, 21 Nov 2014 11:44:07 -0800 Message-Id: <1416599058-13836-2-git-send-email-john.stultz@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1416599058-13836-1-git-send-email-john.stultz@linaro.org> References: <1416599058-13836-1-git-send-email-john.stultz@linaro.org> X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: john.stultz@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.47 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Precedence: list Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org List-ID: X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , 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 --- 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 0000000..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(&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 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) +{ + char lbuf[32]; + int ret; + int usecs; + int iters; + + if (count >= sizeof(lbuf)) + return -EINVAL; + + if (copy_from_user(lbuf, buf, count)) + return -EFAULT; + lbuf[count] = '\0'; + + ret = sscanf(lbuf, "%d %d", &usecs, &iters); + if (ret < 1) + return -EINVAL; + else if (ret < 2) + iters = DEFAULT_ITERATIONS; + + mutex_lock(&udelay_test_lock); + udelay_test_usecs = usecs; + udelay_test_iterations = iters; + mutex_unlock(&udelay_test_lock); + + return count; +} + +static const struct file_operations udelay_test_debugfs_ops = { + .owner = THIS_MODULE, + .open = udelay_test_open, + .read = seq_read, + .write = udelay_test_write, + .llseek = seq_lseek, + .release = single_release, +}; + +static int __init udelay_test_init(void) +{ + mutex_lock(&udelay_test_lock); + udelay_test_debugfs_file = debugfs_create_file(DEBUGFS_FILENAME, + S_IRUSR, NULL, NULL, &udelay_test_debugfs_ops); + mutex_unlock(&udelay_test_lock); + + return 0; +} + +module_init(udelay_test_init); + +static void __exit udelay_test_exit(void) +{ + mutex_lock(&udelay_test_lock); + debugfs_remove(udelay_test_debugfs_file); + mutex_unlock(&udelay_test_lock); +} + +module_exit(udelay_test_exit); + +MODULE_AUTHOR("David Riley "); +MODULE_LICENSE("GPL"); diff --git a/kernel/time/udelay_test.c b/kernel/time/udelay_test.c deleted file mode 100644 index e622ba3..0000000 --- a/kernel/time/udelay_test.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * 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(&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 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) -{ - char lbuf[32]; - int ret; - int usecs; - int iters; - - if (count >= sizeof(lbuf)) - return -EINVAL; - - if (copy_from_user(lbuf, buf, count)) - return -EFAULT; - lbuf[count] = '\0'; - - ret = sscanf(lbuf, "%d %d", &usecs, &iters); - if (ret < 1) - return -EINVAL; - else if (ret < 2) - iters = DEFAULT_ITERATIONS; - - mutex_lock(&udelay_test_lock); - udelay_test_usecs = usecs; - udelay_test_iterations = iters; - mutex_unlock(&udelay_test_lock); - - return count; -} - -static const struct file_operations udelay_test_debugfs_ops = { - .owner = THIS_MODULE, - .open = udelay_test_open, - .read = seq_read, - .write = udelay_test_write, - .llseek = seq_lseek, - .release = single_release, -}; - -static int __init udelay_test_init(void) -{ - mutex_lock(&udelay_test_lock); - udelay_test_debugfs_file = debugfs_create_file(DEBUGFS_FILENAME, - S_IRUSR, NULL, NULL, &udelay_test_debugfs_ops); - mutex_unlock(&udelay_test_lock); - - return 0; -} - -module_init(udelay_test_init); - -static void __exit udelay_test_exit(void) -{ - mutex_lock(&udelay_test_lock); - debugfs_remove(udelay_test_debugfs_file); - mutex_unlock(&udelay_test_lock); -} - -module_exit(udelay_test_exit); - -MODULE_AUTHOR("David Riley "); -MODULE_LICENSE("GPL");