Re: [PATCH v2 2/3] x86/mm: Do not zap page table entries mapping unaccepted memory table during kdump.

2024-03-21 Thread Kirill A. Shutemov
On Mon, Mar 18, 2024 at 07:02:45AM +, Ashish Kalra wrote:
> From: Ashish Kalra 
> 
> During crashkernel boot only pre-allocated crash memory is presented as
> E820_TYPE_RAM. This can cause page table entries mapping unaccepted memory
> table to be zapped during phys_pte_init(), phys_pmd_init(), phys_pud_init()
> and phys_p4d_init() as SNP/TDX guest use E820_TYPE_ACPI to store the
> unaccepted memory table and pass it between the kernels on
> kexec/kdump.
> 
> E820_TYPE_ACPI covers not only ACPI data, but also EFI tables and might
> be required by kernel to function properly.
> 
> The problem was discovered during debugging kdump for SNP guest. The
> unaccepted memory table stored with E820_TYPE_ACPI and passed between
> the kernels on kdump was getting zapped as the PMD entry mapping this
> is above the E820_TYPE_RAM range for the reserved crashkernel memory.
> 
> Signed-off-by: Ashish Kalra 

Acked-by: Kirill A. Shutemov 

I guess it would be better if I take this patch into my kexec patchset. I
guess I just got lucky not to step onto the issue.

-- 
  Kiryl Shutsemau / Kirill A. Shutemov

___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec


[PATCH v2 2/3] x86/mm: Do not zap page table entries mapping unaccepted memory table during kdump.

2024-03-18 Thread Ashish Kalra
From: Ashish Kalra 

During crashkernel boot only pre-allocated crash memory is presented as
E820_TYPE_RAM. This can cause page table entries mapping unaccepted memory
table to be zapped during phys_pte_init(), phys_pmd_init(), phys_pud_init()
and phys_p4d_init() as SNP/TDX guest use E820_TYPE_ACPI to store the
unaccepted memory table and pass it between the kernels on
kexec/kdump.

E820_TYPE_ACPI covers not only ACPI data, but also EFI tables and might
be required by kernel to function properly.

The problem was discovered during debugging kdump for SNP guest. The
unaccepted memory table stored with E820_TYPE_ACPI and passed between
the kernels on kdump was getting zapped as the PMD entry mapping this
is above the E820_TYPE_RAM range for the reserved crashkernel memory.

Signed-off-by: Ashish Kalra 
---
 arch/x86/mm/init_64.c | 16 
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index a0dffaca6d2b..cc294a9e9fd7 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -469,7 +469,9 @@ phys_pte_init(pte_t *pte_page, unsigned long paddr, 
unsigned long paddr_end,
!e820__mapped_any(paddr & PAGE_MASK, paddr_next,
 E820_TYPE_RAM) &&
!e820__mapped_any(paddr & PAGE_MASK, paddr_next,
-E820_TYPE_RESERVED_KERN))
+E820_TYPE_RESERVED_KERN) &&
+   !e820__mapped_any(paddr & PAGE_MASK, paddr_next,
+E820_TYPE_ACPI))
set_pte_init(pte, __pte(0), init);
continue;
}
@@ -524,7 +526,9 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long paddr, 
unsigned long paddr_end,
!e820__mapped_any(paddr & PMD_MASK, paddr_next,
 E820_TYPE_RAM) &&
!e820__mapped_any(paddr & PMD_MASK, paddr_next,
-E820_TYPE_RESERVED_KERN))
+E820_TYPE_RESERVED_KERN) &&
+   !e820__mapped_any(paddr & PMD_MASK, paddr_next,
+E820_TYPE_ACPI))
set_pmd_init(pmd, __pmd(0), init);
continue;
}
@@ -611,7 +615,9 @@ phys_pud_init(pud_t *pud_page, unsigned long paddr, 
unsigned long paddr_end,
!e820__mapped_any(paddr & PUD_MASK, paddr_next,
 E820_TYPE_RAM) &&
!e820__mapped_any(paddr & PUD_MASK, paddr_next,
-E820_TYPE_RESERVED_KERN))
+E820_TYPE_RESERVED_KERN) &&
+   !e820__mapped_any(paddr & PUD_MASK, paddr_next,
+E820_TYPE_ACPI))
set_pud_init(pud, __pud(0), init);
continue;
}
@@ -698,7 +704,9 @@ phys_p4d_init(p4d_t *p4d_page, unsigned long paddr, 
unsigned long paddr_end,
!e820__mapped_any(paddr & P4D_MASK, paddr_next,
 E820_TYPE_RAM) &&
!e820__mapped_any(paddr & P4D_MASK, paddr_next,
-E820_TYPE_RESERVED_KERN))
+E820_TYPE_RESERVED_KERN) &&
+   !e820__mapped_any(paddr & P4D_MASK, paddr_next,
+E820_TYPE_ACPI))
set_p4d_init(p4d, __p4d(0), init);
continue;
}
-- 
2.34.1


___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec