From a46a1ad097419aeea7350987dd95230f50d90392 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Fri, 15 Nov 2024 08:53:41 +0000
Subject: [PATCH] 固定GMAC1 网卡名为 eth3
---
kernel/kernel/panic.c | 26 ++++++++++++++++----------
1 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/kernel/kernel/panic.c b/kernel/kernel/panic.c
index 332736a..f4a05dd 100644
--- a/kernel/kernel/panic.c
+++ b/kernel/kernel/panic.c
@@ -27,6 +27,7 @@
#include <linux/sysrq.h>
#include <linux/init.h>
#include <linux/nmi.h>
+#include <linux/irq_pipeline.h>
#include <linux/console.h>
#include <linux/bug.h>
#include <linux/ratelimit.h>
@@ -49,7 +50,7 @@
IS_ENABLED(CONFIG_GCC_PLUGIN_RANDSTRUCT) ? (1 << TAINT_RANDSTRUCT) : 0;
static int pause_on_oops;
static int pause_on_oops_flag;
-static DEFINE_SPINLOCK(pause_on_oops_lock);
+static DEFINE_HARD_SPINLOCK(pause_on_oops_lock);
bool crash_kexec_post_notifiers;
int panic_on_warn __read_mostly;
unsigned long panic_on_taint;
@@ -189,8 +190,9 @@
* there is nothing to prevent an interrupt handler (that runs
* after setting panic_cpu) from invoking panic() again.
*/
- local_irq_disable();
+ hard_local_irq_disable();
preempt_disable_notrace();
+ irq_pipeline_oops();
/*
* It's possible to come here directly from a panic-assertion and
@@ -267,9 +269,12 @@
/*
* Run any panic handlers, including those that might need to
- * add information to the kmsg dump output.
+ * add information to the kmsg dump output. Skip panic
+ * handlers if running over the oob stage, as they would most
+ * likely break.
*/
- atomic_notifier_call_chain(&panic_notifier_list, 0, buf);
+ if (running_inband())
+ atomic_notifier_call_chain(&panic_notifier_list, 0, buf);
/* Call flush even twice. It tries harder with a single online CPU */
printk_safe_flush_on_panic();
@@ -474,7 +479,7 @@
if (!pause_on_oops)
return;
- spin_lock_irqsave(&pause_on_oops_lock, flags);
+ raw_spin_lock_irqsave(&pause_on_oops_lock, flags);
if (pause_on_oops_flag == 0) {
/* This CPU may now print the oops message */
pause_on_oops_flag = 1;
@@ -484,21 +489,21 @@
/* This CPU gets to do the counting */
spin_counter = pause_on_oops;
do {
- spin_unlock(&pause_on_oops_lock);
+ raw_spin_unlock(&pause_on_oops_lock);
spin_msec(MSEC_PER_SEC);
- spin_lock(&pause_on_oops_lock);
+ raw_spin_lock(&pause_on_oops_lock);
} while (--spin_counter);
pause_on_oops_flag = 0;
} else {
/* This CPU waits for a different one */
while (spin_counter) {
- spin_unlock(&pause_on_oops_lock);
+ raw_spin_unlock(&pause_on_oops_lock);
spin_msec(1);
- spin_lock(&pause_on_oops_lock);
+ raw_spin_lock(&pause_on_oops_lock);
}
}
}
- spin_unlock_irqrestore(&pause_on_oops_lock, flags);
+ raw_spin_unlock_irqrestore(&pause_on_oops_lock, flags);
}
/*
@@ -528,6 +533,7 @@
{
tracing_off();
/* can't trust the integrity of the kernel anymore: */
+ irq_pipeline_oops();
debug_locks_off();
do_oops_enter_exit();
--
Gitblit v1.6.2