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/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