From 7e970c18f85f99acc678d90128b6e01dce1bf273 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Fri, 01 Nov 2024 02:40:12 +0000
Subject: [PATCH] gmac get mac form eeprom
---
kernel/kernel/rcu/tree.c | 31 ++++++++++++++++++++-----------
1 files changed, 20 insertions(+), 11 deletions(-)
diff --git a/kernel/kernel/rcu/tree.c b/kernel/kernel/rcu/tree.c
index b10d6bc..7e71bc8 100644
--- a/kernel/kernel/rcu/tree.c
+++ b/kernel/kernel/rcu/tree.c
@@ -232,6 +232,11 @@
return 0;
}
+static inline bool rcu_in_nonmaskable(void)
+{
+ return on_pipeline_entry() || in_nmi();
+}
+
void rcu_softirq_qs(void)
{
rcu_qs();
@@ -710,6 +715,7 @@
struct rcu_data *rdp = this_cpu_ptr(&rcu_data);
instrumentation_begin();
+
/*
* Check for ->dynticks_nmi_nesting underflow and bad ->dynticks.
* (We are exiting an NMI handler, so RCU better be paying attention
@@ -735,7 +741,7 @@
trace_rcu_dyntick(TPS("Startirq"), rdp->dynticks_nmi_nesting, 0, atomic_read(&rdp->dynticks));
WRITE_ONCE(rdp->dynticks_nmi_nesting, 0); /* Avoid store tearing. */
- if (!in_nmi())
+ if (!rcu_in_nonmaskable())
rcu_prepare_for_idle();
// instrumentation for the noinstr rcu_dynticks_eqs_enter()
@@ -746,7 +752,7 @@
rcu_dynticks_eqs_enter();
// ... but is no longer watching here.
- if (!in_nmi())
+ if (!rcu_in_nonmaskable())
rcu_dynticks_task_enter();
}
@@ -935,7 +941,7 @@
struct rcu_data *rdp = this_cpu_ptr(&rcu_data);
// If we're here from NMI there's nothing to do.
- if (in_nmi())
+ if (rcu_in_nonmaskable())
return;
RCU_LOCKDEP_WARN(rcu_dynticks_curr_cpu_in_eqs(),
@@ -996,14 +1002,14 @@
*/
if (rcu_dynticks_curr_cpu_in_eqs()) {
- if (!in_nmi())
+ if (!rcu_in_nonmaskable())
rcu_dynticks_task_exit();
// RCU is not watching here ...
rcu_dynticks_eqs_exit();
// ... but is watching here.
- if (!in_nmi()) {
+ if (!rcu_in_nonmaskable()) {
instrumentation_begin();
rcu_cleanup_after_idle();
instrumentation_end();
@@ -1016,7 +1022,7 @@
instrument_atomic_write(&rdp->dynticks, sizeof(rdp->dynticks));
incby = 1;
- } else if (!in_nmi()) {
+ } else if (!rcu_in_nonmaskable()) {
instrumentation_begin();
rcu_irq_enter_check_tick();
} else {
@@ -1094,10 +1100,10 @@
/**
* rcu_is_watching - see if RCU thinks that the current CPU is not idle
*
- * Return true if RCU is watching the running CPU, which means that this
- * CPU can safely enter RCU read-side critical sections. In other words,
- * if the current CPU is not in its idle loop or is in an interrupt or
- * NMI handler, return true.
+ * Return true if RCU is watching the running CPU, which means that
+ * this CPU can safely enter RCU read-side critical sections. In
+ * other words, if the current CPU is not in its idle loop or is in an
+ * interrupt or NMI handler, return true.
*
* Make notrace because it can be called by the internal functions of
* ftrace, and making this notrace removes unnecessary recursion calls.
@@ -1106,6 +1112,9 @@
{
bool ret;
+ if (on_pipeline_entry())
+ return true;
+
preempt_disable_notrace();
ret = !rcu_dynticks_curr_cpu_in_eqs();
preempt_enable_notrace();
@@ -1152,7 +1161,7 @@
struct rcu_node *rnp;
bool ret = false;
- if (in_nmi() || !rcu_scheduler_fully_active)
+ if (rcu_in_nonmaskable() || !rcu_scheduler_fully_active)
return true;
preempt_disable_notrace();
rdp = this_cpu_ptr(&rcu_data);
--
Gitblit v1.6.2