]>
git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blob - include/linux/local_lock_internal.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _LINUX_LOCAL_LOCK_H
3 # error "Do not include directly, include linux/local_lock.h"
6 #include <linux/percpu-defs.h>
7 #include <linux/lockdep.h>
10 #ifdef CONFIG_DEBUG_LOCK_ALLOC
11 struct lockdep_map dep_map
;
12 struct task_struct
*owner
;
16 #ifdef CONFIG_DEBUG_LOCK_ALLOC
17 # define LL_DEP_MAP_INIT(lockname) \
20 .wait_type_inner = LD_WAIT_CONFIG, \
21 .lock_type = LD_LOCK_PERCPU, \
24 # define LL_DEP_MAP_INIT(lockname)
27 #define INIT_LOCAL_LOCK(lockname) { LL_DEP_MAP_INIT(lockname) }
29 #define __local_lock_init(lock) \
31 static struct lock_class_key __key; \
33 debug_check_no_locks_freed((void *)lock, sizeof(*lock));\
34 lockdep_init_map_type(&(lock)->dep_map, #lock, &__key, 0, \
35 LD_WAIT_CONFIG, LD_WAIT_INV, \
39 #ifdef CONFIG_DEBUG_LOCK_ALLOC
40 static inline void local_lock_acquire(local_lock_t
*l
)
42 lock_map_acquire(&l
->dep_map
);
43 DEBUG_LOCKS_WARN_ON(l
->owner
);
47 static inline void local_lock_release(local_lock_t
*l
)
49 DEBUG_LOCKS_WARN_ON(l
->owner
!= current
);
51 lock_map_release(&l
->dep_map
);
54 #else /* CONFIG_DEBUG_LOCK_ALLOC */
55 static inline void local_lock_acquire(local_lock_t
*l
) { }
56 static inline void local_lock_release(local_lock_t
*l
) { }
57 #endif /* !CONFIG_DEBUG_LOCK_ALLOC */
59 #define __local_lock(lock) \
62 local_lock_acquire(this_cpu_ptr(lock)); \
65 #define __local_lock_irq(lock) \
67 local_irq_disable(); \
68 local_lock_acquire(this_cpu_ptr(lock)); \
71 #define __local_lock_irqsave(lock, flags) \
73 local_irq_save(flags); \
74 local_lock_acquire(this_cpu_ptr(lock)); \
77 #define __local_unlock(lock) \
79 local_lock_release(this_cpu_ptr(lock)); \
83 #define __local_unlock_irq(lock) \
85 local_lock_release(this_cpu_ptr(lock)); \
89 #define __local_unlock_irqrestore(lock, flags) \
91 local_lock_release(this_cpu_ptr(lock)); \
92 local_irq_restore(flags); \