From 830ce1f69238136c0197858242f16cf44e0d6cb9 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Fri, 01 Nov 2024 03:09:37 +0000
Subject: [PATCH] gpio config
---
kernel/include/linux/lockdep.h | 111 +++++++++++++++++++++++++++++++++----------------------
1 files changed, 67 insertions(+), 44 deletions(-)
diff --git a/kernel/include/linux/lockdep.h b/kernel/include/linux/lockdep.h
index 2c25863..3a6b855 100644
--- a/kernel/include/linux/lockdep.h
+++ b/kernel/include/linux/lockdep.h
@@ -214,29 +214,30 @@
* of dependencies wrong: they are either too broad (they need a class-split)
* or they are too narrow (they suffer from a false class-split):
*/
-#define lockdep_set_class(lock, key) \
- lockdep_init_map_type(&(lock)->dep_map, #key, key, 0, \
- (lock)->dep_map.wait_type_inner, \
- (lock)->dep_map.wait_type_outer, \
- (lock)->dep_map.lock_type)
+#define lockdep_set_class(lock, key) \
+ lockdep_init_map_type(LOCKDEP_ALT_DEPMAP(lock), #key, key, 0, \
+ LOCKDEP_ALT_DEPMAP(lock)->wait_type_inner, \
+ LOCKDEP_ALT_DEPMAP(lock)->wait_type_outer, \
+ LOCKDEP_ALT_DEPMAP(lock)->lock_type)
-#define lockdep_set_class_and_name(lock, key, name) \
- lockdep_init_map_type(&(lock)->dep_map, name, key, 0, \
- (lock)->dep_map.wait_type_inner, \
- (lock)->dep_map.wait_type_outer, \
- (lock)->dep_map.lock_type)
+#define lockdep_set_class_and_name(lock, key, name) \
+ lockdep_init_map_type(LOCKDEP_ALT_DEPMAP(lock), name, key, 0, \
+ LOCKDEP_ALT_DEPMAP(lock)->wait_type_inner, \
+ LOCKDEP_ALT_DEPMAP(lock)->wait_type_outer, \
+ LOCKDEP_ALT_DEPMAP(lock)->lock_type)
-#define lockdep_set_class_and_subclass(lock, key, sub) \
- lockdep_init_map_type(&(lock)->dep_map, #key, key, sub, \
- (lock)->dep_map.wait_type_inner, \
- (lock)->dep_map.wait_type_outer, \
- (lock)->dep_map.lock_type)
+#define lockdep_set_class_and_subclass(lock, key, sub) \
+ lockdep_init_map_type(LOCKDEP_ALT_DEPMAP(lock), #key, key, sub, \
+ LOCKDEP_ALT_DEPMAP(lock)->wait_type_inner, \
+ LOCKDEP_ALT_DEPMAP(lock)->wait_type_outer, \
+ LOCKDEP_ALT_DEPMAP(lock)->lock_type)
#define lockdep_set_subclass(lock, sub) \
- lockdep_init_map_type(&(lock)->dep_map, #lock, (lock)->dep_map.key, sub,\
- (lock)->dep_map.wait_type_inner, \
- (lock)->dep_map.wait_type_outer, \
- (lock)->dep_map.lock_type)
+ lockdep_init_map_type(LOCKDEP_ALT_DEPMAP(lock), #lock, \
+ LOCKDEP_ALT_DEPMAP(lock)->key, sub, \
+ LOCKDEP_ALT_DEPMAP(lock)->wait_type_inner, \
+ LOCKDEP_ALT_DEPMAP(lock)->wait_type_outer, \
+ LOCKDEP_ALT_DEPMAP(lock)->lock_type)
#define lockdep_set_novalidate_class(lock) \
lockdep_set_class_and_name(lock, &__lockdep_no_validate__, #lock)
@@ -244,7 +245,8 @@
/*
* Compare locking classes
*/
-#define lockdep_match_class(lock, key) lockdep_match_key(&(lock)->dep_map, key)
+#define lockdep_match_class(lock, key) \
+ lockdep_match_key(LOCKDEP_ALT_DEPMAP(lock), key)
static inline int lockdep_match_key(struct lockdep_map *lock,
struct lock_class_key *key)
@@ -282,8 +284,8 @@
return lock_is_held_type(lock, -1);
}
-#define lockdep_is_held(lock) lock_is_held(&(lock)->dep_map)
-#define lockdep_is_held_type(lock, r) lock_is_held_type(&(lock)->dep_map, (r))
+#define lockdep_is_held(lock) lock_is_held(LOCKDEP_ALT_DEPMAP(lock))
+#define lockdep_is_held_type(lock, r) lock_is_held_type(LOCKDEP_ALT_DEPMAP(lock), (r))
extern void lock_set_class(struct lockdep_map *lock, const char *name,
struct lock_class_key *key, unsigned int subclass,
@@ -306,26 +308,27 @@
#define lockdep_depth(tsk) (debug_locks ? (tsk)->lockdep_depth : 0)
#define lockdep_assert_held(l) do { \
- WARN_ON(debug_locks && !lockdep_is_held(l)); \
+ WARN_ON(debug_locks && !LOCKDEP_HARD_DEBUG_RET(l, 1, lockdep_is_held(l))); \
} while (0)
#define lockdep_assert_held_write(l) do { \
- WARN_ON(debug_locks && !lockdep_is_held_type(l, 0)); \
+ WARN_ON(debug_locks && !LOCKDEP_HARD_DEBUG_RET(l, 1, lockdep_is_held_type(l, 0))); \
} while (0)
#define lockdep_assert_held_read(l) do { \
- WARN_ON(debug_locks && !lockdep_is_held_type(l, 1)); \
+ WARN_ON(debug_locks && !LOCKDEP_HARD_DEBUG_RET(l, 1, lockdep_is_held_type(l, 1))); \
} while (0)
#define lockdep_assert_held_once(l) do { \
- WARN_ON_ONCE(debug_locks && !lockdep_is_held(l)); \
+ WARN_ON_ONCE(debug_locks && !LOCKDEP_HARD_DEBUG_RET(l, 1, lockdep_is_held(l))); \
} while (0)
#define lockdep_recursing(tsk) ((tsk)->lockdep_recursion)
-#define lockdep_pin_lock(l) lock_pin_lock(&(l)->dep_map)
-#define lockdep_repin_lock(l,c) lock_repin_lock(&(l)->dep_map, (c))
-#define lockdep_unpin_lock(l,c) lock_unpin_lock(&(l)->dep_map, (c))
+#define lockdep_pin_lock(l) LOCKDEP_HARD_DEBUG_RET(l, ({ struct pin_cookie cookie; cookie;} ), \
+ lock_pin_lock(LOCKDEP_ALT_DEPMAP(l)))
+#define lockdep_repin_lock(l,c) LOCKDEP_HARD_DEBUG(l,, lock_repin_lock(LOCKDEP_ALT_DEPMAP(l), (c)))
+#define lockdep_unpin_lock(l,c) LOCKDEP_HARD_DEBUG(l,, lock_unpin_lock(LOCKDEP_ALT_DEPMAP(l), (c)))
#else /* !CONFIG_LOCKDEP */
@@ -552,22 +555,22 @@
#ifdef CONFIG_PROVE_LOCKING
# define might_lock(lock) \
do { \
- typecheck(struct lockdep_map *, &(lock)->dep_map); \
- lock_acquire(&(lock)->dep_map, 0, 0, 0, 1, NULL, _THIS_IP_); \
- lock_release(&(lock)->dep_map, _THIS_IP_); \
+ typecheck(struct lockdep_map *, LOCKDEP_ALT_DEPMAP(lock)); \
+ lock_acquire(LOCKDEP_ALT_DEPMAP(lock), 0, 0, 0, 1, NULL, _THIS_IP_); \
+ lock_release(LOCKDEP_ALT_DEPMAP(lock), _THIS_IP_); \
} while (0)
# define might_lock_read(lock) \
do { \
- typecheck(struct lockdep_map *, &(lock)->dep_map); \
- lock_acquire(&(lock)->dep_map, 0, 0, 1, 1, NULL, _THIS_IP_); \
- lock_release(&(lock)->dep_map, _THIS_IP_); \
+ typecheck(struct lockdep_map *, LOCKDEP_ALT_DEPMAP(lock)); \
+ lock_acquire(LOCKDEP_ALT_DEPMAP(lock), 0, 0, 1, 1, NULL, _THIS_IP_); \
+ lock_release(LOCKDEP_ALT_DEPMAP(lock), _THIS_IP_); \
} while (0)
# define might_lock_nested(lock, subclass) \
do { \
- typecheck(struct lockdep_map *, &(lock)->dep_map); \
- lock_acquire(&(lock)->dep_map, subclass, 0, 1, 1, NULL, \
+ typecheck(struct lockdep_map *, LOCKDEP_ALT_DEPMAP(lock)); \
+ lock_acquire(LOCKDEP_ALT_DEPMAP(lock), subclass, 0, 1, 1, NULL, \
_THIS_IP_); \
- lock_release(&(lock)->dep_map, _THIS_IP_); \
+ lock_release(LOCKDEP_ALT_DEPMAP(lock), _THIS_IP_); \
} while (0)
DECLARE_PER_CPU(int, hardirqs_enabled);
@@ -576,14 +579,32 @@
#define __lockdep_enabled (debug_locks && !this_cpu_read(lockdep_recursion))
+#define __lockdep_check_irqs_enabled() \
+ ({ !hard_irqs_disabled() && \
+ (running_oob() || this_cpu_read(hardirqs_enabled)); })
+
#define lockdep_assert_irqs_enabled() \
-do { \
- WARN_ON_ONCE(__lockdep_enabled && !this_cpu_read(hardirqs_enabled)); \
-} while (0)
+ do { \
+ WARN_ON_ONCE(__lockdep_enabled && \
+ !__lockdep_check_irqs_enabled()); \
+ } while (0)
+
+#define __lockdep_check_irqs_disabled() \
+ ({ hard_irqs_disabled() || \
+ (running_inband() && !this_cpu_read(hardirqs_enabled)); })
#define lockdep_assert_irqs_disabled() \
+ do { \
+ WARN_ON_ONCE(__lockdep_enabled && \
+ !__lockdep_check_irqs_disabled()); \
+ } while (0)
+
+#define lockdep_read_irqs_state() \
+ ({ this_cpu_read(hardirqs_enabled); })
+
+#define lockdep_write_irqs_state(__state) \
do { \
- WARN_ON_ONCE(__lockdep_enabled && this_cpu_read(hardirqs_enabled)); \
+ this_cpu_write(hardirqs_enabled, __state); \
} while (0)
#define lockdep_assert_in_irq() \
@@ -596,7 +617,7 @@
WARN_ON_ONCE(IS_ENABLED(CONFIG_PREEMPT_COUNT) && \
__lockdep_enabled && \
(preempt_count() != 0 || \
- !this_cpu_read(hardirqs_enabled))); \
+ __lockdep_check_irqs_disabled())); \
} while (0)
#define lockdep_assert_preemption_disabled() \
@@ -604,7 +625,7 @@
WARN_ON_ONCE(IS_ENABLED(CONFIG_PREEMPT_COUNT) && \
__lockdep_enabled && \
(preempt_count() == 0 && \
- this_cpu_read(hardirqs_enabled))); \
+ __lockdep_check_irqs_enabled())); \
} while (0)
#else
@@ -614,6 +635,8 @@
# define lockdep_assert_irqs_enabled() do { } while (0)
# define lockdep_assert_irqs_disabled() do { } while (0)
+# define lockdep_read_irqs_state() 0
+# define lockdep_write_irqs_state(__state) do { (void)(__state); } while (0)
# define lockdep_assert_in_irq() do { } while (0)
# define lockdep_assert_preemption_enabled() do { } while (0)
--
Gitblit v1.6.2