From 2f529f9b558ca1c1bd74be7437a84e4711743404 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Fri, 01 Nov 2024 02:11:33 +0000
Subject: [PATCH] add xenomai

---
 kernel/include/linux/rcupdate.h |   14 +++++++++++++-
 1 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/kernel/include/linux/rcupdate.h b/kernel/include/linux/rcupdate.h
index 095b3b3..a4388ef 100644
--- a/kernel/include/linux/rcupdate.h
+++ b/kernel/include/linux/rcupdate.h
@@ -118,6 +118,14 @@
 static inline void rcu_nocb_flush_deferred_wakeup(void) { }
 #endif /* #else #ifdef CONFIG_RCU_NOCB_CPU */
 
+#ifdef CONFIG_IRQ_PIPELINE
+void rcu_oob_prepare_lock(void);
+void rcu_oob_finish_lock(void);
+#else
+#define rcu_oob_prepare_lock()	 do { } while (0)
+#define rcu_oob_finish_lock()	 do { } while (0)
+#endif
+
 /**
  * RCU_NONIDLE - Indicate idle-loop code that needs RCU readers
  * @a: Code that RCU needs to pay attention to.
@@ -290,7 +298,7 @@
 
 static inline int rcu_read_lock_sched_held(void)
 {
-	return !preemptible();
+	return !running_inband() || !preemptible();
 }
 
 static inline int rcu_read_lock_any_held(void)
@@ -646,6 +654,7 @@
  */
 static __always_inline void rcu_read_lock(void)
 {
+	rcu_oob_prepare_lock();
 	__rcu_read_lock();
 	__acquire(RCU);
 	rcu_lock_acquire(&rcu_lock_map);
@@ -702,6 +711,7 @@
 			 "rcu_read_unlock() used illegally while idle");
 	__release(RCU);
 	__rcu_read_unlock();
+	rcu_oob_finish_lock();
 	rcu_lock_release(&rcu_lock_map); /* Keep acq info for rls diags. */
 }
 
@@ -755,6 +765,7 @@
 static inline void rcu_read_lock_sched(void)
 {
 	preempt_disable();
+	rcu_oob_prepare_lock();
 	__acquire(RCU_SCHED);
 	rcu_lock_acquire(&rcu_sched_lock_map);
 	RCU_LOCKDEP_WARN(!rcu_is_watching(),
@@ -779,6 +790,7 @@
 			 "rcu_read_unlock_sched() used illegally while idle");
 	rcu_lock_release(&rcu_sched_lock_map);
 	__release(RCU_SCHED);
+	rcu_oob_finish_lock();
 	preempt_enable();
 }
 

--
Gitblit v1.6.2