On 11/09/2018 12:17 PM, Naoya Horiguchi wrote: > The new function is a reverse operation of set_hwpoison_free_buddy_page() > to adjust unpoison_memory() to the new semantics. > > Signed-off-by: Naoya Horiguchi <n-horiguchi@xxxxxxxxxxxxx> snip > + > +/* > + * Reverse operation of set_hwpoison_free_buddy_page(), which is expected > + * to work only on error pages isolated from buddy allocator. > + */ > +bool clear_hwpoison_free_buddy_page(struct page *page) > +{ > + struct zone *zone = page_zone(page); > + bool unpoisoned = false; > + > + spin_lock(&zone->lock); > + if (TestClearPageHWPoison(page)) { > + unsigned long pfn = page_to_pfn(page); > + int migratetype = get_pfnblock_migratetype(page, pfn); > + > + __free_one_page(page, pfn, zone, 0, migratetype); > + unpoisoned = true; > + } > + spin_unlock(&zone->lock); > + return unpoisoned; > +} > #endif > Though there are multiple page state checks in unpoison_memory() leading upto clearing HWPoison flag, the page must not be in buddy already if __free_one_page() would be called on it.