Lines Matching defs:mm_slot
46 #include "mm_slot.h"
121 * @slot: hash lookup from mm to mm_slot
122 * @rmap_list: head for this mm_slot's singly-linked list of rmap_items
125 struct mm_slot slot;
131 * @mm_slot: the current mm_slot we are scanning
139 struct ksm_mm_slot *mm_slot;
187 * @rmap_list: next rmap_item in mm_slot's singly-linked rmap_list
238 .mm_slot = &ksm_mm_head,
1016 struct ksm_mm_slot *mm_slot;
1017 struct mm_slot *slot;
1024 struct mm_slot, mm_node);
1025 ksm_scan.mm_slot = mm_slot_entry(slot, struct ksm_mm_slot, slot);
1028 for (mm_slot = ksm_scan.mm_slot; mm_slot != &ksm_mm_head;
1029 mm_slot = ksm_scan.mm_slot) {
1030 VMA_ITERATOR(vmi, mm_slot->slot.mm, 0);
1032 mm = mm_slot->slot.mm;
1052 remove_trailing_rmap_items(&mm_slot->rmap_list);
1056 slot = list_entry(mm_slot->slot.mm_node.next,
1057 struct mm_slot, mm_node);
1058 ksm_scan.mm_slot = mm_slot_entry(slot, struct ksm_mm_slot, slot);
1060 hash_del(&mm_slot->slot.hash);
1061 list_del(&mm_slot->slot.mm_node);
1064 mm_slot_free(mm_slot_cache, mm_slot);
1080 ksm_scan.mm_slot = &ksm_mm_head;
2279 static struct ksm_rmap_item *get_next_rmap_item(struct ksm_mm_slot *mm_slot,
2299 rmap_item->mm = mm_slot->slot.mm;
2311 struct ksm_mm_slot *mm_slot;
2312 struct mm_slot *slot;
2321 mm_slot = ksm_scan.mm_slot;
2322 if (mm_slot == &ksm_mm_head) {
2361 slot = list_entry(mm_slot->slot.mm_node.next,
2362 struct mm_slot, mm_node);
2363 mm_slot = mm_slot_entry(slot, struct ksm_mm_slot, slot);
2364 ksm_scan.mm_slot = mm_slot;
2370 if (mm_slot == &ksm_mm_head)
2374 ksm_scan.rmap_list = &mm_slot->rmap_list;
2377 slot = &mm_slot->slot;
2407 rmap_item = get_next_rmap_item(mm_slot,
2428 ksm_scan.rmap_list = &mm_slot->rmap_list;
2437 slot = list_entry(mm_slot->slot.mm_node.next,
2438 struct mm_slot, mm_node);
2439 ksm_scan.mm_slot = mm_slot_entry(slot, struct ksm_mm_slot, slot);
2450 hash_del(&mm_slot->slot.hash);
2451 list_del(&mm_slot->slot.mm_node);
2454 mm_slot_free(mm_slot_cache, mm_slot);
2465 * because the "mm_slot" is still hashed and
2466 * ksm_scan.mm_slot doesn't point to it anymore.
2472 mm_slot = ksm_scan.mm_slot;
2473 if (mm_slot != &ksm_mm_head)
2709 struct ksm_mm_slot *mm_slot;
2710 struct mm_slot *slot;
2713 mm_slot = mm_slot_alloc(mm_slot_cache);
2714 if (!mm_slot)
2717 slot = &mm_slot->slot;
2737 list_add_tail(&slot->mm_node, &ksm_scan.mm_slot->slot.mm_node);
2752 struct ksm_mm_slot *mm_slot;
2753 struct mm_slot *slot;
2758 * case when ksmd was never running), free mm_slot immediately.
2761 * are freed, and leave the mm_slot on the list for ksmd to free.
2767 mm_slot = mm_slot_entry(slot, struct ksm_mm_slot, slot);
2768 if (mm_slot && ksm_scan.mm_slot != mm_slot) {
2769 if (!mm_slot->rmap_list) {
2775 &ksm_scan.mm_slot->slot.mm_node);
2781 mm_slot_free(mm_slot_cache, mm_slot);
2785 } else if (mm_slot) {