Lines Matching defs:mm_slot

115  * struct mm_slot - ksm information per mm that is being scanned
118 * @rmap_list: head for this mm_slot's singly-linked list of rmap_items
121 struct mm_slot {
130 * @mm_slot: the current mm_slot we are scanning
138 struct mm_slot *mm_slot;
186 * @rmap_list: next rmap_item in mm_slot's singly-linked rmap_list
235 static struct mm_slot ksm_mm_head = {
239 .mm_slot = &ksm_mm_head,
317 mm_slot_cache = KSM_KMEM_CACHE(mm_slot, 0);
413 static inline struct mm_slot *alloc_mm_slot(void)
420 static inline void free_mm_slot(struct mm_slot *mm_slot)
422 kmem_cache_free(mm_slot_cache, mm_slot);
425 static struct mm_slot *get_mm_slot(struct mm_struct *mm)
427 struct mm_slot *slot;
437 struct mm_slot *mm_slot)
439 mm_slot->mm = mm;
440 hash_add(mm_slots_hash, &mm_slot->link, (unsigned long)mm);
822 static void remove_trailing_rmap_items(struct mm_slot *mm_slot,
969 struct mm_slot *mm_slot;
975 ksm_scan.mm_slot = list_entry(ksm_mm_head.mm_list.next,
976 struct mm_slot, mm_list);
979 for (mm_slot = ksm_scan.mm_slot;
980 mm_slot != &ksm_mm_head; mm_slot = ksm_scan.mm_slot) {
981 mm = mm_slot->mm;
994 remove_trailing_rmap_items(mm_slot, &mm_slot->rmap_list);
998 ksm_scan.mm_slot = list_entry(mm_slot->mm_list.next,
999 struct mm_slot, mm_list);
1001 hash_del(&mm_slot->link);
1002 list_del(&mm_slot->mm_list);
1005 free_mm_slot(mm_slot);
1020 ksm_scan.mm_slot = &ksm_mm_head;
2202 static struct rmap_item *get_next_rmap_item(struct mm_slot *mm_slot,
2222 rmap_item->mm = mm_slot->mm;
2233 struct mm_slot *slot;
2241 slot = ksm_scan.mm_slot;
2279 slot = list_entry(slot->mm_list.next, struct mm_slot, mm_list);
2280 ksm_scan.mm_slot = slot;
2348 ksm_scan.mm_slot = list_entry(slot->mm_list.next,
2349 struct mm_slot, mm_list);
2374 * because the "mm_slot" is still hashed and
2375 * ksm_scan.mm_slot doesn't point to it anymore.
2381 slot = ksm_scan.mm_slot;
2499 struct mm_slot *mm_slot;
2502 mm_slot = alloc_mm_slot();
2503 if (!mm_slot)
2510 insert_to_mm_slots_hash(mm, mm_slot);
2522 list_add_tail(&mm_slot->mm_list, &ksm_mm_head.mm_list);
2524 list_add_tail(&mm_slot->mm_list, &ksm_scan.mm_slot->mm_list);
2538 struct mm_slot *mm_slot;
2543 * case when ksmd was never running), free mm_slot immediately.
2546 * are freed, and leave the mm_slot on the list for ksmd to free.
2551 mm_slot = get_mm_slot(mm);
2552 if (mm_slot && ksm_scan.mm_slot != mm_slot) {
2553 if (!mm_slot->rmap_list) {
2554 hash_del(&mm_slot->link);
2555 list_del(&mm_slot->mm_list);
2558 list_move(&mm_slot->mm_list,
2559 &ksm_scan.mm_slot->mm_list);
2565 free_mm_slot(mm_slot);
2568 } else if (mm_slot) {