Defined in 2 files as a macro:

Defined in 9 files as a function:

Referenced in 26 files:

Smatch caller information:

mm/madvise.c guard_install_pmd_entry() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd r pmdp_get
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/madvise.c guard_remove_pmd_entry() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd r pmdp_get
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/madvise.c madvise_cold_or_pageout_pte_range() -> pmd_trans_huge()

Type Parameter Key Value
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/madvise.c madvise_free_pte_range() -> pmd_trans_huge()

Type Parameter Key Value
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/madvise.c pmd_is_huge() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd $0
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/huge_memory.c __split_huge_pmd_locked() -> pmd_trans_huge()

Type Parameter Key Value
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &vma->vm_private_data->rw_sema

mm/huge_memory.c copy_huge_pmd() -> pmd_trans_huge()

Type Parameter Key Value
PREEMPT_ADD <- disables preempt
RX_PATH
TASK_NOT_RUNNING
LOCK2 &mm->mmap_lock
LOCK2 &oldmm->mmap_lock
LOCK2 src_ptl
TYPE_LOCK (struct mm_struct)->mmap_lock

mm/huge_memory.c move_huge_pmd() -> pmd_trans_huge()

Type Parameter Key Value
LOCK2 &mm->mmap_lock
HALF_LOCKED2 &tsk->signal->exec_update_lock
TYPE_LOCK (struct mm_struct)->mmap_lock

mm/huge_memory.c move_pages_huge_pmd() -> pmd_trans_huge()

Type Parameter Key Value
LOCK2 &ctx->map_changing_lock
TYPE_LOCK (struct userfaultfd_ctx)->map_changing_lock

mm/huge_memory.c pmd_is_huge() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd $0
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/huge_memory.c split_huge_pmd_locked() -> pmd_trans_huge()

Type Parameter Key Value
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING

mm/pagewalk.c pmd_is_huge() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd $0
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/pagewalk.c walk_pmd_range() -> pmd_trans_huge()

Type Parameter Key Value
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

fs/dax.c dax_iomap_pmd_fault() -> pmd_trans_huge()

Type Parameter Key Value
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &inode->i_mapping->invalidate_lock
HALF_LOCKED2 &mapping->invalidate_lock

fs/dax.c dax_iomap_pte_fault() -> pmd_trans_huge()

Type Parameter Key Value
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &inode->i_mapping->invalidate_lock
HALF_LOCKED2 &mapping->invalidate_lock

fs/dax.c pmd_is_huge() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd $0
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &inode->i_mapping->invalidate_lock
HALF_LOCKED2 &mapping->invalidate_lock

mm/userfaultfd.c move_pages() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd r pmdp_get_lockless
LOCK2 &ctx->map_changing_lock
TYPE_LOCK (struct userfaultfd_ctx)->map_changing_lock

mm/userfaultfd.c move_pages_ptes() -> pmd_trans_huge()

Type Parameter Key Value
LOCK2 &ctx->map_changing_lock
LOCK2 rcu_read
TYPE_LOCK (struct userfaultfd_ctx)->map_changing_lock

mm/userfaultfd.c move_pages_ptes() -> pmd_trans_huge()

Type Parameter Key Value
LOCK2 &ctx->map_changing_lock
LOCK2 rcu_read
TYPE_LOCK (struct userfaultfd_ctx)->map_changing_lock

mm/userfaultfd.c pmd_is_huge() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd $0
LOCK2 &ctx->map_changing_lock
TYPE_LOCK (struct userfaultfd_ctx)->map_changing_lock

mm/userfaultfd.c userfaultfd_must_wait() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd r pmdp_get_lockless
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING

mm/damon/vaddr.c pmd_is_huge() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd $0
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

fs/proc/task_mmu.c pmd_is_huge() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd $0
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/page_vma_mapped.c page_vma_mapped_walk() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd r pmdp_get_lockless
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock
HALF_LOCKED2 global &ksm_thread_mutex
HALF_LOCKED2 global &mf_mutex
HALF_LOCKED2 rcu_read

mm/page_vma_mapped.c page_vma_mapped_walk() -> pmd_trans_huge()

Type Parameter Key Value
PREEMPT_ADD <- disables preempt
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock
HALF_LOCKED2 global &ksm_thread_mutex
HALF_LOCKED2 global &mf_mutex
HALF_LOCKED2 rcu_read

mm/mprotect.c pmd_is_huge() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd $0
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &dst_mm->mmap_lock
HALF_LOCKED2 &mm->mmap_lock

mm/mremap.c alloc_new_pmd() -> pmd_trans_huge()

Type Parameter Key Value
LOCK2 &mm->mmap_lock
HALF_LOCKED2 &tsk->signal->exec_update_lock
TYPE_LOCK (struct mm_struct)->mmap_lock

