From 8696e417db5cfec8cd19992779064f30c1a4fd26 Mon Sep 17 00:00:00 2001 From: Thomas Schoebel-Theuer Date: Wed, 20 Nov 2013 14:10:54 +0100 Subject: [PATCH] infra: make limiter max_delay settable --- kernel/lib_limiter.c | 15 +++++++++++++++ kernel/lib_limiter.h | 14 ++------------ kernel/sy_old/mars_proc.c | 1 + 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/kernel/lib_limiter.c b/kernel/lib_limiter.c index a887d0c7..d422082e 100644 --- a/kernel/lib_limiter.c +++ b/kernel/lib_limiter.c @@ -5,6 +5,8 @@ #include #include +#define LIMITER_TIME_RESOLUTION NSEC_PER_SEC + int mars_limit(struct mars_limiter *lim, int amount) { int delay = 0; @@ -72,3 +74,16 @@ int mars_limit(struct mars_limiter *lim, int amount) return delay; } EXPORT_SYMBOL_GPL(mars_limit); + +void mars_limit_sleep(struct mars_limiter *lim, int amount) +{ + int sleep = mars_limit(lim, amount); + if (sleep > 0) { + if (unlikely(lim->lim_max_delay <= 0)) + lim->lim_max_delay = 1000; + if (sleep > lim->lim_max_delay) + sleep = lim->lim_max_delay; + brick_msleep(sleep); + } +} +EXPORT_SYMBOL_GPL(mars_limit_sleep); diff --git a/kernel/lib_limiter.h b/kernel/lib_limiter.h index 998ef35a..e4427df2 100644 --- a/kernel/lib_limiter.h +++ b/kernel/lib_limiter.h @@ -6,13 +6,12 @@ #include -#define LIMITER_TIME_RESOLUTION NSEC_PER_SEC - struct mars_limiter { /* hierarchy tree */ struct mars_limiter *lim_father; /* tunables */ int lim_max_rate; + int lim_max_delay; /* readable */ int lim_rate; int lim_cumul; @@ -23,15 +22,6 @@ struct mars_limiter { extern int mars_limit(struct mars_limiter *lim, int amount); -extern inline -void mars_limit_sleep(struct mars_limiter *lim, int amount) -{ - int sleep = mars_limit(lim, amount); - if (sleep > 0) { - if (sleep > 1000) - sleep = 1000; - brick_msleep(sleep); - } -} +extern void mars_limit_sleep(struct mars_limiter *lim, int amount); #endif diff --git a/kernel/sy_old/mars_proc.c b/kernel/sy_old/mars_proc.c index 5273aac2..8e4492c1 100644 --- a/kernel/sy_old/mars_proc.c +++ b/kernel/sy_old/mars_proc.c @@ -170,6 +170,7 @@ EXPORT_SYMBOL_GPL(mars_max_loadavg); #define LIMITER_ENTRIES(VAR, PREFIX, SUFFIX) \ INT_ENTRY(PREFIX "_ratelimit_" SUFFIX, (VAR)->lim_max_rate, 0600), \ + INT_ENTRY(PREFIX "_maxdelay_ms", (VAR)->lim_max_delay,0600), \ INT_ENTRY(PREFIX "_cumul_" SUFFIX, (VAR)->lim_cumul, 0600), \ INT_ENTRY(PREFIX "_rate_" SUFFIX, (VAR)->lim_rate, 0400) \