summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO28
-rw-r--r--0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch4
-rw-r--r--0002-random-treat-bootloader-trust-toggle-the-same-way-as.patch8
-rw-r--r--0003-tick-Detect-and-fix-jiffies-update-stall.patch86
-rw-r--r--0004-tick-rcu-Remove-obsolete-rcu_needs_cpu-parameters.patch101
-rw-r--r--0005-tick-rcu-Stop-allowing-RCU_SOFTIRQ-in-idle.patch119
-rw-r--r--0006-lib-irq_poll-Declare-IRQ_POLL-softirq-vector-as-ksof.patch55
-rw-r--r--PKGBUILD22
-rw-r--r--config5
9 files changed, 403 insertions, 25 deletions
diff --git a/.SRCINFO b/.SRCINFO
index c8945937f1eb..5c5cfaab08d5 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,5 +1,5 @@
pkgbase = linux-rc
- pkgver = 5.17.2rc2
+ pkgver = 5.17.3rc1
pkgrel = 1
url = https://www.kernel.org/
arch = x86_64
@@ -12,24 +12,32 @@ pkgbase = linux-rc
makedepends = tar
makedepends = xz
options = !strip
- source = https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.17.2-rc2.xz
- source = https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.17.2-rc2.sign
- source = https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.17.1.tar.xz
- source = https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.17.1.tar.sign
+ source = https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.17.3-rc1.xz
+ source = https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.17.3-rc1.sign
+ source = https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.17.2.tar.xz
+ source = https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.17.2.tar.sign
source = config
source = 0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
source = 0002-random-treat-bootloader-trust-toggle-the-same-way-as.patch
+ source = 0003-tick-Detect-and-fix-jiffies-update-stall.patch
+ source = 0004-tick-rcu-Remove-obsolete-rcu_needs_cpu-parameters.patch
+ source = 0005-tick-rcu-Stop-allowing-RCU_SOFTIRQ-in-idle.patch
+ source = 0006-lib-irq_poll-Declare-IRQ_POLL-softirq-vector-as-ksof.patch
validpgpkeys = ABAF11C65A2970B130ABE3C479BE3E4300411886
validpgpkeys = 647F28654894E3BD457199BE38DBBDC86092693E
validpgpkeys = A2FF3A36AAA56654109064AB19802F8B0D70FC30
validpgpkeys = C7E7849466FE2358343588377258734B41C31549
- b2sums = 254d82d42bc9e38c2dd8a101be3e01b0314e7fb6475fc70885a1d42063f869ca4de5ba320c4c304ce7ec32d3dd6e47f67c4d75e8eb457f011852007c05bf08d3
+ b2sums = 810d9f49d3a1f2120c18b5e5a8205bd477dd433c38176ff14b5794cf68107e1de1a1a434a02e871689b2c022e79ce07fdb53285d3a555eaf5ccab66dbd6016cd
b2sums = SKIP
- b2sums = 1275903955f014d0a0b4cad9074710d36825b274814cde457cf9e1f9acc188b21da7de01100f99cfe9644fb7fd182a95257d124a6992ac3be47adb907e230616
+ b2sums = d3fce962b0243ad30a4385626cf90da2f04a6b8e745bcedd1d6f2e01fdd9c32beb443b2ae7979bcee32c730461cb4653ff726432ea28f2a5ab5c12e63ef4b6b4
b2sums = SKIP
- b2sums = 000ab21fc39af4ba189881fd1ad0997043a166488ae73affd6ecb7c621ae4f71f2e8778b4112569309da4c937e045a53240a44be08808d8ef6853d02e0a28448
- b2sums = e01ccd70d0180fb6d270505fbc8cb2bd4815b334b3366365d931e758ebcad14fabd13644f5adf79be2d85f44dde39542c5318fa135cd18366d38eed85ebb01d7
- b2sums = b48d97933d3ff496c0ee3aba369f2a671df4fb56a21c800d47871f9b78513f1ab5a997cd6be7affd2421cb83adb2a17a8a57ed76f42a4dcf81d4b66bb75137d5
+ b2sums = 3d1e2c1dff1e828c655b449962fb47c49fdf77d58c65c8af41ee8c56fbb2d8fdb7d0b963c775b26ac4022c6e0f9c8d19c11bc1e0e358580396520e9261bc8eeb
+ b2sums = 80bb7cc9c21721c6db0180f094cd6fa0bc441ee9103d81b203c76028752041504fa53f57f066cd79937623ae4d4f7d05ad6cc18a59b544cc0ce689675a483432
+ b2sums = c1187ed81fc89682679fb9968f7f02a81c5cb748d87e16b4f5cf733c02df64c1e1cb58f7a028e79c31d7f8ca6fdb814932da66835bde321676ea8afe3e1b4ae1
+ b2sums = a1a258341cc1b0b27b036a2ef701ae3e3ac202b24647b845a1df1f3cc87756f610b81cd93d442b412beaeef1e4ccff21f7b5ef77efb06db5dd245a32b70823a1
+ b2sums = 1d763f9a80fc0d5c15a2b6d9fcfa1d5702f6b53786129332f8cc110f91fdecc234f6ded6337fd9afffd70afac01fb317ae9f1f25032eb2ae72d523c38520088c
+ b2sums = 556227cebb817d7b3f98ea3118c912cfd57d712c5695ec893d0837184f89a7b8848030e1f8519e7bc4119fbd45041902f1fcc04b7901701e6c384889b0b001b2
+ b2sums = 992b3665a33a181581d5beaec5b68ac8de4590f606550a816d5d6bc9621cd13e7d89c6e46378f0fda3ad263d3a9172a9bb6c5a8eacf9aee1ffe17f89f80d4bf9
pkgname = linux-rc
pkgdesc = The release candidate kernel and modules
diff --git a/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch b/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
index 434746fbd598..5cf889020950 100644
--- a/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
+++ b/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
@@ -1,7 +1,7 @@
-From ba9638ad03df373965160a5bdb4173b544381767 Mon Sep 17 00:00:00 2001
+From 452993f7fd308f9da6d8db8757851949031ab633 Mon Sep 17 00:00:00 2001
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
Date: Mon, 16 Sep 2019 04:53:20 +0200
-Subject: [PATCH 1/4] ZEN: Add sysctl and CONFIG to disallow unprivileged
+Subject: [PATCH 1/9] ZEN: Add sysctl and CONFIG to disallow unprivileged
CLONE_NEWUSER
Our default behavior continues to match the vanilla kernel.
diff --git a/0002-random-treat-bootloader-trust-toggle-the-same-way-as.patch b/0002-random-treat-bootloader-trust-toggle-the-same-way-as.patch
index e3afef7dc011..98c834e9d373 100644
--- a/0002-random-treat-bootloader-trust-toggle-the-same-way-as.patch
+++ b/0002-random-treat-bootloader-trust-toggle-the-same-way-as.patch
@@ -1,7 +1,7 @@
-From 22365749abd27f2cb582a049da42b7c7a02b6bfe Mon Sep 17 00:00:00 2001
+From 7245d2b84aa844b071b833e25d49cf5138b822a3 Mon Sep 17 00:00:00 2001
From: "Jason A. Donenfeld" <Jason@zx2c4.com>
Date: Wed, 23 Mar 2022 23:09:30 -0600
-Subject: [PATCH 2/4] random: treat bootloader trust toggle the same way as cpu
+Subject: [PATCH 2/9] random: treat bootloader trust toggle the same way as cpu
trust toggle
If CONFIG_RANDOM_TRUST_CPU is set, the RNG initializes using RDRAND.
@@ -29,10 +29,10 @@ Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
3 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
-index 7123524a86b8..973e1de5f29e 100644
+index 59f881f36779..bdc733c2561d 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
-@@ -4356,6 +4356,12 @@
+@@ -4355,6 +4355,12 @@
fully seed the kernel's CRNG. Default is controlled
by CONFIG_RANDOM_TRUST_CPU.
diff --git a/0003-tick-Detect-and-fix-jiffies-update-stall.patch b/0003-tick-Detect-and-fix-jiffies-update-stall.patch
new file mode 100644
index 000000000000..be56c710811d
--- /dev/null
+++ b/0003-tick-Detect-and-fix-jiffies-update-stall.patch
@@ -0,0 +1,86 @@
+From e3fb9a238974e20ab8a7b56e9f6a19e2acdc9b87 Mon Sep 17 00:00:00 2001
+From: Frederic Weisbecker <frederic@kernel.org>
+Date: Wed, 2 Feb 2022 01:01:07 +0100
+Subject: [PATCH 3/9] tick: Detect and fix jiffies update stall
+
+On some rare cases, the timekeeper CPU may be delaying its jiffies
+update duty for a while. Known causes include:
+
+* The timekeeper is waiting on stop_machine in a MULTI_STOP_DISABLE_IRQ
+ or MULTI_STOP_RUN state. Disabled interrupts prevent from timekeeping
+ updates while waiting for the target CPU to complete its
+ stop_machine() callback.
+
+* The timekeeper vcpu has VMEXIT'ed for a long while due to some overload
+ on the host.
+
+Detect and fix these situations with emergency timekeeping catchups.
+
+Original-patch-by: Paul E. McKenney <paulmck@kernel.org>
+Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+---
+ kernel/time/tick-sched.c | 17 +++++++++++++++++
+ kernel/time/tick-sched.h | 4 ++++
+ 2 files changed, 21 insertions(+)
+
+diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
+index 17a283ce2b20..c89f50a7e690 100644
+--- a/kernel/time/tick-sched.c
++++ b/kernel/time/tick-sched.c
+@@ -169,6 +169,8 @@ static ktime_t tick_init_jiffy_update(void)
+ return period;
+ }
+
++#define MAX_STALLED_JIFFIES 5
++
+ static void tick_sched_do_timer(struct tick_sched *ts, ktime_t now)
+ {
+ int cpu = smp_processor_id();
+@@ -196,6 +198,21 @@ static void tick_sched_do_timer(struct tick_sched *ts, ktime_t now)
+ if (tick_do_timer_cpu == cpu)
+ tick_do_update_jiffies64(now);
+
++ /*
++ * If jiffies update stalled for too long (timekeeper in stop_machine()
++ * or VMEXIT'ed for several msecs), force an update.
++ */
++ if (ts->last_tick_jiffies != jiffies) {
++ ts->stalled_jiffies = 0;
++ ts->last_tick_jiffies = READ_ONCE(jiffies);
++ } else {
++ if (++ts->stalled_jiffies == MAX_STALLED_JIFFIES) {
++ tick_do_update_jiffies64(now);
++ ts->stalled_jiffies = 0;
++ ts->last_tick_jiffies = READ_ONCE(jiffies);
++ }
++ }
++
+ if (ts->inidle)
+ ts->got_idle_tick = 1;
+ }
+diff --git a/kernel/time/tick-sched.h b/kernel/time/tick-sched.h
+index d952ae393423..504649513399 100644
+--- a/kernel/time/tick-sched.h
++++ b/kernel/time/tick-sched.h
+@@ -49,6 +49,8 @@ enum tick_nohz_mode {
+ * @timer_expires_base: Base time clock monotonic for @timer_expires
+ * @next_timer: Expiry time of next expiring timer for debugging purpose only
+ * @tick_dep_mask: Tick dependency mask - is set, if someone needs the tick
++ * @last_tick_jiffies: Value of jiffies seen on last tick
++ * @stalled_jiffies: Number of stalled jiffies detected across ticks
+ */
+ struct tick_sched {
+ struct hrtimer sched_timer;
+@@ -77,6 +79,8 @@ struct tick_sched {
+ u64 next_timer;
+ ktime_t idle_expires;
+ atomic_t tick_dep_mask;
++ unsigned long last_tick_jiffies;
++ unsigned int stalled_jiffies;
+ };
+
+ extern struct tick_sched *tick_get_tick_sched(int cpu);
+--
+2.35.1
+
diff --git a/0004-tick-rcu-Remove-obsolete-rcu_needs_cpu-parameters.patch b/0004-tick-rcu-Remove-obsolete-rcu_needs_cpu-parameters.patch
new file mode 100644
index 000000000000..6b98e1038739
--- /dev/null
+++ b/0004-tick-rcu-Remove-obsolete-rcu_needs_cpu-parameters.patch
@@ -0,0 +1,101 @@
+From eac08058c1c52741e03fd82c98db336a5f4190da Mon Sep 17 00:00:00 2001
+From: Frederic Weisbecker <frederic@kernel.org>
+Date: Tue, 8 Feb 2022 17:16:33 +0100
+Subject: [PATCH 4/9] tick/rcu: Remove obsolete rcu_needs_cpu() parameters
+
+With the removal of CONFIG_RCU_FAST_NO_HZ, the parameters in
+rcu_needs_cpu() are not necessary anymore. Simply remove them.
+
+Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Paul E. McKenney <paulmck@kernel.org>
+Cc: Paul Menzel <pmenzel@molgen.mpg.de>
+---
+ include/linux/rcutiny.h | 3 +--
+ include/linux/rcutree.h | 2 +-
+ kernel/rcu/tree.c | 3 +--
+ kernel/time/tick-sched.c | 10 ++++------
+ 4 files changed, 7 insertions(+), 11 deletions(-)
+
+diff --git a/include/linux/rcutiny.h b/include/linux/rcutiny.h
+index 858f4d429946..5fed476f977f 100644
+--- a/include/linux/rcutiny.h
++++ b/include/linux/rcutiny.h
+@@ -64,9 +64,8 @@ static inline void rcu_softirq_qs(void)
+ rcu_tasks_qs(current, (preempt)); \
+ } while (0)
+
+-static inline int rcu_needs_cpu(u64 basemono, u64 *nextevt)
++static inline int rcu_needs_cpu(void)
+ {
+- *nextevt = KTIME_MAX;
+ return 0;
+ }
+
+diff --git a/include/linux/rcutree.h b/include/linux/rcutree.h
+index 53209d669400..6cc91291d078 100644
+--- a/include/linux/rcutree.h
++++ b/include/linux/rcutree.h
+@@ -19,7 +19,7 @@
+
+ void rcu_softirq_qs(void);
+ void rcu_note_context_switch(bool preempt);
+-int rcu_needs_cpu(u64 basem, u64 *nextevt);
++int rcu_needs_cpu(void);
+ void rcu_cpu_stall_reset(void);
+
+ /*
+diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
+index 73a4c9d07b86..5dae0da879ae 100644
+--- a/kernel/rcu/tree.c
++++ b/kernel/rcu/tree.c
+@@ -1086,9 +1086,8 @@ void rcu_irq_enter_irqson(void)
+ * Just check whether or not this CPU has non-offloaded RCU callbacks
+ * queued.
+ */
+-int rcu_needs_cpu(u64 basemono, u64 *nextevt)
++int rcu_needs_cpu(void)
+ {
+- *nextevt = KTIME_MAX;
+ return !rcu_segcblist_empty(&this_cpu_ptr(&rcu_data)->cblist) &&
+ !rcu_rdp_is_offloaded(this_cpu_ptr(&rcu_data));
+ }
+diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
+index c89f50a7e690..566ad5bd83e9 100644
+--- a/kernel/time/tick-sched.c
++++ b/kernel/time/tick-sched.c
+@@ -785,7 +785,7 @@ static inline bool local_timer_softirq_pending(void)
+
+ static ktime_t tick_nohz_next_event(struct tick_sched *ts, int cpu)
+ {
+- u64 basemono, next_tick, next_tmr, next_rcu, delta, expires;
++ u64 basemono, next_tick, delta, expires;
+ unsigned long basejiff;
+ unsigned int seq;
+
+@@ -808,7 +808,7 @@ static ktime_t tick_nohz_next_event(struct tick_sched *ts, int cpu)
+ * minimal delta which brings us back to this place
+ * immediately. Lather, rinse and repeat...
+ */
+- if (rcu_needs_cpu(basemono, &next_rcu) || arch_needs_cpu() ||
++ if (rcu_needs_cpu() || arch_needs_cpu() ||
+ irq_work_needs_cpu() || local_timer_softirq_pending()) {
+ next_tick = basemono + TICK_NSEC;
+ } else {
+@@ -819,10 +819,8 @@ static ktime_t tick_nohz_next_event(struct tick_sched *ts, int cpu)
+ * disabled this also looks at the next expiring
+ * hrtimer.
+ */
+- next_tmr = get_next_timer_interrupt(basejiff, basemono);
+- ts->next_timer = next_tmr;
+- /* Take the next rcu event into account */
+- next_tick = next_rcu < next_tmr ? next_rcu : next_tmr;
++ next_tick = get_next_timer_interrupt(basejiff, basemono);
++ ts->next_timer = next_tick;
+ }
+
+ /*
+--
+2.35.1
+
diff --git a/0005-tick-rcu-Stop-allowing-RCU_SOFTIRQ-in-idle.patch b/0005-tick-rcu-Stop-allowing-RCU_SOFTIRQ-in-idle.patch
new file mode 100644
index 000000000000..0c3f3a6a423b
--- /dev/null
+++ b/0005-tick-rcu-Stop-allowing-RCU_SOFTIRQ-in-idle.patch
@@ -0,0 +1,119 @@
+From 894c674f70127b8fe02878ada383f534a1c63beb Mon Sep 17 00:00:00 2001
+From: Frederic Weisbecker <frederic@kernel.org>
+Date: Tue, 8 Feb 2022 17:16:34 +0100
+Subject: [PATCH 5/9] tick/rcu: Stop allowing RCU_SOFTIRQ in idle
+
+RCU_SOFTIRQ used to be special in that it could be raised on purpose
+within the idle path to prevent from stopping the tick. Some code still
+prevents from unnecessary warnings related to this specific behaviour
+while entering in dynticks-idle mode.
+
+However the nohz layout has changed quite a bit in ten years, and the
+removal of CONFIG_RCU_FAST_NO_HZ has been the final straw to this
+safe-conduct. Now the RCU_SOFTIRQ vector is expected to be raised from
+sane places.
+
+A remaining corner case is admitted though when the vector is invoked
+in fragile hotplug path.
+
+Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Paul E. McKenney <paulmck@kernel.org>
+Cc: Paul Menzel <pmenzel@molgen.mpg.de>
+---
+ include/linux/interrupt.h | 8 ++++++-
+ kernel/time/tick-sched.c | 50 +++++++++++++++++++++++++++++++--------
+ 2 files changed, 47 insertions(+), 11 deletions(-)
+
+diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
+index 9367f1cb2e3c..9613326d2f8a 100644
+--- a/include/linux/interrupt.h
++++ b/include/linux/interrupt.h
+@@ -579,7 +579,13 @@ enum
+ NR_SOFTIRQS
+ };
+
+-#define SOFTIRQ_STOP_IDLE_MASK (~(1 << RCU_SOFTIRQ))
++/*
++ * Ignoring the RCU vector after ksoftirqd is parked is fine
++ * because:
++ * 1) rcutree_migrate_callbacks() takes care of the queue.
++ * 2) rcu_report_dead() reports the final quiescent states.
++ */
++#define SOFTIRQ_HOTPLUG_SAFE_MASK (BIT(RCU_SOFTIRQ))
+
+ /* map softirq index to softirq name. update 'softirq_to_name' in
+ * kernel/softirq.c when adding a new softirq.
+diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
+index 566ad5bd83e9..2d76c91b85de 100644
+--- a/kernel/time/tick-sched.c
++++ b/kernel/time/tick-sched.c
+@@ -999,6 +999,45 @@ static void tick_nohz_full_update_tick(struct tick_sched *ts)
+ __tick_nohz_full_update_tick(ts, ktime_get());
+ }
+
++/*
++ * A pending softirq outside an IRQ (or softirq disabled section) context
++ * should be waiting for ksoftirqd to handle it. Therefore we shouldn't
++ * reach here due to the need_resched() early check in can_stop_idle_tick().
++ *
++ * However if we are between CPUHP_AP_SMPBOOT_THREADS and CPU_TEARDOWN_CPU on the
++ * cpu_down() process, softirqs can still be raised while ksoftirqd is parked,
++ * triggering the below since wakep_softirqd() is ignored.
++ *
++ */
++static bool report_idle_softirq(void)
++{
++ static int ratelimit;
++ unsigned int pending = local_softirq_pending();
++
++ if (likely(!pending))
++ return false;
++
++ /* Some softirqs claim to be safe against hotplug and ksoftirqd parking */
++ if (!cpu_active(smp_processor_id())) {
++ pending &= ~SOFTIRQ_HOTPLUG_SAFE_MASK;
++ if (!pending)
++ return false;
++ }
++
++ if (ratelimit < 10)
++ return false;
++
++ /* On RT, softirqs handling may be waiting on some lock */
++ if (!local_bh_blocked())
++ return false;
++
++ pr_warn("NOHZ tick-stop error: local softirq work is pending, handler #%02x!!!\n",
++ pending);
++ ratelimit++;
++
++ return true;
++}
++
+ static bool can_stop_idle_tick(int cpu, struct tick_sched *ts)
+ {
+ /*
+@@ -1025,17 +1064,8 @@ static bool can_stop_idle_tick(int cpu, struct tick_sched *ts)
+ if (need_resched())
+ return false;
+
+- if (unlikely(local_softirq_pending())) {
+- static int ratelimit;
+-
+- if (ratelimit < 10 && !local_bh_blocked() &&
+- (local_softirq_pending() & SOFTIRQ_STOP_IDLE_MASK)) {
+- pr_warn("NOHZ tick-stop error: Non-RCU local softirq work is pending, handler #%02x!!!\n",
+- (unsigned int) local_softirq_pending());
+- ratelimit++;
+- }
++ if (unlikely(report_idle_softirq()))
+ return false;
+- }
+
+ if (tick_nohz_full_enabled()) {
+ /*
+--
+2.35.1
+
diff --git a/0006-lib-irq_poll-Declare-IRQ_POLL-softirq-vector-as-ksof.patch b/0006-lib-irq_poll-Declare-IRQ_POLL-softirq-vector-as-ksof.patch
new file mode 100644
index 000000000000..2be273d5c3c7
--- /dev/null
+++ b/0006-lib-irq_poll-Declare-IRQ_POLL-softirq-vector-as-ksof.patch
@@ -0,0 +1,55 @@
+From 43a520143b091d79168ca3284aa23501c09f711e Mon Sep 17 00:00:00 2001
+From: Frederic Weisbecker <frederic@kernel.org>
+Date: Tue, 8 Feb 2022 17:16:35 +0100
+Subject: [PATCH 6/9] lib/irq_poll: Declare IRQ_POLL softirq vector as
+ ksoftirqd-parking safe
+
+The following warning may appear while setting a CPU down:
+
+ NOHZ tick-stop error: Non-RCU local softirq work is pending, handler #20!!!
+
+The IRQ_POLL_SOFTIRQ vector can be raised during the hotplug cpu_down()
+path after ksoftirqd is parked and before the CPU actually dies. However
+this is handled afterward at the CPUHP_IRQ_POLL_DEAD stage where the
+queue gets migrated.
+
+Hence this warning can be considered spurious and the vector can join
+the "hotplug-safe" list.
+
+Reported-and-tested-by: Paul Menzel <pmenzel@molgen.mpg.de>
+Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Paul E. McKenney <paulmck@kernel.org>
+Cc: Paul Menzel <pmenzel@molgen.mpg.de>
+---
+ include/linux/interrupt.h | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
+index 9613326d2f8a..f40754caaefa 100644
+--- a/include/linux/interrupt.h
++++ b/include/linux/interrupt.h
+@@ -580,12 +580,15 @@ enum
+ };
+
+ /*
+- * Ignoring the RCU vector after ksoftirqd is parked is fine
+- * because:
+- * 1) rcutree_migrate_callbacks() takes care of the queue.
++ * The following vectors can be safely ignored after ksoftirqd is parked:
++ *
++ * _ RCU:
++ * 1) rcutree_migrate_callbacks() migrates the queue.
+ * 2) rcu_report_dead() reports the final quiescent states.
++ *
++ * _ IRQ_POLL: irq_poll_cpu_dead() migrates the queue
+ */
+-#define SOFTIRQ_HOTPLUG_SAFE_MASK (BIT(RCU_SOFTIRQ))
++#define SOFTIRQ_HOTPLUG_SAFE_MASK (BIT(RCU_SOFTIRQ) | BIT(IRQ_POLL_SOFTIRQ))
+
+ /* map softirq index to softirq name. update 'softirq_to_name' in
+ * kernel/softirq.c when adding a new softirq.
+--
+2.35.1
+
diff --git a/PKGBUILD b/PKGBUILD
index b4b9eb03e299..e24ca981eb61 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -7,12 +7,12 @@ _srcname=linux-5.17
_major=5.17
### on initial release this is null otherwise it is the current stable subversion
### ie 1,2,3 corresponding $_major.1, $_major.3 etc
-_minor=1
+_minor=2
_minorc=$((_minor+1))
### on initial release this is just $_major
[[ -z $_minor ]] && _fullver=$_major || _fullver=$_major.$_minor
#_fullver=$_major.$_minor
-_rcver=2
+_rcver=1
_rcpatch=patch-${_major}.${_minorc}-rc${_rcver}
pkgver=${_major}.${_minorc}rc${_rcver}
arch=(x86_64)
@@ -31,6 +31,10 @@ source=(
config # the main kernel config file
0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
0002-random-treat-bootloader-trust-toggle-the-same-way-as.patch
+ 0003-tick-Detect-and-fix-jiffies-update-stall.patch
+ 0004-tick-rcu-Remove-obsolete-rcu_needs_cpu-parameters.patch
+ 0005-tick-rcu-Stop-allowing-RCU_SOFTIRQ-in-idle.patch
+ 0006-lib-irq_poll-Declare-IRQ_POLL-softirq-vector-as-ksof.patch
)
validpgpkeys=(
'ABAF11C65A2970B130ABE3C479BE3E4300411886' # Linus Torvalds
@@ -38,13 +42,17 @@ validpgpkeys=(
'A2FF3A36AAA56654109064AB19802F8B0D70FC30' # Jan Alexander Steffens (heftig)
'C7E7849466FE2358343588377258734B41C31549' # David Runge <dvzrv@archlinux.org>
)
-b2sums=('254d82d42bc9e38c2dd8a101be3e01b0314e7fb6475fc70885a1d42063f869ca4de5ba320c4c304ce7ec32d3dd6e47f67c4d75e8eb457f011852007c05bf08d3'
+b2sums=('810d9f49d3a1f2120c18b5e5a8205bd477dd433c38176ff14b5794cf68107e1de1a1a434a02e871689b2c022e79ce07fdb53285d3a555eaf5ccab66dbd6016cd'
'SKIP'
- '1275903955f014d0a0b4cad9074710d36825b274814cde457cf9e1f9acc188b21da7de01100f99cfe9644fb7fd182a95257d124a6992ac3be47adb907e230616'
+ 'd3fce962b0243ad30a4385626cf90da2f04a6b8e745bcedd1d6f2e01fdd9c32beb443b2ae7979bcee32c730461cb4653ff726432ea28f2a5ab5c12e63ef4b6b4'
'SKIP'
- '000ab21fc39af4ba189881fd1ad0997043a166488ae73affd6ecb7c621ae4f71f2e8778b4112569309da4c937e045a53240a44be08808d8ef6853d02e0a28448'
- 'e01ccd70d0180fb6d270505fbc8cb2bd4815b334b3366365d931e758ebcad14fabd13644f5adf79be2d85f44dde39542c5318fa135cd18366d38eed85ebb01d7'
- 'b48d97933d3ff496c0ee3aba369f2a671df4fb56a21c800d47871f9b78513f1ab5a997cd6be7affd2421cb83adb2a17a8a57ed76f42a4dcf81d4b66bb75137d5')
+ '3d1e2c1dff1e828c655b449962fb47c49fdf77d58c65c8af41ee8c56fbb2d8fdb7d0b963c775b26ac4022c6e0f9c8d19c11bc1e0e358580396520e9261bc8eeb'
+ '80bb7cc9c21721c6db0180f094cd6fa0bc441ee9103d81b203c76028752041504fa53f57f066cd79937623ae4d4f7d05ad6cc18a59b544cc0ce689675a483432'
+ 'c1187ed81fc89682679fb9968f7f02a81c5cb748d87e16b4f5cf733c02df64c1e1cb58f7a028e79c31d7f8ca6fdb814932da66835bde321676ea8afe3e1b4ae1'
+ 'a1a258341cc1b0b27b036a2ef701ae3e3ac202b24647b845a1df1f3cc87756f610b81cd93d442b412beaeef1e4ccff21f7b5ef77efb06db5dd245a32b70823a1'
+ '1d763f9a80fc0d5c15a2b6d9fcfa1d5702f6b53786129332f8cc110f91fdecc234f6ded6337fd9afffd70afac01fb317ae9f1f25032eb2ae72d523c38520088c'
+ '556227cebb817d7b3f98ea3118c912cfd57d712c5695ec893d0837184f89a7b8848030e1f8519e7bc4119fbd45041902f1fcc04b7901701e6c384889b0b001b2'
+ '992b3665a33a181581d5beaec5b68ac8de4590f606550a816d5d6bc9621cd13e7d89c6e46378f0fda3ad263d3a9172a9bb6c5a8eacf9aee1ffe17f89f80d4bf9')
export KBUILD_BUILD_HOST=archlinux
diff --git a/config b/config
index 97c4fd43b191..eb6c2e58679a 100644
--- a/config
+++ b/config
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.17.0-arch1 Kernel Configuration
+# Linux/x86 5.17.2-arch1 Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="gcc (GCC) 11.2.0"
CONFIG_CC_IS_GCC=y
@@ -3073,6 +3073,7 @@ CONFIG_NET_DSA_XRS700X=m
CONFIG_NET_DSA_XRS700X_I2C=m
CONFIG_NET_DSA_XRS700X_MDIO=m
CONFIG_NET_DSA_QCA8K=m
+CONFIG_NET_DSA_REALTEK=m
CONFIG_NET_DSA_REALTEK_SMI=m
CONFIG_NET_DSA_SMSC_LAN9303=m
CONFIG_NET_DSA_SMSC_LAN9303_I2C=m
@@ -6582,7 +6583,7 @@ CONFIG_DUMMY_CONSOLE_ROWS=25
CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION is not set
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y
# end of Console display driver support