From: Balbir Singh <bsingharora@xxxxxxxxx> Subject: mm/hotplug: optimize clear_hwpoisoned_pages() In hot remove, we try to clear poisoned pages, but a small optimization to check if num_poisoned_pages is 0 helps remove the iteration through nr_pages. [akpm@xxxxxxxxxxxxxxxxxxxx: tweak comment text] Link: http://lkml.kernel.org/r/20181102120001.4526-1-bsingharora@xxxxxxxxx Signed-off-by: Balbir Singh <bsingharora@xxxxxxxxx> Acked-by: Michal Hocko <mhocko@xxxxxxxx> Acked-by: Naoya Horiguchi <n-horiguchi@xxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- --- a/mm/sparse.c~mm-hotplug-optimize-clear_hwpoisoned_pages +++ a/mm/sparse.c @@ -740,6 +740,15 @@ static void clear_hwpoisoned_pages(struc if (!memmap) return; + /* + * A further optimization is to have per section refcounted + * num_poisoned_pages. But that would need more space per memmap, so + * for now just do a quick global check to speed up this routine in the + * absence of bad pages. + */ + if (atomic_long_read(&num_poisoned_pages) == 0) + return; + for (i = 0; i < nr_pages; i++) { if (PageHWPoison(&memmap[i])) { atomic_long_sub(1, &num_poisoned_pages); _