From: Eder Zulian <ezul...@redhat.com>

rust: Fix build error

On a PREEMPT_RT build, spin locks have been mapped to rt_mutex types, so
avoid the raw_spinlock_init call for RT.

When CONFIG_DEBUG_SPINLOCK=y and CONFIG_PREEMPT_RT=y the following build
error occurs:

https://lore.kernel.org/oe-kbuild-all/202409251238.vetlgxe9-...@intel.com/

Reported-by: kernel test robot <l...@intel.com>
Closes: 
https://lore.kernel.org/oe-kbuild-all/202409251238.vetlgxe9-...@intel.com/
Signed-off-by: Eder Zulian <ezul...@redhat.com>

diff --git a/include/linux/spinlock_rt.h b/include/linux/spinlock_rt.h
index blahblah..blahblah 100644
--- a/include/linux/spinlock_rt.h
+++ b/include/linux/spinlock_rt.h
@@ -16,22 +16,21 @@ static inline void __rt_spin_lock_init(spinlock_t *lock, 
const char *name,
 }
 #endif
 
-#define spin_lock_init(slock)                                  \
+#define __spin_lock_init(slock, name, key, percpu)             \
 do {                                                           \
-       static struct lock_class_key __key;                     \
-                                                               \
        rt_mutex_base_init(&(slock)->lock);                     \
-       __rt_spin_lock_init(slock, #slock, &__key, false);      \
+       __rt_spin_lock_init(slock, name, key, percpu);          \
 } while (0)
 
-#define local_spin_lock_init(slock)                            \
+#define _spin_lock_init(slock, percpu)                         \
 do {                                                           \
        static struct lock_class_key __key;                     \
-                                                               \
-       rt_mutex_base_init(&(slock)->lock);                     \
-       __rt_spin_lock_init(slock, #slock, &__key, true);       \
+       __spin_lock_init(slock, #slock, &__key, percpu);        \
 } while (0)
 
+#define spin_lock_init(slock)          _spin_lock_init(slock, false)
+#define local_spin_lock_init(slock)    _spin_lock_init(slock, true)
+
 extern void rt_spin_lock(spinlock_t *lock);
 extern void rt_spin_lock_nested(spinlock_t *lock, int subclass);
 extern void rt_spin_lock_nest_lock(spinlock_t *lock, struct lockdep_map 
*nest_lock);
diff --git a/rust/helpers/spinlock.c b/rust/helpers/spinlock.c
index blahblah..blahblah 100644
--- a/rust/helpers/spinlock.c
+++ b/rust/helpers/spinlock.c
@@ -7,10 +7,16 @@ void rust_helper___spin_lock_init(spinlock_t *lock, const 
char *name,
                                  struct lock_class_key *key)
 {
 #ifdef CONFIG_DEBUG_SPINLOCK
+
+#ifdef CONFIG_PREEMPT_RT
+       __spin_lock_init(lock, name, key, false);
+#else /*!CONFIG_PREEMPT_RT */
        __raw_spin_lock_init(spinlock_check(lock), name, key, LD_WAIT_CONFIG);
-#else
+#endif /* CONFIG_PREEMPT_RT */
+
+#else /* !CONFIG_DEBUG_SPINLOCK */
        spin_lock_init(lock);
-#endif
+#endif /* CONFIG_DEBUG_SPINLOCK */
 }
 
 void rust_helper_spin_lock(spinlock_t *lock)

--
https://gitlab.com/cki-project/kernel-ark/-/merge_requests/3471

-- 
_______________________________________________
kernel mailing list -- kernel@lists.fedoraproject.org
To unsubscribe send an email to kernel-le...@lists.fedoraproject.org
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/kernel@lists.fedoraproject.org
Do not reply to spam, report it: 
https://pagure.io/fedora-infrastructure/new_issue

Reply via email to