Lines Matching +full:lock +full:- +full:less
2 Split page table lock
5 Originally, mm->page_table_lock spinlock protected all page tables of the
7 multi-threaded applications due high contention on the lock. To improve
8 scalability, split page table lock was introduced.
10 With split page table lock we have separate per-table lock to serialize
11 access to the table. At the moment we use split lock for PTE and PMD
12 tables. Access to higher level tables protected by mm->page_table_lock.
14 There are helpers to lock/unlock a table and other accessor functions:
16 - pte_offset_map_lock()
17 maps PTE and takes PTE table lock, returns pointer to PTE with
18 pointer to its PTE table lock, or returns NULL if no PTE table;
19 - pte_offset_map_ro_nolock()
21 lock (not taken), or returns NULL if no PTE table;
22 - pte_offset_map_rw_nolock()
24 lock (not taken) and the value of its pmd entry, or returns NULL
26 - pte_offset_map()
28 - pte_unmap()
30 - pte_unmap_unlock()
32 - pte_alloc_map_lock()
33 allocates PTE table if needed and takes its lock, returns pointer to
34 PTE with pointer to its lock, or returns NULL if allocation failed;
35 - pmd_lock()
36 takes PMD table lock, returns pointer to taken lock;
37 - pmd_lockptr()
38 returns pointer to PMD table lock;
40 Split page table lock for PTE tables is enabled compile-time if
41 CONFIG_SPLIT_PTLOCK_CPUS (usually 4) is less or equal to NR_CPUS.
42 If split lock is disabled, all tables are guarded by mm->page_table_lock.
44 Split page table lock for PMD tables is enabled, if it's enabled for PTE
47 Hugetlb and split page table lock
50 Hugetlb can support several page sizes. We use split lock only for PMD
53 Hugetlb-specific helpers:
55 - huge_pte_lock()
56 takes pmd split lock for PMD_SIZE page, mm->page_table_lock
58 - huge_pte_lockptr()
59 returns pointer to table lock;
61 Support of split page table lock by an architecture
64 There's no need in special enabling of PTE split page table lock: everything
69 allocation: slab uses page->slab_cache for its pages.
70 This field shares storage with page->ptl.
72 PMD split lock only makes sense if you have more than two page table
75 PMD split lock enabling requires pagetable_pmd_ctor() call on PMD table
84 NOTE: pagetable_pte_ctor() and pagetable_pmd_ctor() can fail -- it must
87 page->ptl
90 page->ptl is used to access split page table lock, where 'page' is struct
91 page of page containing the table. It shares storage with page->private
97 - if spinlock_t fits into long, we use page->ptr as spinlock, so we
99 - if size of spinlock_t is bigger then size of long, we use page->ptl as
101 split lock with enabled DEBUG_SPINLOCK or DEBUG_LOCK_ALLOC, but costs
107 Please, never access page->ptl directly -- use appropriate helper.