Message ID | 2dcec22264c46d248e4f56ac5dfd6a8d321b162f.1437120351.git.tgraf@suug.ch |
---|---|
State | Superseded, archived |
Delegated to: | David Miller |
Headers | show |
On Fri, 2015-07-17 at 10:07 +0200, Thomas Graf wrote: > Depending on system speed, the large lookup loop can take a considerable > amount of time to complete causing watchdog warnings to appear. Allow > other tasks to be scheduled after every batch of 1000 lookups. > > Reported-by: Meelis Roos <mroos@linux.ee> > Signed-off-by: Thomas Graf <tgraf@suug.ch> > --- > lib/test_rhashtable.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/lib/test_rhashtable.c b/lib/test_rhashtable.c > index c90777e..5ed6211 100644 > --- a/lib/test_rhashtable.c > +++ b/lib/test_rhashtable.c > @@ -20,8 +20,10 @@ > #include <linux/rcupdate.h> > #include <linux/rhashtable.h> > #include <linux/slab.h> > +#include <linux/sched.h> > > #define MAX_ENTRIES 1000000 > +#define RELAX_CPU_AFTER 1000 > #define TEST_INSERT_FAIL INT_MAX > > static int entries = 50000; > @@ -61,7 +63,7 @@ static struct rhashtable_params test_rht_params = { > > static int __init test_rht_lookup(struct rhashtable *ht) > { > - unsigned int i; > + unsigned int i, relax_cnt = RELAX_CPU_AFTER; > > for (i = 0; i < entries * 2; i++) { > struct test_obj *obj; > @@ -87,6 +89,11 @@ static int __init test_rht_lookup(struct rhashtable *ht) > return -EINVAL; > } > } > + > + if (!relax_cnt--) { > + schedule(); > + relax_cnt = RELAX_CPU_AFTER; > + } > } > > return 0; Please simply use cond_resched() without counting and magic value. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, 2015-07-17 at 10:24 +0200, Eric Dumazet wrote:
> Please simply use cond_resched() without counting and magic value.
Also use cond_resched() in insert and delete phases ?
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
On 07/17/15 at 10:28am, Eric Dumazet wrote: > On Fri, 2015-07-17 at 10:24 +0200, Eric Dumazet wrote: > > > Please simply use cond_resched() without counting and magic value. Done > Also use cond_resched() in insert and delete phases ? When I tried that it made the walker duplicates disappear which weakens the test case a little bit but it's probably safer this way. I'll include it in the v2. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/lib/test_rhashtable.c b/lib/test_rhashtable.c index c90777e..5ed6211 100644 --- a/lib/test_rhashtable.c +++ b/lib/test_rhashtable.c @@ -20,8 +20,10 @@ #include <linux/rcupdate.h> #include <linux/rhashtable.h> #include <linux/slab.h> +#include <linux/sched.h> #define MAX_ENTRIES 1000000 +#define RELAX_CPU_AFTER 1000 #define TEST_INSERT_FAIL INT_MAX static int entries = 50000; @@ -61,7 +63,7 @@ static struct rhashtable_params test_rht_params = { static int __init test_rht_lookup(struct rhashtable *ht) { - unsigned int i; + unsigned int i, relax_cnt = RELAX_CPU_AFTER; for (i = 0; i < entries * 2; i++) { struct test_obj *obj; @@ -87,6 +89,11 @@ static int __init test_rht_lookup(struct rhashtable *ht) return -EINVAL; } } + + if (!relax_cnt--) { + schedule(); + relax_cnt = RELAX_CPU_AFTER; + } } return 0;
Depending on system speed, the large lookup loop can take a considerable amount of time to complete causing watchdog warnings to appear. Allow other tasks to be scheduled after every batch of 1000 lookups. Reported-by: Meelis Roos <mroos@linux.ee> Signed-off-by: Thomas Graf <tgraf@suug.ch> --- lib/test_rhashtable.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)