tracing: Always update snapshot buffer size
[platform/kernel/linux-starfive.git] / kernel / torture.c
index e851b8e..c7b4758 100644 (file)
@@ -721,7 +721,7 @@ static void torture_shutdown_cleanup(void)
  * suddenly applied to or removed from the system.
  */
 static struct task_struct *stutter_task;
-static int stutter_pause_test;
+static ktime_t stutter_till_abs_time;
 static int stutter;
 static int stutter_gap;
 
@@ -731,30 +731,16 @@ static int stutter_gap;
  */
 bool stutter_wait(const char *title)
 {
-       unsigned int i = 0;
        bool ret = false;
-       int spt;
+       ktime_t till_ns;
 
        cond_resched_tasks_rcu_qs();
-       spt = READ_ONCE(stutter_pause_test);
-       for (; spt; spt = READ_ONCE(stutter_pause_test)) {
-               if (!ret && !rt_task(current)) {
-                       sched_set_normal(current, MAX_NICE);
-                       ret = true;
-               }
-               if (spt == 1) {
-                       torture_hrtimeout_jiffies(1, NULL);
-               } else if (spt == 2) {
-                       while (READ_ONCE(stutter_pause_test)) {
-                               if (!(i++ & 0xffff))
-                                       torture_hrtimeout_us(10, 0, NULL);
-                               cond_resched();
-                       }
-               } else {
-                       torture_hrtimeout_jiffies(round_jiffies_relative(HZ), NULL);
-               }
-               torture_shutdown_absorb(title);
+       till_ns = READ_ONCE(stutter_till_abs_time);
+       if (till_ns && ktime_before(ktime_get(), till_ns)) {
+               torture_hrtimeout_ns(till_ns, 0, HRTIMER_MODE_ABS, NULL);
+               ret = true;
        }
+       torture_shutdown_absorb(title);
        return ret;
 }
 EXPORT_SYMBOL_GPL(stutter_wait);
@@ -765,23 +751,16 @@ EXPORT_SYMBOL_GPL(stutter_wait);
  */
 static int torture_stutter(void *arg)
 {
-       DEFINE_TORTURE_RANDOM(rand);
-       int wtime;
+       ktime_t till_ns;
 
        VERBOSE_TOROUT_STRING("torture_stutter task started");
        do {
                if (!torture_must_stop() && stutter > 1) {
-                       wtime = stutter;
-                       if (stutter > 2) {
-                               WRITE_ONCE(stutter_pause_test, 1);
-                               wtime = stutter - 3;
-                               torture_hrtimeout_jiffies(wtime, &rand);
-                               wtime = 2;
-                       }
-                       WRITE_ONCE(stutter_pause_test, 2);
-                       torture_hrtimeout_jiffies(wtime, NULL);
+                       till_ns = ktime_add_ns(ktime_get(),
+                                              jiffies_to_nsecs(stutter));
+                       WRITE_ONCE(stutter_till_abs_time, till_ns);
+                       torture_hrtimeout_jiffies(stutter - 1, NULL);
                }
-               WRITE_ONCE(stutter_pause_test, 0);
                if (!torture_must_stop())
                        torture_hrtimeout_jiffies(stutter_gap, NULL);
                torture_shutdown_absorb("torture_stutter");