Defined in 2 files as a function:

Referenced in 7 files:

Smatch caller information:

mm/memcontrol.c __mem_cgroup_try_charge_swap() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
PARAM_VALUE 0 ci->memcg_table 0,4096-ptr_max
DATA_SOURCE 0 ci r swap_cluster_get_and_lock
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL

mm/huge_memory.c __folio_freeze_and_split_unmapped() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
DATA_SOURCE 0 ci r swap_cluster_get_and_lock
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL
LOCK2 irq

mm/page_io.c swap_zeromap_folio_clear() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
DATA_SOURCE 0 ci r swap_cluster_get_and_lock
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL

mm/page_io.c swap_zeromap_folio_set() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
DATA_SOURCE 0 ci r swap_cluster_get_and_lock
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL

mm/swapfile.c __try_to_reclaim_swap() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
CAPPED_DATA 0 ci->table 1
DATA_SOURCE 0 ci r swap_cluster_lock
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL
HALF_LOCKED2 global &system_transition_mutex

mm/swapfile.c alloc_swap_scan_cluster() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
PARAM_VALUE 0 ci->flags 1,3-5
DATA_SOURCE 0 ci $1
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL
HALF_LOCKED2 &si->global_cluster_lock
HALF_LOCKED2 global &device_hotplug_lock
HALF_LOCKED2 global &system_transition_mutex

mm/swapfile.c cluster_alloc_swap_entry() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
DATA_SOURCE 0 ci r swap_cluster_lock
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL
LOCK2 &si->global_cluster_lock
HALF_LOCKED2 global &device_hotplug_lock
HALF_LOCKED2 global &system_transition_mutex
TYPE_LOCK (struct swap_info_struct)->global_cluster_lock

mm/swapfile.c swap_alloc_fast() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
DATA_SOURCE 0 ci r swap_cluster_lock
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL

mm/swapfile.c swap_alloc_hibernation_slot() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
DATA_SOURCE 0 ci r swap_cluster_lock
PREEMPT_ADD <- disables preempt
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL
LOCK2 global &device_hotplug_lock
LOCK2 global &system_transition_mutex

mm/swapfile.c swap_dup_entries_cluster() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
PARAM_VALUE 0 ci->extend_table 0,4096-ptr_max
CAPPED_DATA 0 ci->table 1
DATA_SOURCE 0 ci r swap_cluster_lock
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL
HALF_LOCKED2 &mm->mmap_lock
HALF_LOCKED2 &oldmm->mmap_lock
HALF_LOCKED2 dst_ptl
HALF_LOCKED2 rcu_read
HALF_LOCKED2 src_ptl
HALF_LOCKED2 0 &ci->lock

mm/swapfile.c swap_dup_entries_cluster() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
PARAM_VALUE 0 ci->extend_table 0,4096-ptr_max
CAPPED_DATA 0 ci->table 1
DATA_SOURCE 0 ci r swap_cluster_lock
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL
HALF_LOCKED2 &mm->mmap_lock
HALF_LOCKED2 &oldmm->mmap_lock
HALF_LOCKED2 dst_ptl
HALF_LOCKED2 rcu_read
HALF_LOCKED2 src_ptl
HALF_LOCKED2 0 &ci->lock

mm/swapfile.c swap_entry_swapped() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
PARAM_VALUE 0 ci->table 0,4096-ptr_max
DATA_SOURCE 0 ci r swap_cluster_lock
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL
LOCK2 &mm->mmap_lock
LOCK2 &oldmm->mmap_lock
LOCK2 dst_ptl
LOCK2 rcu_read
LOCK2 src_ptl
TYPE_LOCK (struct mm_struct)->mmap_lock

mm/swapfile.c swap_free_hibernation_slot() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
PARAM_VALUE 0 ci->extend_table 0,4096-ptr_max
DATA_SOURCE 0 ci r swap_cluster_lock
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL
LOCK2 global &system_transition_mutex
HALF_LOCKED2 global &device_hotplug_lock

mm/swapfile.c swap_put_entries_cluster() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
DATA_SOURCE 0 ci r swap_cluster_lock
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL
HALF_LOCKED2 ptl

mm/swapfile.c swap_reclaim_full_clusters() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
PARAM_VALUE 0 ci->flags 1-255
DATA_SOURCE 0 ci r isolate_lock_cluster
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL
HALF_LOCKED2 0 &ci->lock

mm/swapfile.c swp_swapcount() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
CAPPED_DATA 0 ci->table 1
DATA_SOURCE 0 ci r swap_cluster_lock
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL
LOCK2 ptl
HALF_LOCKED2 &mm->mmap_lock

mm/swapfile.c wait_for_allocation() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
DATA_SOURCE 0 ci r swap_cluster_lock
CAPABLE 0 21
NOCHECK_CALL

mm/migrate.c __folio_migrate_mapping() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL
LOCK2 irq
HALF_LOCKED2 &((&xas)->xa)->xa_lock

mm/swap_state.c swap_cache_del_folio() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
PARAM_VALUE 0 ci->count 0-511,513-u16max
PARAM_VALUE 0 ci->flags 1-2,5
PARAM_VALUE 0 ci->list.next 4096-ptr_max
PARAM_VALUE 0 ci->list.next->prev 4096-ptr_max
PARAM_VALUE 0 ci->list.prev->next 4096-ptr_max
PARAM_VALUE 0 ci->memcg_table 0,4096-ptr_max
PARAM_VALUE 0 *ci->memcg_table->id 0-u16max
DATA_SOURCE 0 ci r swap_cluster_lock
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL
HALF_LOCKED2 global &mf_mutex
HALF_LOCKED2 vmf->ptl

mm/memcontrol-v1.c memcg1_swapin() -> swap_cluster_unlock()

Type Parameter Key Value
PARAM_VALUE 0 ci 4096-ptr_max
PARAM_VALUE 0 ci->memcg_table 0,4096-ptr_max
PARAM_VALUE 0 *ci->memcg_table->id 0-u16max
DATA_SOURCE 0 ci r swap_cluster_get_and_lock
RX_PATH
TASK_NOT_RUNNING
NOCHECK_CALL