commit 0d2beb3d4125d65c415860d66974db9a5532ac84 Author: Dario Faggioli Date: Wed Sep 26 11:47:06 2018 +0200 xen: RCU: bootparam to force quiescence at every call. Signed-off-by: Dario Faggioli diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c index 0f4b1f2a5d..536eb17017 100644 --- a/xen/arch/arm/traps.c +++ b/xen/arch/arm/traps.c @@ -110,7 +110,10 @@ static enum { static int __init parse_vwfi(const char *s) { if ( !strcmp(s, "native") ) + { + rcu_always_quiesc = true; vwfi = NATIVE; + } else vwfi = TRAP; diff --git a/xen/common/rcupdate.c b/xen/common/rcupdate.c index 3517790913..219dd2884f 100644 --- a/xen/common/rcupdate.c +++ b/xen/common/rcupdate.c @@ -140,6 +140,9 @@ static int qhimark = 10000; static int qlowmark = 100; static int rsinterval = 1000; +bool rcu_always_quiesc = false; +boolean_param("rcu_force_quiesc", rcu_always_quiesc); + struct rcu_barrier_data { struct rcu_head head; atomic_t *cpu_count; @@ -562,6 +565,13 @@ static void rcu_init_percpu_data(int cpu, struct rcu_ctrlblk *rcp, rdp->quiescbatch = rcp->completed; rdp->qs_pending = 0; rdp->cpu = cpu; + if ( rcu_always_quiesc ) + { + blimit = INT_MAX; + qhimark = 0; + qlowmark = 0; + //rsinterval = 0; + } rdp->blimit = blimit; init_timer(&rdp->idle_timer, rcu_idle_timer_handler, rdp, cpu); } diff --git a/xen/include/xen/rcupdate.h b/xen/include/xen/rcupdate.h index 3402eb5caf..274a01acf6 100644 --- a/xen/include/xen/rcupdate.h +++ b/xen/include/xen/rcupdate.h @@ -56,6 +56,8 @@ struct rcu_head { } while (0) +extern bool rcu_always_quiesc; + int rcu_pending(int cpu); int rcu_needs_cpu(int cpu);