mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "David Hildenbrand (Arm)" <david@kernel.org>
To: Breno Leitao <leitao@debian.org>
Cc: Ard Biesheuvel <ardb@kernel.org>,
	Ilias Apalodimas <ilias.apalodimas@linaro.org>,
	Miaohe Lin <linmiaohe@huawei.com>,
	Naoya Horiguchi <nao.horiguchi@gmail.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	kas@kernel.org, kexec@lists.infradead.org,
	Lorenzo Stoakes <ljs@kernel.org>,
	"Liam R. Howlett" <liam@infradead.org>,
	Vlastimil Babka <vbabka@kernel.org>,
	Mike Rapoport <rppt@kernel.org>,
	Suren Baghdasaryan <surenb@google.com>,
	Michal Hocko <mhocko@suse.com>, Thomas Gleixner <tglx@kernel.org>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
	Brendan Jackman <brendan.jackman@linux.dev>,
	Johannes Weiner <hannes@cmpxchg.org>, Zi Yan <ziy@nvidia.com>,
	Oscar Salvador <osalvador@suse.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	Danilo Krummrich <dakr@kernel.org>,
	hannes@cmpxchg.or, shakeel.butt@linux.dev,
	linux-efi@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-mm@kvack.org, rmikey@meta.com, riel@surriel.com,
	harry@kernel.org, linux-cxl@vger.kernel.org,
	driver-core@lists.linux.dev, kernel-team@meta.com
Subject: Re: [PATCH v5 7/9] drivers/base/memory: count inherited poisoned frames into the block
Date: Tue, 22 Sep 2026 13:33:51 +0200	[thread overview]
Message-ID: <ad2ed3ed-959a-4af3-a2f5-4c21e5af62d6@kernel.org> (raw)
In-Reply-To: <arE3UjqPsxctWckg@gmail.com>

On 9/21/26 16:31, Breno Leitao wrote:
> On Fri, Sep 18, 2026 at 10:16:25PM +0200, David Hildenbrand (Arm) wrote:
>> On 9/18/26 17:22, Breno Leitao wrote:
>>>
>>> Right, we have two source for poisoned page information, today.
>>>
>>> 1) LINUX_EFI_POISONED_MEMORY: Used to track memory block that got
>>>    poisioned, and will be passed around during kexec.
>>> 2) PG_hwpoison on struct page: Used by the memory subsystem to avoid
>>>    touching it.
>>
>> How are both kept in sync? See below.
> 
> The EFI table is only written when there is a memory failure. That is
> the only thing that writes to it:
> 
> 	action_result() -> efi_hwpoison_record_pfn() -> set_bit()
> 
> You can see it on patch "mm/memory-failure: efi: record
> hardware-poisoned frames into the poisoned-memory table"
> 
> Then, when the kernel kexecs into a second kernel, the EFI config table
> is queried and the pages are poisoned from it at boot, as they are
> getting into the buddy allocator, in __free_pages_core().

I am not sure that is really the right place. That means we only poison free
memory. Shouldn't we poison as soon as we initialize the memmap, and check
whether any memblock allocations ended up on that poisoned memory and bail out?

[...]


> 
>>> You might ask why I do not just count the bits set in the bitmape and
>>> multiply by the frames a unit covers.
>>>
>>> That was my first try. It over-counts: a bit stands for a whole 2M unit,
>>> but only the frames that reach __free_pages_core() get flagged -- CMA
>>> comes back through __free_pages(), the initrd and __init memory through
>>> free_reserved_pages(), and KHO-preserved frames never get an initialised
>>> struct page at all.
>>
>> Why are other hwpoisoned pages not flagged? If initrd or anything else is
>> hwpoisoned, we should not be running this kernel?
> 
> For the initrd and the image, the previous kernel's record cannot stop
> this kernel's loader from placing them on a bad frame. If that happens
> we consumed the poison in the relocation memcpy, long before any of this
> code runs. That is the kexec segment placement problem, which Kiryl
> raised on the RFC and which I split into its own series, which is landed
> in some mm tree already.
> 
> https://lore.kernel.org/all/20260812-kexec_posioned-v6-0-e477887086f0@debian.org/
> 
> 
>>>
>>> And the over-count cannot be undone later.
>>
>> The inconsistency is worrisome.
>> I wouldn't say that I hate it but it certainly has "great, more hwpoison hacks"
>> smell to it.
>>
>> We have enough semi-broken hwpoison ... stuff ... in our code base already. So
>> I'm hoping we're not adding more to it?
>>
>>> If the walk itself is what bothers you, the way out is not the bitmap
>>> but counting as we flag: hwpoison_boot_page() already knows the pfn, so
>>> it can bump a per-block-id counter in a small memblock array that
>>> memblk_nr_poison_init() then just reads.
>>
>> The inconsistency is what worries me.
>>
>> And that we have pages we are told are hwpoisoned but we seem to ignore that and
>> carry on with our kernel letting it boot?
> 
> The walk exists precisely because of that inconsistency: the counter has
> to match the frames that actually carry the flag, and the bitmap says
> more than that.
> 
> If we drop the page walk, then there is change for inconsistency, but,
> as-is, there is no inconsistency.
> 
> So, I am planning to keep the page walk above, when there is a poisoned
> page in the memory block, avoiding any inconsitency.
How about we keep it very simple and don't mix information from two different
sources? That is, remove that bitmap scan here entirely. We should process the
bitmap exactly once when initializing the memmap.

From that point on, the memmap should be our reliable source of information.

