Lines Matching refs:mm_slot
102 struct mm_slot { struct
119 struct mm_slot *mm_slot; member
197 static struct mm_slot ksm_mm_head = {
201 .mm_slot = &ksm_mm_head,
260 mm_slot_cache = KSM_KMEM_CACHE(mm_slot, 0); in ksm_slab_init()
309 static inline struct mm_slot *alloc_mm_slot(void) in alloc_mm_slot()
316 static inline void free_mm_slot(struct mm_slot *mm_slot) in free_mm_slot() argument
318 kmem_cache_free(mm_slot_cache, mm_slot); in free_mm_slot()
321 static struct mm_slot *get_mm_slot(struct mm_struct *mm) in get_mm_slot()
323 struct mm_slot *slot; in get_mm_slot()
333 struct mm_slot *mm_slot) in insert_to_mm_slots_hash() argument
335 mm_slot->mm = mm; in insert_to_mm_slots_hash()
336 hash_add(mm_slots_hash, &mm_slot->link, (unsigned long)mm); in insert_to_mm_slots_hash()
658 static void remove_trailing_rmap_items(struct mm_slot *mm_slot, in remove_trailing_rmap_items() argument
770 struct mm_slot *mm_slot; in unmerge_and_remove_all_rmap_items() local
776 ksm_scan.mm_slot = list_entry(ksm_mm_head.mm_list.next, in unmerge_and_remove_all_rmap_items()
777 struct mm_slot, mm_list); in unmerge_and_remove_all_rmap_items()
780 for (mm_slot = ksm_scan.mm_slot; in unmerge_and_remove_all_rmap_items()
781 mm_slot != &ksm_mm_head; mm_slot = ksm_scan.mm_slot) { in unmerge_and_remove_all_rmap_items()
782 mm = mm_slot->mm; in unmerge_and_remove_all_rmap_items()
795 remove_trailing_rmap_items(mm_slot, &mm_slot->rmap_list); in unmerge_and_remove_all_rmap_items()
798 ksm_scan.mm_slot = list_entry(mm_slot->mm_list.next, in unmerge_and_remove_all_rmap_items()
799 struct mm_slot, mm_list); in unmerge_and_remove_all_rmap_items()
801 hash_del(&mm_slot->link); in unmerge_and_remove_all_rmap_items()
802 list_del(&mm_slot->mm_list); in unmerge_and_remove_all_rmap_items()
805 free_mm_slot(mm_slot); in unmerge_and_remove_all_rmap_items()
823 ksm_scan.mm_slot = &ksm_mm_head; in unmerge_and_remove_all_rmap_items()
1526 static struct rmap_item *get_next_rmap_item(struct mm_slot *mm_slot, in get_next_rmap_item() argument
1546 rmap_item->mm = mm_slot->mm; in get_next_rmap_item()
1557 struct mm_slot *slot; in scan_get_next_rmap_item()
1565 slot = ksm_scan.mm_slot; in scan_get_next_rmap_item()
1604 slot = list_entry(slot->mm_list.next, struct mm_slot, mm_list); in scan_get_next_rmap_item()
1605 ksm_scan.mm_slot = slot; in scan_get_next_rmap_item()
1674 ksm_scan.mm_slot = list_entry(slot->mm_list.next, in scan_get_next_rmap_item()
1675 struct mm_slot, mm_list); in scan_get_next_rmap_item()
1700 slot = ksm_scan.mm_slot; in scan_get_next_rmap_item()
1806 struct mm_slot *mm_slot; in __ksm_enter() local
1809 mm_slot = alloc_mm_slot(); in __ksm_enter()
1810 if (!mm_slot) in __ksm_enter()
1817 insert_to_mm_slots_hash(mm, mm_slot); in __ksm_enter()
1829 list_add_tail(&mm_slot->mm_list, &ksm_mm_head.mm_list); in __ksm_enter()
1831 list_add_tail(&mm_slot->mm_list, &ksm_scan.mm_slot->mm_list); in __ksm_enter()
1845 struct mm_slot *mm_slot; in __ksm_exit() local
1858 mm_slot = get_mm_slot(mm); in __ksm_exit()
1859 if (mm_slot && ksm_scan.mm_slot != mm_slot) { in __ksm_exit()
1860 if (!mm_slot->rmap_list) { in __ksm_exit()
1861 hash_del(&mm_slot->link); in __ksm_exit()
1862 list_del(&mm_slot->mm_list); in __ksm_exit()
1865 list_move(&mm_slot->mm_list, in __ksm_exit()
1866 &ksm_scan.mm_slot->mm_list); in __ksm_exit()
1872 free_mm_slot(mm_slot); in __ksm_exit()
1875 } else if (mm_slot) { in __ksm_exit()