|
@@ -4746,40 +4746,6 @@ follow_huge_pgd(struct mm_struct *mm, unsigned long address, pgd_t *pgd, int fla
|
|
|
return pte_page(*(pte_t *)pgd) + ((address & ~PGDIR_MASK) >> PAGE_SHIFT);
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_MEMORY_FAILURE
|
|
|
-
|
|
|
-/*
|
|
|
- * This function is called from memory failure code.
|
|
|
- */
|
|
|
-int dequeue_hwpoisoned_huge_page(struct page *hpage)
|
|
|
-{
|
|
|
- struct hstate *h = page_hstate(hpage);
|
|
|
- int nid = page_to_nid(hpage);
|
|
|
- int ret = -EBUSY;
|
|
|
-
|
|
|
- spin_lock(&hugetlb_lock);
|
|
|
- /*
|
|
|
- * Just checking !page_huge_active is not enough, because that could be
|
|
|
- * an isolated/hwpoisoned hugepage (which have >0 refcount).
|
|
|
- */
|
|
|
- if (!page_huge_active(hpage) && !page_count(hpage)) {
|
|
|
- /*
|
|
|
- * Hwpoisoned hugepage isn't linked to activelist or freelist,
|
|
|
- * but dangling hpage->lru can trigger list-debug warnings
|
|
|
- * (this happens when we call unpoison_memory() on it),
|
|
|
- * so let it point to itself with list_del_init().
|
|
|
- */
|
|
|
- list_del_init(&hpage->lru);
|
|
|
- set_page_refcounted(hpage);
|
|
|
- h->free_huge_pages--;
|
|
|
- h->free_huge_pages_node[nid]--;
|
|
|
- ret = 0;
|
|
|
- }
|
|
|
- spin_unlock(&hugetlb_lock);
|
|
|
- return ret;
|
|
|
-}
|
|
|
-#endif
|
|
|
-
|
|
|
bool isolate_huge_page(struct page *page, struct list_head *list)
|
|
|
{
|
|
|
bool ret = true;
|