[PATCH] x86/mm: Fix log overwrite in CPA check_conflict()

Khalid Ali posted 1 patch 3 months, 3 weeks ago
arch/x86/mm/pat/set_memory.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] x86/mm: Fix log overwrite in CPA check_conflict()
Posted by Khalid Ali 3 months, 3 weeks ago
From: Khalid Ali <khaliidcaliy@gmail.com>

On certain configurations (e.g. custom builds), check_conflict()
may produce a large number of warnings, flooding the kernel log
and overwriting earlier messages.

Observed warning:

  CPA  protect  Rodata RO: 0xffff888022a75000 - 0xffff888022a75fff
        PFN 22a75 req 8000000000000023 prevent 0000000000000002

Rate-limit these messages by replacing pr_warn() with
pr_warn_ratelimited().

Signed-off-by: Khalid Ali <khaliidcaliy@gmail.com>
---
 arch/x86/mm/pat/set_memory.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c
index 8834c76f91c9..bc5b62988b40 100644
--- a/arch/x86/mm/pat/set_memory.c
+++ b/arch/x86/mm/pat/set_memory.c
@@ -608,7 +608,7 @@ static inline void check_conflict(int warnlvl, pgprot_t prot, pgprotval_t val,
 	if (warnlvl > cpa_warn_level || !conflicts(prot, val))
 		return;
 
-	pr_warn("CPA %8s %10s: 0x%016lx - 0x%016lx PFN %lx req %016llx prevent %016llx\n",
+	pr_warn_ratelimited("CPA %8s %10s: 0x%016lx - 0x%016lx PFN %lx req %016llx prevent %016llx\n",
 		lvltxt[warnlvl], txt, start, end, pfn, (unsigned long long)pgprot_val(prot),
 		(unsigned long long)val);
 }
-- 
2.49.0
Re: [PATCH] x86/mm: Fix log overwrite in CPA check_conflict()
Posted by Peter Zijlstra 3 months, 2 weeks ago
On Thu, Jun 19, 2025 at 05:42:41PM +0000, Khalid Ali wrote:
> From: Khalid Ali <khaliidcaliy@gmail.com>
> 
> On certain configurations (e.g. custom builds), check_conflict()
> may produce a large number of warnings, flooding the kernel log
> and overwriting earlier messages.
> 
> Observed warning:
> 
>   CPA  protect  Rodata RO: 0xffff888022a75000 - 0xffff888022a75fff
>         PFN 22a75 req 8000000000000023 prevent 0000000000000002

That's not good. Your system is sick, limiting the warns isn't making
that better.