Lines Matching defs:mm_slot

96  * struct mm_slot - ksm information per mm that is being scanned
99 * @rmap_list: head for this mm_slot's singly-linked list of rmap_items
102 struct mm_slot {
111 * @mm_slot: the current mm_slot we are scanning
119 struct mm_slot *mm_slot;
151 * @rmap_list: next rmap_item in mm_slot's singly-linked rmap_list
197 static struct mm_slot ksm_mm_head = {
201 .mm_slot = &ksm_mm_head,
260 mm_slot_cache = KSM_KMEM_CACHE(mm_slot, 0);
309 static inline struct mm_slot *alloc_mm_slot(void)
316 static inline void free_mm_slot(struct mm_slot *mm_slot)
318 kmem_cache_free(mm_slot_cache, mm_slot);
321 static struct mm_slot *get_mm_slot(struct mm_struct *mm)
323 struct mm_slot *slot;
333 struct mm_slot *mm_slot)
335 mm_slot->mm = mm;
336 hash_add(mm_slots_hash, &mm_slot->link, (unsigned long)mm);
657 static void remove_trailing_rmap_items(struct mm_slot *mm_slot,
769 struct mm_slot *mm_slot;
775 ksm_scan.mm_slot = list_entry(ksm_mm_head.mm_list.next,
776 struct mm_slot, mm_list);
779 for (mm_slot = ksm_scan.mm_slot;
780 mm_slot != &ksm_mm_head; mm_slot = ksm_scan.mm_slot) {
781 mm = mm_slot->mm;
794 remove_trailing_rmap_items(mm_slot, &mm_slot->rmap_list);
797 ksm_scan.mm_slot = list_entry(mm_slot->mm_list.next,
798 struct mm_slot, mm_list);
800 hash_del(&mm_slot->link);
801 list_del(&mm_slot->mm_list);
804 free_mm_slot(mm_slot);
822 ksm_scan.mm_slot = &ksm_mm_head;
1507 static struct rmap_item *get_next_rmap_item(struct mm_slot *mm_slot,
1527 rmap_item->mm = mm_slot->mm;
1538 struct mm_slot *slot;
1546 slot = ksm_scan.mm_slot;
1585 slot = list_entry(slot->mm_list.next, struct mm_slot, mm_list);
1586 ksm_scan.mm_slot = slot;
1655 ksm_scan.mm_slot = list_entry(slot->mm_list.next,
1656 struct mm_slot, mm_list);
1681 slot = ksm_scan.mm_slot;
1787 struct mm_slot *mm_slot;
1790 mm_slot = alloc_mm_slot();
1791 if (!mm_slot)
1798 insert_to_mm_slots_hash(mm, mm_slot);
1810 list_add_tail(&mm_slot->mm_list, &ksm_mm_head.mm_list);
1812 list_add_tail(&mm_slot->mm_list, &ksm_scan.mm_slot->mm_list);
1826 struct mm_slot *mm_slot;
1831 * case when ksmd was never running), free mm_slot immediately.
1834 * are freed, and leave the mm_slot on the list for ksmd to free.
1839 mm_slot = get_mm_slot(mm);
1840 if (mm_slot && ksm_scan.mm_slot != mm_slot) {
1841 if (!mm_slot->rmap_list) {
1842 hash_del(&mm_slot->link);
1843 list_del(&mm_slot->mm_list);
1846 list_move(&mm_slot->mm_list,
1847 &ksm_scan.mm_slot->mm_list);
1853 free_mm_slot(mm_slot);
1856 } else if (mm_slot) {