Messages in this thread | | | Date | Thu, 18 Mar 2021 13:34:12 +0800 | From | Aili Yao <> | Subject | Re: [PATCH] mm/gup: check page posion status for coredump. |
| |
On Thu, 18 Mar 2021 04:46:00 +0000 Matthew Wilcox <willy@infradead.org> wrote:
> On Wed, Mar 17, 2021 at 10:12:02AM +0100, David Hildenbrand wrote: > > > + if (IS_ENABLED(CONFIG_MEMORY_FAILURE) && ret == 1) { > > > + if (unlikely(PageHuge(page) && PageHWPoison(compound_head(page)))) > > > + ret = 0; > > > + else if (unlikely(PageHWPoison(page))) > > > + ret = 0; > > > + } > > > > I wonder if a simple > > > > if (PageHWPoison(compound_head(page))) > > ret = 0; > > > > won't suffice. But I guess the "issue" is compound pages that are not huge > > pages or transparent huge pages. > > THPs don't set the HWPoison bit on the head page. > > https://lore.kernel.org/linux-mm/20210316140947.GA3420@casper.infradead.org/ > > (and PAGEFLAG(HWPoison, hwpoison, PF_ANY)) > > By the way, > > #ifdef CONFIG_MEMORY_FAILURE > PAGEFLAG(HWPoison, hwpoison, PF_ANY) > TESTSCFLAG(HWPoison, hwpoison, PF_ANY) > #define __PG_HWPOISON (1UL << PG_hwpoison) > extern bool take_page_off_buddy(struct page *page); > #else > PAGEFLAG_FALSE(HWPoison) > #define __PG_HWPOISON 0 > #endif > > so there's no need for this > if (IS_ENABLED(CONFIG_MEMORY_FAILURE) > check, as it simply turns into > > if (PageHuge(page) && 0) > else if (0) > > and the compiler can optimise it all away.
Yes, You are right, I will modify this later. Thanks for correction
-- Thanks! Aili Yao
| |