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/drivers/cpuidle/cpuidle.c | 18 ++++++++++++++++++
1 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/kernel/drivers/cpuidle/cpuidle.c b/kernel/drivers/cpuidle/cpuidle.c
index ab77a36..9c6004d 100644
--- a/kernel/drivers/cpuidle/cpuidle.c
+++ b/kernel/drivers/cpuidle/cpuidle.c
@@ -17,6 +17,7 @@
#include <linux/pm_qos.h>
#include <linux/cpu.h>
#include <linux/cpuidle.h>
+#include <linux/irq_pipeline.h>
#include <linux/ktime.h>
#include <linux/hrtimer.h>
#include <linux/module.h>
@@ -219,6 +220,22 @@
broadcast = !!(target_state->flags & CPUIDLE_FLAG_TIMER_STOP);
/*
+ * A companion core running on the oob stage of the IRQ
+ * pipeline may deny switching to a deeper C-state. If so,
+ * call the default idle routine instead. If the core cannot
+ * bear with the latency induced by the default idling
+ * operation, then CPUIDLE is not usable and should be
+ * disabled at build time. The in-band stage is currently
+ * stalled, hard irqs are on. irq_cpuidle_enter() leaves us
+ * stalled but returns with hard irqs off so that no event may
+ * sneak in until we actually go idle.
+ */
+ if (!irq_cpuidle_enter(dev, target_state)) {
+ default_idle_call();
+ return -EBUSY;
+ }
+
+ /*
* Tell the time framework to switch to a broadcast timer because our
* local timer will be shut down. If a local timer is used from another
* CPU as a broadcast timer, this call may fail if it is not available.
@@ -247,6 +264,7 @@
if (!(target_state->flags & CPUIDLE_FLAG_RCU_IDLE))
rcu_idle_enter();
entered_state = target_state->enter(dev, drv, index);
+ hard_cond_local_irq_enable();
if (!(target_state->flags & CPUIDLE_FLAG_RCU_IDLE))
rcu_idle_exit();
start_critical_timings();
--
Gitblit v1.6.2