From: Wen Congyang <[email protected]> When we hotremove a memory device, we will free the memory to store struct page. If the page is hwpoisoned page, we should decrease mce_bad_pages.
CC: David Rientjes <[email protected]> CC: Jiang Liu <[email protected]> CC: Len Brown <[email protected]> CC: Benjamin Herrenschmidt <[email protected]> CC: Paul Mackerras <[email protected]> CC: Christoph Lameter <[email protected]> Cc: Minchan Kim <[email protected]> CC: Andrew Morton <[email protected]> CC: KOSAKI Motohiro <[email protected]> CC: Yasuaki Ishimatsu <[email protected]> Signed-off-by: Wen Congyang <[email protected]> --- mm/sparse.c | 19 +++++++++++++++++++ 1 files changed, 19 insertions(+), 0 deletions(-) diff --git a/mm/sparse.c b/mm/sparse.c index 0021265..77d6a93 100644 --- a/mm/sparse.c +++ b/mm/sparse.c @@ -774,6 +774,24 @@ out: return ret; } +#ifdef CONFIG_MEMORY_FAILURE +static void clear_hwpoisoned_pages(struct page *memmap, int nr_pages) +{ + int i; + + for (i = 0; i < PAGES_PER_SECTION; i++) { + if (PageHWPoison(&memmap[i])) { + atomic_long_sub(1, &mce_bad_pages); + ClearPageHWPoison(&memmap[i]); + } + } +} +#else +static void clear_hwpoisoned_pages(struct page *memmap, int nr_pages) +{ +} +#endif + void sparse_remove_one_section(struct zone *zone, struct mem_section *ms) { struct page *memmap = NULL; @@ -785,6 +803,7 @@ void sparse_remove_one_section(struct zone *zone, struct mem_section *ms) __section_nr(ms)); ms->section_mem_map = 0; ms->pageblock_flags = NULL; + clear_hwpoisoned_pages(memmap, PAGES_PER_SECTION); } free_section_usemap(memmap, usemap); -- 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

