函数逻辑报告 |
Source Code:kernel\locking\lockdep.c |
Create Date:2022-07-27 10:50:14 |
| Last Modify:2020-03-17 14:16:01 | Copyright©Brick |
| 首页 | 函数Tree |
| 注解内核,赢得工具 | 下载SCCT | English |
函数名称:This gets called for every mutex_lock*()/spin_lock*() operation
函数原型: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)
返回类型:int
参数:
| 类型 | 参数 | 名称 |
|---|---|---|
| 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 |
| 3817 | struct lock_class * class = NULL |
| 3820 | chain_head等于0 |
| 3827 | 如果非r sysctl 或key恒等于__lockdep_no_validate__则check等于0 |
| 3835 | 如果此条件成立可能性小(为编译器优化)(!class)则 |
| 3837 | 如果非class则返回:0 |
| 3841 | debug_class_ops_inc(class) |
| 3843 | 如果very_verbose(class)则 |
| 3848 | dump_stack() |
| 3856 | depth等于lockdep_depth |
| 3860 | 如果DEBUG_LOCKS_WARN_ON(depth >= MAX_LOCK_DEPTH)则返回:0 |
| 3863 | class_idx等于class减lock_classes |
| 3865 | 如果depth则 |
| 3866 | hlock等于held_locks加depth减1 |
| 3868 | 如果非references则references自加 |
| 3871 | 如果非references则references自加 |
| 3874 | references加等于references |
| 3877 | 如果DEBUG_LOCKS_WARN_ON(references < references)则返回:0 |
| 3880 | 返回:2 |
| 3884 | hlock等于held_locks加depth |
| 3889 | 如果DEBUG_LOCKS_WARN_ON(!class)则返回:0 |
| 3892 | acquire_ip等于ip |
| 3895 | irq_context等于task_irq_context(curr) |
| 3899 | hardirqs_off等于非非hardirqs_off |
| 3900 | references等于references |
| 3908 | 如果非mark_usage(curr, hlock, check)则返回:0 |
| 3924 | 如果DEBUG_LOCKS_WARN_ON(!st_bit - Determine whether a bit is set*@nr: bit number to test*@addr: Address to start counting from)则返回:0 |
| 3927 | chain_key等于curr_chain_key |
| 3928 | 如果非depth则 |
| 3932 | 如果DEBUG_LOCKS_WARN_ON(chain_key != INITIAL_CHAIN_KEY)则返回:0 |
| 3934 | chain_head等于1 |
| 3937 | prev_chain_key等于chain_key |
| 3938 | 如果separate_irq_context(curr, hlock)则 |
| 3939 | chain_key等于INITIAL_CHAIN_KEY |
| 3940 | chain_head等于1 |
| 3944 | 如果nest_lock且非__lock_is_held(nest_lock, - 1)则 |
| 3945 | print_lock_nested_lock_not_held(curr, hlock, ip) |
| 3946 | 返回:0 |
| 3950 | WARN_ON_ONCE(depth && !key) |
| 3951 | WARN_ON_ONCE(!key) |
| 3954 | 如果非validate_chain(curr, hlock, chain_head, chain_key)则返回:0 |
| 3957 | curr_chain_key等于chain_key |
| 3958 | lockdep_depth自加 |
| 3964 | 如果此条件成立可能性小(为编译器优化)(lockdep_depth >= MAX_LOCK_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) |
| 3970 | lockdep_print_held_locks(当前进程) |
| 3971 | debug_show_all_locks() |
| 3972 | dump_stack() |
| 3974 | 返回:0 |
| 3980 | 返回:1 |
| 名称 | 描述 |
|---|---|
| reacquire_held_locks | |
| lock_acquire | We are not always called with irqs disabled - do that here,* and also avoid lockdep recursion: |
| 源代码转换工具 开放的插件接口 | X |
|---|---|
| 支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |