For synchronization mechanisms similar to RCU, there could be no "grace period" concept (e.g. hazard pointers), therefore allow rcu_scale_ops::get_gp_seq to be a NULL pointer for these cases, and simply treat started and finished grace period as 0.
Signed-off-by: Boqun Feng <boqun.f...@gmail.com> --- kernel/rcu/rcuscale.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/kernel/rcu/rcuscale.c b/kernel/rcu/rcuscale.c index 0f3059b1b80d..d9bff4b1928b 100644 --- a/kernel/rcu/rcuscale.c +++ b/kernel/rcu/rcuscale.c @@ -568,8 +568,10 @@ rcu_scale_writer(void *arg) if (gp_exp) { b_rcu_gp_test_started = cur_ops->exp_completed() / 2; - } else { + } else if (cur_ops->get_gp_seq) { b_rcu_gp_test_started = cur_ops->get_gp_seq(); + } else { + b_rcu_gp_test_started = 0; } } @@ -625,9 +627,11 @@ rcu_scale_writer(void *arg) if (gp_exp) { b_rcu_gp_test_finished = cur_ops->exp_completed() / 2; - } else { + } else if (cur_ops->get_gp_seq) { b_rcu_gp_test_finished = cur_ops->get_gp_seq(); + } else { + b_rcu_gp_test_finished = 0; } if (shutdown) { smp_mb(); /* Assign before wake. */ -- 2.47.1