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. Signed-off-by: Balbir Singh <bsingharora@xxxxxxxxx> --- mm/sparse.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/mm/sparse.c b/mm/sparse.c index 33307fc05c4d..16219c7ddb5f 100644 --- a/mm/sparse.c +++ b/mm/sparse.c @@ -724,6 +724,16 @@ static void clear_hwpoisoned_pages(struct page *memmap, int nr_pages) if (!memmap) return; + /* + * A further optimization is to have per section + * ref counted num_poisoned_pages, but that is going + * to need more space per memmap, for now just do + * a quick global check, this should 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); -- 2.17.1