For this code here, just remember globally whether we hwpoisoned any page. If
so, just walk the memmap. If not (the 99.9999% of all systems, no need to scan
anything).

-- 
Cheers,

David

  reply	other threads:[~2026-09-22 11:34 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-15 12:53 [PATCH v5 0/9] mm/memory-failure: keep hardware-poisoned pages out of the next kexec Breno Leitao
2026-09-15 12:53 ` [PATCH v5 1/9] mm/page_alloc: factor out the accept-and-free tail of __free_pages_core() Breno Leitao
2026-09-15 12:57   ` sashiko-bot
2026-09-15 12:53 ` [PATCH v5 2/9] mm/memory-failure: efi: add the LINUX_EFI_POISONED_MEMORY configuration table Breno Leitao
2026-09-15 13:05   ` sashiko-bot
2026-09-15 12:53 ` [PATCH v5 3/9] mm/memory-failure: libstub: install the poisoned-memory EFI table Breno Leitao
2026-09-15 13:15   ` sashiko-bot
2026-09-15 14:00     ` Breno Leitao
2026-09-16 15:39   ` Usama Arif
2026-09-17 10:53     ` Breno Leitao
2026-09-15 12:53 ` [PATCH v5 4/9] mm/memory-failure: efi: adopt the inherited poisoned-memory table Breno Leitao
2026-09-15 13:24   ` sashiko-bot
2026-09-15 12:53 ` [PATCH v5 5/9] mm/memory-failure: efi: record hardware-poisoned frames into the " Breno Leitao
2026-09-15 13:36   ` sashiko-bot
2026-09-15 14:33     ` Breno Leitao
2026-09-15 12:53 ` [PATCH v5 6/9] mm/memory-failure: efi: answer whether a range is poisoned Breno Leitao
2026-09-15 13:45   ` sashiko-bot
2026-09-16  6:44     ` David Hildenbrand (Arm)
2026-09-18 15:27       ` Breno Leitao
2026-09-18 15:53         ` Harry Yoo
2026-09-18 20:02           ` David Hildenbrand (Arm)
2026-09-15 12:53 ` [PATCH v5 7/9] drivers/base/memory: count inherited poisoned frames into the block Breno Leitao
2026-09-15 13:59   ` sashiko-bot
2026-09-16  6:48   ` David Hildenbrand (Arm)
2026-09-16  9:35     ` Breno Leitao
2026-09-16 14:51       ` David Hildenbrand (Arm)
2026-09-17 13:01         ` Breno Leitao
2026-09-18 12:18           ` David Hildenbrand (Arm)
2026-09-18 15:22             ` Breno Leitao
2026-09-18 20:16               ` David Hildenbrand (Arm)
2026-09-21 14:31                 ` Breno Leitao
2026-09-22 11:33                   ` David Hildenbrand (Arm) [this message]
2026-09-22 12:34                     ` Breno Leitao
2026-09-22 12:51                     ` Kiryl Shutsemau
2026-09-22 13:45                       ` Harry Yoo
2026-09-22 13:53                       ` David Hildenbrand (Arm)
2026-09-15 12:53 ` [PATCH v5 8/9] mm/memory-failure: add hwpoison_boot_page() to flag an inherited frame Breno Leitao
2026-09-15 14:11   ` sashiko-bot
2026-09-19 10:28   ` Shaikh Kamaluddin
2026-09-21 13:41     ` Breno Leitao
2026-09-15 12:53 ` [PATCH v5 9/9] mm/memory-failure: keep inherited poisoned frames out of the buddy allocator Breno Leitao
2026-09-15 14:25   ` sashiko-bot
2026-09-16  8:32   ` Vlastimil Babka (SUSE)
2026-09-22  6:27 ` [PATCH v5 0/9] mm/memory-failure: keep hardware-poisoned pages out of the next kexec Miaohe Lin
2026-09-22  9:14   ` Breno Leitao
2026-09-22  9:29     ` Miaohe Lin
2026-09-22 10:39       ` Breno Leitao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ad2ed3ed-959a-4af3-a2f5-4c21e5af62d6@kernel.org \
    --to=david@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=ardb@kernel.org \
    --cc=bp@alien8.de \
    --cc=brendan.jackman@linux.dev \
    --cc=dakr@kernel.org \
    --cc=dave.hansen@linux.intel.com \
    --cc=driver-core@lists.linux.dev \
    --cc=gregkh@linuxfoundation.org \
    --cc=hannes@cmpxchg.or \
    --cc=hannes@cmpxchg.org \
    --cc=harry@kernel.org \
    --cc=hpa@zytor.com \
    --cc=ilias.apalodimas@linaro.org \
    --cc=kas@kernel.org \
    --cc=kernel-team@meta.com \
    --cc=kexec@lists.infradead.org \
    --cc=leitao@debian.org \
    --cc=liam@infradead.org \
    --cc=linmiaohe@huawei.com \
    --cc=linux-cxl@vger.kernel.org \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=ljs@kernel.org \
    --cc=mhocko@suse.com \
    --cc=mingo@redhat.com \
    --cc=nao.horiguchi@gmail.com \
    --cc=osalvador@suse.de \
    --cc=rafael@kernel.org \
    --cc=riel@surriel.com \
    --cc=rmikey@meta.com \
    --cc=rppt@kernel.org \
    --cc=shakeel.butt@linux.dev \
    --cc=surenb@google.com \
    --cc=tglx@kernel.org \
    --cc=vbabka@kernel.org \
    --cc=x86@kernel.org \
    --cc=ziy@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®