Documented in 1 files:
Defined in 1 files as a function:
Referenced in 16 files:
- arch/powerpc/mm/book3s64/mmu_context.c, line 251
- arch/powerpc/mm/pgtable-frag.c, line 27
- drivers/block/drbd/drbd_req.c, line 300
- drivers/gpu/drm/i915/gt/intel_context.c, line 331
- drivers/most/core.c
- fs/aio.c, line 978
- fs/btrfs/subpage.c
- fs/iomap/buffered-io.c, line 1884
- fs/smb/server/vfs_cache.c
- include/linux/page_ref.h, line 195
- kernel/rcu/tasks.h, line 449
- kernel/rcu/tree.c, line 3968
- mm/kasan/kasan_test_c.c, line 797
- net/core/dev.c, line 11798
- net/smc/smc_rx.c, line 130
- rust/helpers/atomic.c, line 449
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 | >->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 |