mm/mremap.c pmd_is_huge() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd $0
LOCK2 &mm->mmap_lock
HALF_LOCKED2 &tsk->signal->exec_update_lock
TYPE_LOCK (struct mm_struct)->mmap_lock

mm/ksm.c replace_page() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd r pmdp_get_lockless
LOCK2 &mm->mmap_lock
LOCK2 global &ksm_thread_mutex
TYPE_LOCK (struct mm_struct)->mmap_lock

mm/filemap.c filemap_map_pmd() -> pmd_trans_huge()

Type Parameter Key Value
RX_PATH
TASK_NOT_RUNNING
LOCK2 rcu_read
HALF_LOCKED2 &mm->mmap_lock

mm/migrate_device.c migrate_vma_collect_huge_pmd() -> pmd_trans_huge()

Type Parameter Key Value
PREEMPT_ADD <- disables preempt
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/migrate_device.c migrate_vma_collect_pmd() -> pmd_trans_huge()

Type Parameter Key Value
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/migrate_device.c migrate_vma_insert_page() -> pmd_trans_huge()

Type Parameter Key Value
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &drm->dmem->mutex

mm/migrate_device.c pmd_is_huge() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd $0
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &drm->dmem->mutex

mm/vmscan.c walk_pmd_range() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd r pmdp_get_lockless
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/vmscan.c walk_pmd_range_locked() -> pmd_trans_huge()

Type Parameter Key Value
RX_PATH
TASK_NOT_RUNNING
LOCK2 ptl
HALF_LOCKED2 &mm->mmap_lock

mm/memory.c __handle_mm_fault() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd r pmdp_get_lockless
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/memory.c pmd_is_huge() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd $0
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock
HALF_LOCKED2 &oldmm->mmap_lock

mm/memory.c remap_pmd_range() -> pmd_trans_huge()

Type Parameter Key Value
RX_PATH
TASK_NOT_RUNNING

mm/memory.c walk_to_pmd() -> pmd_trans_huge()

Type Parameter Key Value
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING

mm/mincore.c pmd_is_huge() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd $0
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/memory-failure.c dev_pagemap_mapping_shift() -> pmd_trans_huge()

Type Parameter Key Value
RX_PATH
TASK_NOT_RUNNING
LOCK2 rcu_read
HALF_LOCKED2 &av->root->rwsem
HALF_LOCKED2 &mapping->i_mmap_rwsem
HALF_LOCKED2 global &mf_mutex

mm/memory-failure.c pmd_is_huge() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd $0
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/gup.c follow_huge_pmd() -> pmd_trans_huge()

Type Parameter Key Value
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/gup.c follow_pmd_mask() -> pmd_trans_huge()

Type Parameter Key Value
PREEMPT_ADD <- disables preempt
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/gup.c pmd_is_huge() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd $0
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/pgtable-generic.c __pte_offset_map() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd r pmdp_get_lockless
RX_PATH
TASK_NOT_RUNNING
LOCK2 rcu_read
HALF_LOCKED2 &mm->mmap_lock
HALF_LOCKED2 flags

mm/pgtable-generic.c pmdp_collapse_flush() -> pmd_trans_huge()

Type Parameter Key Value
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mapping->i_mmap_rwsem
HALF_LOCKED2 &mm->mmap_lock
HALF_LOCKED2 &vma->anon_vma->root->rwsem
HALF_LOCKED2 rcu_read

mm/pgtable-generic.c pmdp_huge_clear_flush() -> pmd_trans_huge()

Type Parameter Key Value
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &ctx->map_changing_lock

mm/mempolicy.c pmd_is_huge() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd $0
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/debug_vm_pgtable.c pmd_is_huge() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd $0

mm/debug_vm_pgtable.c pmd_thp_tests() -> pmd_trans_huge()

Type Parameter Key Value

mm/debug_vm_pgtable.c pmd_thp_tests() -> pmd_trans_huge()

Type Parameter Key Value

mm/mapping_dirty_helpers.c wp_clean_pmd_entry() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd r pmdp_get_lockless
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/mlock.c pmd_is_huge() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd $0
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/hmm.c hmm_vma_walk_pmd() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd r pmdp_get_lockless
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/hmm.c hmm_vma_walk_pmd() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd r pmdp_get_lockless
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mm->mmap_lock

mm/khugepaged.c check_pmd_state() -> pmd_trans_huge()

Type Parameter Key Value
DATA_SOURCE 0 pmd r pmdp_get_lockless
PREEMPT_ADD
RX_PATH
TASK_NOT_RUNNING
HALF_LOCKED2 &mapping->i_mmap_rwsem
HALF_LOCKED2 &mm->mmap_lock