| Function report | 
| Source Code: kernel\locking\lockdep.c | Create Date:2022-07-28 09:49:57 | 
| Last Modify:2020-03-17 14:16:01 | Copyright©Brick | 
| home page | Tree | 
| Annotation kernel can get tool activity | Download SCCT | Chinese | 
Name:This gets called for every mutex_lock*()/spin_lock*() operation
Proto:static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass, int trylock, int read, int check, int hardirqs_off, struct lockdep_map *nest_lock, unsigned long ip, int references, int pin_count)
Type:int
Parameter:
| Type | Parameter | Name | 
|---|---|---|
| struct lockdep_map * | lock | |
| unsigned int | subclass | |
| int | trylock | |
| int | read | |
| int | check | |
| int | hardirqs_off | |
| struct lockdep_map * | nest_lock | |
| unsigned long | ip | |
| int | references | |
| int | pin_count | 
| 3816 | curr = current process | 
| 3817 | struct lock_class * class = NULL | 
| 3820 | chain_head = 0 | 
| 3827 | If Not r sysctl || key == __lockdep_no_validate__ Then check = 0 | 
| 3830 | If subclass < NR_LOCKDEP_CACHING_CLASSES Then class = class_cache[subclass] | 
| 3835 | If Value for the false possibility is greater at compile time(!class) Then | 
| 3837 | If Not class Then Return 0 | 
| 3841 | debug_class_ops_inc(class) | 
| 3843 | If very_verbose(class) Then | 
| 3848 | dump_stack() | 
| 3856 | depth = lockdep_depth | 
| 3860 | If DEBUG_LOCKS_WARN_ON(depth >= MAX_LOCK_DEPTH) Then Return 0 | 
| 3863 | class_idx = class - lock_classes | 
| 3865 | If depth Then | 
| 3866 | hlock = held_locks + depth - 1 | 
| 3868 | If Not references Then references++ | 
| 3871 | If Not references Then references++ | 
| 3874 | references += references | 
| 3877 | If DEBUG_LOCKS_WARN_ON(references < references) Then Return 0 | 
| 3880 | Return 2 | 
| 3884 | hlock = held_locks + depth | 
| 3889 | If DEBUG_LOCKS_WARN_ON(!class) Then Return 0 | 
| 3892 | acquire_ip = ip | 
| 3895 | irq_context = task_irq_context(curr) | 
| 3899 | hardirqs_off = Not Not hardirqs_off | 
| 3900 | references = references | 
| 3908 | If Not mark_usage(curr, hlock, check) Then Return 0 | 
| 3924 | If DEBUG_LOCKS_WARN_ON(!st_bit - Determine whether a bit is set*@nr: bit number to test*@addr: Address to start counting from) Then Return 0 | 
| 3927 | chain_key = curr_chain_key | 
| 3928 | If Not depth Then | 
| 3932 | If DEBUG_LOCKS_WARN_ON(chain_key != INITIAL_CHAIN_KEY) Then Return 0 | 
| 3934 | chain_head = 1 | 
| 3937 | prev_chain_key = chain_key | 
| 3938 | If separate_irq_context(curr, hlock) Then | 
| 3939 | chain_key = INITIAL_CHAIN_KEY | 
| 3940 | chain_head = 1 | 
| 3944 | If nest_lock && Not __lock_is_held(nest_lock, - 1) Then | 
| 3945 | print_lock_nested_lock_not_held(curr, hlock, ip) | 
| 3946 | Return 0 | 
| 3950 | WARN_ON_ONCE(depth && !key) | 
| 3951 | WARN_ON_ONCE(!key) | 
| 3954 | If Not validate_chain(curr, hlock, chain_head, chain_key) Then Return 0 | 
| 3957 | curr_chain_key = chain_key | 
| 3958 | lockdep_depth++ | 
| 3966 | print_lockdep_off("BUG: MAX_LOCK_DEPTH too low!") | 
| 3967 | printk(debug-level messages "depth: %i max: %lu!\n", lockdep_depth, MAX_LOCK_DEPTH) | 
| 3971 | debug_show_all_locks() | 
| 3972 | dump_stack() | 
| 3974 | Return 0 | 
| 3977 | If Value for the false possibility is greater at compile time(lockdep_depth > max_lockdep_depth) Then max_lockdep_depth = lockdep_depth | 
| 3980 | Return 1 | 
| Name | Describe | 
|---|---|
| reacquire_held_locks | |
| lock_acquire | We are not always called with irqs disabled - do that here,* and also avoid lockdep recursion: | 
| Source code conversion tool public plug-in interface | X | 
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |