quoted hunk ↗ jump to hunk
@@ -1001,6 +1004,9 @@ static inline void del_page_from_free_list(struct page *page, struct zone *zone,
if (page_reported(page))
__ClearPageReported(page);
+ if (PageOffline(page))
+ clear_page_offline(page, order);
+
list_del(&page->lru);
__ClearPageBuddy(page);
set_page_private(page, 0);
So, this is right in the fast path of the page allocator. It's a
one-time thing per 2M page, so it's not permanent.
*But* there's both a global spinlock and a firmware call hidden in
clear_page_offline(). That's *GOT* to hurt if you were, for instance,
running a benchmark while this code path is being tickled. Not just to
That could be just downright catastrophic for scalability, albeit
temporarily.