#include <linux/debugfs.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;
int allowed_error_ns = usecs * 5;
for (i = 0; i < iters; ++i) {
if (i == 0 || time_passed < min)
if (i == 0 || time_passed > max)
if ((time_passed + allowed_error_ns) / 1000 < usecs)
WARN_ON(time_passed < 0);
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);
seq_printf(s, " FAIL=%d", fail_count);