Documented in 1 files:

Defined in 1 files as a function:

Referenced in 16 files:

Smatch caller information:

kernel/rcu/tree.c rcu_barrier() -> atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 0 i 2
PARAM_VALUE 1 v 257930615975178552
PARAM_VALUE 1 v->counter 2
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 btrfs_folio_end_lock_bitmap() -> 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 r bitmap_weight
PREEMPT_ADD <- disables preempt
RX_PATH
TASK_NOT_RUNNING
LOCK2 &bfs->lock
LOCK2 flags
HALF_LOCKED2 &mapping->invalidate_lock
TYPE_LOCK (struct btrfs_folio_state)->lock

fs/btrfs/subpage.c btrfs_subpage_end_and_test_lock() -> 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
CONSTRAINT 0 i <=4136
PREEMPT_ADD <- disables preempt
RX_PATH
TASK_NOT_RUNNING
LOCK2 &bfs->lock
LOCK2 flags
HALF_LOCKED2 &pool->lock
TYPE_LOCK (struct btrfs_folio_state)->lock

mm/huge_memory.c page_ref_sub_and_test() -> atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $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 page_ref_sub_and_test() -> atomic_sub_and_test()

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

net/smc/smc_rx.c smc_rx_pipe_buf_release() -> atomic_sub_and_test()

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

fs/aio.c exit_aio() -> atomic_sub_and_test()

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

mm/rmap.c page_ref_sub_and_test() -> atomic_sub_and_test()

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

mm/shmem.c page_ref_sub_and_test() -> atomic_sub_and_test()

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

drivers/gpu/drm/i915/gt/intel_context.c __intel_context_do_unpin() -> 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 $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 kasan_atomics_helper() -> atomic_sub_and_test()

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

mm/folio.c page_ref_sub_and_test() -> atomic_sub_and_test()

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

drivers/block/drbd/drbd_req.c drbd_req_put_completion_ref() -> 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 $2
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 page_ref_sub_and_test() -> atomic_sub_and_test()

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

mm/page_frag_cache.c page_ref_sub_and_test() -> atomic_sub_and_test()

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

drivers/most/core.c most_free_mbo_coherent() -> atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 0 i 1
PARAM_VALUE 1 v 4096-ptr_max
RX_PATH
TASK_NOT_RUNNING
LOCK2 &c->start_mutex
HALF_LOCKED2 &c->io_mutex
HALF_LOCKED2 global &probe_disc_mt
TYPE_LOCK (struct most_channel)->start_mutex

drivers/most/core.c most_read_completion() -> atomic_sub_and_test()

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

mm/truncate.c page_ref_sub_and_test() -> atomic_sub_and_test()

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

fs/smb/server/vfs_cache.c __close_file_table_ids() -> atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 0 i 1-2
PARAM_VALUE 1 v 4096-ptr_max
PARAM_VALUE 1 v->counter 0-s32max
DATA_SOURCE 0 i r ksmbd_mark_fp_closed
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &pool->lock

fs/smb/server/vfs_cache.c ksmbd_close_disconnected_durable_delete_on_close() -> atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 0 i 2
PARAM_VALUE 1 v 4096-ptr_max

fs/smb/server/vfs_cache.c ksmbd_close_fd_app_instance_id() -> atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 0 i 2
PARAM_VALUE 1 v 4096-ptr_max
PARAM_VALUE 1 v->counter 0-s32max
DATA_SOURCE 0 i r ksmbd_mark_fp_closed

fs/smb/server/vfs_cache.c ksmbd_scavenger_dispose_dh() -> atomic_sub_and_test()

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

fs/gfs2/lops.c page_ref_sub_and_test() -> atomic_sub_and_test()

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

mm/gup.c page_ref_sub_and_test() -> atomic_sub_and_test()

Type Parameter Key Value
PARAM_VALUE 1 v 4096-ptr_max
DATA_SOURCE 0 i $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 iomap_finish_folio_write() -> atomic_sub_and_test()

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

fs/f2fs/file.c page_ref_sub_and_test() -> atomic_sub_and_test()

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

kernel/rcu/update.c rcu_barrier_tasks_generic() -> atomic_sub_and_test()

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

net/core/dev.c netdev_run_todo() -> atomic_sub_and_test()

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

mm/khugepaged.c page_ref_sub_and_test() -> atomic_sub_and_test()

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

mm/swap_state.c page_ref_sub_and_test() -> atomic_sub_and_test()

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