]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
refscale: Add test for sched_clock()
authorPaul E. McKenney <paulmck@kernel.org>
Wed, 9 Oct 2024 18:02:49 +0000 (11:02 -0700)
committerUladzislau Rezki (Sony) <urezki@gmail.com>
Sat, 14 Dec 2024 15:16:33 +0000 (16:16 +0100)
This commit adds a "sched-clock" test for the sched_clock() function.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
kernel/rcu/refscale.c

index aacfcc9838b374e750f81c5744f893c38655a0ac..1b47376acdc40be6795673edf2486a712e3e3ba8 100644 (file)
@@ -36,6 +36,7 @@
 #include <linux/slab.h>
 #include <linux/torture.h>
 #include <linux/types.h>
+#include <linux/sched/clock.h>
 
 #include "rcu.h"
 
@@ -531,6 +532,39 @@ static const struct ref_scale_ops acqrel_ops = {
 
 static volatile u64 stopopts;
 
+static void ref_sched_clock_section(const int nloops)
+{
+       u64 x = 0;
+       int i;
+
+       preempt_disable();
+       for (i = nloops; i >= 0; i--)
+               x += sched_clock();
+       preempt_enable();
+       stopopts = x;
+}
+
+static void ref_sched_clock_delay_section(const int nloops, const int udl, const int ndl)
+{
+       u64 x = 0;
+       int i;
+
+       preempt_disable();
+       for (i = nloops; i >= 0; i--) {
+               x += sched_clock();
+               un_delay(udl, ndl);
+       }
+       preempt_enable();
+       stopopts = x;
+}
+
+static const struct ref_scale_ops sched_clock_ops = {
+       .readsection    = ref_sched_clock_section,
+       .delaysection   = ref_sched_clock_delay_section,
+       .name           = "sched-clock"
+};
+
+
 static void ref_clock_section(const int nloops)
 {
        u64 x = 0;
@@ -1130,9 +1164,9 @@ ref_scale_init(void)
        int firsterr = 0;
        static const struct ref_scale_ops *scale_ops[] = {
                &rcu_ops, &srcu_ops, &srcu_lite_ops, RCU_TRACE_OPS RCU_TASKS_OPS
-               &refcnt_ops, &rwlock_ops, &rwsem_ops, &lock_ops, &lock_irq_ops, &acqrel_ops,
-               &clock_ops, &jiffies_ops, &typesafe_ref_ops, &typesafe_lock_ops,
-               &typesafe_seqlock_ops,
+               &refcnt_ops, &rwlock_ops, &rwsem_ops, &lock_ops, &lock_irq_ops,
+               &acqrel_ops, &sched_clock_ops, &clock_ops, &jiffies_ops,
+               &typesafe_ref_ops, &typesafe_lock_ops, &typesafe_seqlock_ops,
        };
 
        if (!torture_init_begin(scale_type, verbose))