Lines Matching defs:mm_slot

77  * struct mm_slot - hash lookup from mm to mm_slot
82 struct mm_slot {
91 * @mm_slot: the current mm_slot we are scanning
98 struct mm_slot *mm_slot;
1998 sizeof(struct mm_slot),
1999 __alignof__(struct mm_slot), 0, NULL);
2006 static inline struct mm_slot *alloc_mm_slot(void)
2013 static inline void free_mm_slot(struct mm_slot *mm_slot)
2015 kmem_cache_free(mm_slot_cache, mm_slot);
2018 static struct mm_slot *get_mm_slot(struct mm_struct *mm)
2020 struct mm_slot *mm_slot;
2022 hash_for_each_possible(mm_slots_hash, mm_slot, hash, (unsigned long)mm)
2023 if (mm == mm_slot->mm)
2024 return mm_slot;
2030 struct mm_slot *mm_slot)
2032 mm_slot->mm = mm;
2033 hash_add(mm_slots_hash, &mm_slot->hash, (long)mm);
2043 struct mm_slot *mm_slot;
2046 mm_slot = alloc_mm_slot();
2047 if (!mm_slot)
2053 free_mm_slot(mm_slot);
2058 insert_to_mm_slots_hash(mm, mm_slot);
2064 list_add_tail(&mm_slot->mm_node, &khugepaged_scan.mm_head);
2097 struct mm_slot *mm_slot;
2101 mm_slot = get_mm_slot(mm);
2102 if (mm_slot && khugepaged_scan.mm_slot != mm_slot) {
2103 hash_del(&mm_slot->hash);
2104 list_del(&mm_slot->mm_node);
2111 free_mm_slot(mm_slot);
2113 } else if (mm_slot) {
2613 static void collect_mm_slot(struct mm_slot *mm_slot)
2615 struct mm_struct *mm = mm_slot->mm;
2620 /* free mm_slot */
2621 hash_del(&mm_slot->hash);
2622 list_del(&mm_slot->mm_node);
2631 free_mm_slot(mm_slot);
2641 struct mm_slot *mm_slot;
2649 if (khugepaged_scan.mm_slot)
2650 mm_slot = khugepaged_scan.mm_slot;
2652 mm_slot = list_entry(khugepaged_scan.mm_head.next,
2653 struct mm_slot, mm_node);
2655 khugepaged_scan.mm_slot = mm_slot;
2659 mm = mm_slot->mm;
2717 VM_BUG_ON(khugepaged_scan.mm_slot != mm_slot);
2719 * Release the current mm_slot if this mm is about to die, or
2726 * mm_slot not pointing to the exiting mm.
2728 if (mm_slot->mm_node.next != &khugepaged_scan.mm_head) {
2729 khugepaged_scan.mm_slot = list_entry(
2730 mm_slot->mm_node.next,
2731 struct mm_slot, mm_node);
2734 khugepaged_scan.mm_slot = NULL;
2738 collect_mm_slot(mm_slot);
2775 if (!khugepaged_scan.mm_slot)
2810 struct mm_slot *mm_slot;
2821 mm_slot = khugepaged_scan.mm_slot;
2822 khugepaged_scan.mm_slot = NULL;
2823 if (mm_slot)
2824 collect_mm_slot(mm_slot);