[PATCH v2 6/6] efi: respect the poisoned pages coming from previous kernel
Breno Leitao
leitao at debian.org
Mon Aug 24 06:03:05 PDT 2026
On Mon, Aug 24, 2026 at 11:32:35AM +0100, Kiryl Shutsemau wrote:
> I wounder if the fix would be to make page allocator consume the table
> and not do memblock_reserve() here? So we would allocate struct pages
> for the memory and poison them on init. And your fix by the link below
> would do the rest.
Makes sense. Probably dropping memblock_reserve() altogether, for the
units and the table, and poisoning the recorded frames at
mm_core_init(), right after memblock_free_all().
Roughly what I have in mind:
memblock_free_all();
hwpoison_init_boot();
mem_init();
and hwpoison_init_boot() drives it from the table, walking the bitmap on
the EFI side where the geometry lives:
for_each_set_bit(bit, map, nbits) {
u64 unit = off * BITS_PER_BYTE + bit;
unsigned long pfn, i;
pfn = PHYS_PFN(phys_base + unit * unit_size);
for (i = 0; i < unit_size >> PAGE_SHIFT; i++)
hwpoison_boot_pfn(pfn + i);
}
mm/memory-failure.c gets the per page primitive:
bool __init hwpoison_boot_pfn(unsigned long pfn)
{
struct page *page = pfn_to_online_page(pfn);
if (!page || PageHWPoison(page))
return false;
if (!is_free_buddy_page(page) || !take_page_off_buddy(page))
return false;
SetPageHWPoison(page);
page_ref_inc(page);
atomic_long_inc(&num_poisoned_pages);
return true;
}
Yea, this seems better in fact. Let me know if that matches what you
had in mind.
Thanks!
--breno
More information about the kexec
mailing list