hc
2023-11-06 e3e12f52b214121840b44c91de5b3e5af5d3eb84
kernel/kernel/time/tick-sched.c
....@@ -69,7 +69,8 @@
6969 return;
7070
7171 /* Reevaluate with jiffies_lock held */
72
- write_seqlock(&jiffies_lock);
72
+ raw_spin_lock(&jiffies_lock);
73
+ write_seqcount_begin(&jiffies_seq);
7374
7475 delta = ktime_sub(now, last_jiffies_update);
7576 if (delta >= tick_period) {
....@@ -95,10 +96,12 @@
9596 /* Keep the tick_next_period variable up to date */
9697 tick_next_period = ktime_add(last_jiffies_update, tick_period);
9798 } else {
98
- write_sequnlock(&jiffies_lock);
99
+ write_seqcount_end(&jiffies_seq);
100
+ raw_spin_unlock(&jiffies_lock);
99101 return;
100102 }
101
- write_sequnlock(&jiffies_lock);
103
+ write_seqcount_end(&jiffies_seq);
104
+ raw_spin_unlock(&jiffies_lock);
102105 update_wall_time();
103106 }
104107
....@@ -109,12 +112,14 @@
109112 {
110113 ktime_t period;
111114
112
- write_seqlock(&jiffies_lock);
115
+ raw_spin_lock(&jiffies_lock);
116
+ write_seqcount_begin(&jiffies_seq);
113117 /* Did we start the jiffies update yet ? */
114118 if (last_jiffies_update == 0)
115119 last_jiffies_update = tick_next_period;
116120 period = last_jiffies_update;
117
- write_sequnlock(&jiffies_lock);
121
+ write_seqcount_end(&jiffies_seq);
122
+ raw_spin_unlock(&jiffies_lock);
118123 return period;
119124 }
120125
....@@ -232,6 +237,7 @@
232237
233238 static DEFINE_PER_CPU(struct irq_work, nohz_full_kick_work) = {
234239 .func = nohz_full_kick_func,
240
+ .flags = IRQ_WORK_HARD_IRQ,
235241 };
236242
237243 /*
....@@ -657,10 +663,10 @@
657663
658664 /* Read jiffies and the time when jiffies were updated last */
659665 do {
660
- seq = read_seqbegin(&jiffies_lock);
666
+ seq = read_seqcount_begin(&jiffies_seq);
661667 basemono = last_jiffies_update;
662668 basejiff = jiffies;
663
- } while (read_seqretry(&jiffies_lock, seq));
669
+ } while (read_seqcount_retry(&jiffies_seq, seq));
664670 ts->last_jiffies = basejiff;
665671 ts->timer_expires_base = basemono;
666672
....@@ -891,14 +897,7 @@
891897 return false;
892898
893899 if (unlikely(local_softirq_pending() && cpu_online(cpu))) {
894
- static int ratelimit;
895
-
896
- if (ratelimit < 10 &&
897
- (local_softirq_pending() & SOFTIRQ_STOP_IDLE_MASK)) {
898
- pr_warn("NOHZ: local_softirq_pending %02x\n",
899
- (unsigned int) local_softirq_pending());
900
- ratelimit++;
901
- }
900
+ softirq_check_pending_idle();
902901 return false;
903902 }
904903
....@@ -1330,7 +1329,7 @@
13301329 /*
13311330 * Emulate tick processing via per-CPU hrtimers:
13321331 */
1333
- hrtimer_init(&ts->sched_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
1332
+ hrtimer_init(&ts->sched_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_HARD);
13341333 ts->sched_timer.function = tick_sched_timer;
13351334
13361335 /* Get the next period (per-CPU) */