Whamcloud - gitweb
LU-14527 kernel: kernel update RHEL7.9 [3.10.0-1160.21.1.el7]
[fs/lustre-release.git] / lustre / kernel_patches / patches / revert-fix-lockup-in-run_timers-large-jiffies-delta.patch
diff --git a/lustre/kernel_patches/patches/revert-fix-lockup-in-run_timers-large-jiffies-delta.patch b/lustre/kernel_patches/patches/revert-fix-lockup-in-run_timers-large-jiffies-delta.patch
deleted file mode 100644 (file)
index a8c1796..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
---- linux-3.10.0-1160.11.1.el7.x86_64/kernel/timer.c   2020-11-30 12:40:05.000000000 -0500
-+++ linux-3.10.0-1160.6.1.el7.x86_64/kernel/timer.c    2020-10-21 13:17:08.000000000 -0400
-@@ -1213,95 +1213,6 @@
-       }
- }
--/*
-- * Total number of list_head entries in tv1-tv5 of struct tvec_base.
-- */
--#define TVEC_LEN      ((offsetofend(struct tvec_base, tv5) -  \
--                        offsetof(struct tvec_base, tv1)) /    \
--                        sizeof(struct list_head))
--
--/**
-- * requeue_timers - requeue all the timers in the timer wheel
-- * @base: the timer vector to be processed.
-- *
-- * When a cpu is idle for a long period of time, it is possible that
-- * timer_jiffies can significantly lag behind jiffies making the iterative
-- * jiffies check in __run_timers() takes a long time to complete causing
-- * soft or hard system lockup.
-- *
-- * This function remedies this situation by requeuing all the timers in
-- * the cascading timer wheel and adjusting timer_jiffies to the min() of
-- * current jiffies and the expiry times of all active timers. The expiry
-- * times of expired deferrable timers will be set to the new timer_jiffies.
-- */
--static noinline void requeue_timers(struct tvec_base *base)
--{
--      struct timer_list *timer, *tmp;
--      struct list_head list, head, *vecs;
--      unsigned long min_jiffies = jiffies;
--      unsigned long nactive = base->active_timers;
--      unsigned long nall = base->all_timers;
--      int i;
--
--      lockdep_assert_held(&base->lock);
--      INIT_LIST_HEAD(&head);
--
--      /*
--       * tv1-tv5 are processed together as a single array of list_head's.
--       */
--      vecs = (struct list_head *)&base->tv1;
--      for (i = 0; i < TVEC_LEN; i++, vecs++) {
--              if (list_empty(vecs))
--                      continue;
--
--              list_replace_init(vecs, &list);
--
--              /*
--               * Check all the timers in list and move them over to head.
--               */
--              list_for_each_entry_safe(timer, tmp, &list, entry) {
--                      base->all_timers--;
--                      if (!tbase_get_deferrable(timer->base)) {
--                              base->active_timers--;
--                              if (time_before(timer->expires, min_jiffies))
--                                      min_jiffies = timer->expires;
--                      }
--                      list_add_tail(&timer->entry, &head);
--              }
--              if (!base->all_timers)
--                      break;
--      }
--      WARN_ON_ONCE(base->all_timers || base->active_timers);
--
--      /*
--       * Restore all_timers and active_timers.
--       * Requeue timers back into timer wheel with timer_jiffies
--       * set to min_jiffies.
--       */
--      base->all_timers = nall;
--      base->active_timers = nactive;
--      base->timer_jiffies = min_jiffies;
--
--      list_for_each_entry_safe(timer, tmp, &head, entry) {
--              unsigned long old_expires;
--              bool restore = false;
--
--              /*
--               * For expiry time that is < min_jiffies (deferrable ones),
--               * temporarily change it to min_jiffies, insert the timer
--               * without accounting and restore the expiry time.
--               */
--              if (time_before(timer->expires, min_jiffies)) {
--                      old_expires = timer->expires;
--                      timer->expires = min_jiffies;
--                      restore = true;
--              }
--              __internal_add_timer(base, timer);
--              if (restore)
--                      timer->expires = old_expires;
--      }
--}
--
- #define INDEX(N) ((base->timer_jiffies >> (TVR_BITS + (N) * TVN_BITS)) & TVN_MASK)
- /**
-@@ -1317,13 +1228,6 @@
-       spin_lock_irq(&base->lock);
--      /*
--       * Requeue the timers if jiffies - timer_jiffies >= 2*TVEC_LEN.
--       */
--      if (base->all_timers &&
--          time_after_eq(jiffies, base->timer_jiffies + 2 * TVEC_LEN))
--              requeue_timers(base);
--
-       while (time_after_eq(jiffies, base->timer_jiffies)) {
-               struct list_head work_list;
-               struct list_head *head = &work_list;