Defined in 3 files as a macro:

Defined in 3 files as a function:

Referenced in 1 files:

Smatch caller information:

kernel/rcu/tree.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 0 i 2
PARAM_VALUE 1 v 257930615975178552
PARAM_VALUE 1 v->counter 2
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
LOCK2 global &rcu_state.barrier_mutex
HALF_LOCKED2 &attr->mutex
HALF_LOCKED2 &wg->device_update_lock
HALF_LOCKED2 global &fullstop_mutex
HALF_LOCKED2 global &init_lock
HALF_LOCKED2 global &nfsd_mutex
HALF_LOCKED2 global &pernet_ops_rwsem
HALF_LOCKED2 global &rcu_fwd_mutex
HALF_LOCKED2 global &rcu_state.nocb_mutex
HALF_LOCKED2 global &slab_mutex
HALF_LOCKED2 global &vboxsf_setup_mutex
TYPE_LOCK (struct rcu_state)->barrier_mutex

fs/btrfs/subpage.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 1 v 4096-ptr_max
PARAM_VALUE 1 v->counter s32min-(-1),1-s32max
CAPPED_DATA 0 i 1
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
LOCK2 &bfs->lock
LOCK2 flags
TYPE_LOCK (struct btrfs_folio_state)->lock

mm/huge_memory.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
LOCK2 irq
LOCK2 rcu_read
HALF_LOCKED2 &((&xas)->xa)->xa_lock
HALF_LOCKED2 &anon_vma->root->rwsem
HALF_LOCKED2 &mapping->i_mmap_rwsem

fs/f2fs/gc.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 0 i 2
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
RX_PATH
TASK_NOT_RUNNING
LOCK2 &sbi->gc_lock.internal_rwsem
HALF_LOCKED2 &inode->i_rwsem
HALF_LOCKED2 &sbi->pin_sem.internal_rwsem
TYPE_LOCK (struct f2fs_rwsem)->internal_rwsem

net/smc/smc_rx.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
RX_PATH
TASK_NOT_RUNNING
UNITS 0 i unit_byte

fs/aio.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 0 i 0-s32max
PARAM_VALUE 1 v 2804162339379609696
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
FUZZY_MAX 0 i 0
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock
HALF_LOCKED2 &pool->lock

mm/rmap.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &anon_vma->root->rwsem
HALF_LOCKED2 &folio->private->lock
HALF_LOCKED2 &resv_map->rw_sema
HALF_LOCKED2 &vma->vm_private_data->rw_sema

mm/shmem.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
RX_PATH
TASK_NOT_RUNNING

drivers/gpu/drm/i915/gt/intel_context.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 0 i 1-2
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
HARD_MAX 0 i 2
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &ce->pin_mutex
HALF_LOCKED2 &gt->perf.lock
HALF_LOCKED2 &pxp->tee_mutex
HALF_LOCKED2 __flags
HALF_LOCKED2 pkt->bb_vma->obj->base.resv
HALF_LOCKED2 pkt->heci_pkt_vma->obj->base.resv
HALF_LOCKED2 vma->obj->base.resv

mm/kasan/kasan_test_c.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 0 i 42
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1

mm/folio.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
RX_PATH
TASK_NOT_RUNNING

drivers/block/drbd/drbd_req.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 0 i 1-5
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
FUZZY_MAX 0 i 1
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &resource->req_lock
HALF_LOCKED2 irq
TYPE_LOCK (struct drbd_resource)->req_lock

mm/filemap.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
RX_PATH
TASK_NOT_RUNNING

mm/page_frag_cache.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING

drivers/most/core.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 0 i 1
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &c->start_mutex

mm/truncate.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &folio->private->lock

fs/smb/server/vfs_cache.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 0 i 1-2
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
RX_PATH
TASK_NOT_RUNNING

fs/gfs2/lops.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 0 i 2
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &pool->lock
HALF_LOCKED2 &sdp->sd_freeze_mutex

mm/gup.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
USER_DATA 0 i s32min-s32max[c]
UNITS 0 i unit_page
HALF_LOCKED2 flags
HALF_LOCKED2 rcu_read

fs/iomap/buffered-io.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
UNITS 0 i unit_byte
HALF_LOCKED2 &fi->lock

fs/f2fs/file.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 0 i 2
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
LOCK2 &inode->i_rwsem
TYPE_LOCK (struct inode)->i_rwsem

kernel/rcu/update.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 0 i 2
PARAM_VALUE 1 v 295581862719967784
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
LOCK2 &rtp->barrier_q_mutex
HALF_LOCKED2 &pool->lock
HALF_LOCKED2 global &fullstop_mutex
HALF_LOCKED2 global &rcu_fwd_mutex
TYPE_LOCK (struct rcu_tasks)->barrier_q_mutex

net/core/dev.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 0 i 1-s32max
PARAM_VALUE 1 v 1317371219594612736
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1

mm/khugepaged.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
NOSPEC 0 i
NOSPEC 0 i
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
USER_DATA 0 i 1-s32max[c]
HALF_LOCKED2 &mm->mmap_lock

mm/swap_state.c raw_atomic_sub_and_test() -> arch_atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $0
DATA_SOURCE 1 v $1
RX_PATH
TASK_NOT_RUNNING