set_bit(PG_arch_1, &page[i].flags);
}
mark_kernel_pud(p4d, addr, next);
-@@ -182,7 +182,7 @@ static void mark_kernel_pgd(void)
+@@ -175,7 +175,7 @@ static void mark_kernel_pgd(void)
continue;
if (!pgd_folded(*pgd)) {
page = phys_to_page(pgd_val(*pgd));
--- a/arch/s390/mm/page-states.c
+++ b/arch/s390/mm/page-states.c
-@@ -199,6 +199,12 @@ void __init cmma_init_nodat(void)
+@@ -192,6 +192,12 @@ void __init cmma_init_nodat(void)
return;
/* Mark pages used in kernel page tables */
mark_kernel_pgd();
+++ /dev/null
-From 16ba44826a04834d3eeeda4b731c2ea3481062b7 Mon Sep 17 00:00:00 2001
-From: Heiko Carstens <hca@linux.ibm.com>
-Date: Tue, 17 Oct 2023 21:07:03 +0200
-Subject: s390/cmma: fix initial kernel address space page table walk
-
-From: Heiko Carstens <hca@linux.ibm.com>
-
-commit 16ba44826a04834d3eeeda4b731c2ea3481062b7 upstream.
-
-If the cmma no-dat feature is available the kernel page tables are walked
-to identify and mark all pages which are used for address translation (all
-region, segment, and page tables). In a subsequent loop all other pages are
-marked as "no-dat" pages with the ESSA instruction.
-
-This information is visible to the hypervisor, so that the hypervisor can
-optimize purging of guest TLB entries. The initial loop however does not
-cover the complete kernel address space. This can result in pages being
-marked as not being used for dynamic address translation, even though they
-are. In turn guest TLB entries incorrectly may not be purged.
-
-Fix this by adjusting the end address of the kernel address range being
-walked.
-
-Cc: <stable@vger.kernel.org>
-Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com>
-Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
-Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- arch/s390/mm/page-states.c | 13 ++++++++++---
- 1 file changed, 10 insertions(+), 3 deletions(-)
-
---- a/arch/s390/mm/page-states.c
-+++ b/arch/s390/mm/page-states.c
-@@ -162,15 +162,22 @@ static void mark_kernel_p4d(pgd_t *pgd,
-
- static void mark_kernel_pgd(void)
- {
-- unsigned long addr, next;
-+ unsigned long addr, next, max_addr;
- struct page *page;
- pgd_t *pgd;
- int i;
-
- addr = 0;
-+ /*
-+ * Figure out maximum virtual address accessible with the
-+ * kernel ASCE. This is required to keep the page table walker
-+ * from accessing non-existent entries.
-+ */
-+ max_addr = (S390_lowcore.kernel_asce.val & _ASCE_TYPE_MASK) >> 2;
-+ max_addr = 1UL << (max_addr * 11 + 31);
- pgd = pgd_offset_k(addr);
- do {
-- next = pgd_addr_end(addr, MODULES_END);
-+ next = pgd_addr_end(addr, max_addr);
- if (pgd_none(*pgd))
- continue;
- if (!pgd_folded(*pgd)) {
-@@ -179,7 +186,7 @@ static void mark_kernel_pgd(void)
- set_bit(PG_arch_1, &page[i].flags);
- }
- mark_kernel_p4d(pgd, addr, next);
-- } while (pgd++, addr = next, addr != MODULES_END);
-+ } while (pgd++, addr = next, addr != max_addr);
- }
-
- void __init cmma_init_nodat(void)
mcb-fix-error-handling-for-different-scenarios-when-parsing.patch
powerpc-pseries-iommu-enable_ddw-incorrectly-returns-direct-mapping-for-sr-iov-device.patch
dmaengine-stm32-mdma-correct-desc-prep-when-channel-running.patch
-s390-cmma-fix-initial-kernel-address-space-page-table-walk.patch
s390-cmma-fix-detection-of-dat-pages.patch
s390-cmma-fix-handling-of-swapper_pg_dir-and-invalid_pg_dir.patch
mm-cma-use-nth_page-in-place-of-direct-struct-page-manipulation.patch
set_bit(PG_arch_1, &page[i].flags);
}
mark_kernel_pud(p4d, addr, next);
-@@ -171,7 +171,7 @@ static void mark_kernel_pgd(void)
+@@ -164,7 +164,7 @@ static void mark_kernel_pgd(void)
continue;
if (!pgd_folded(*pgd)) {
page = phys_to_page(pgd_val(*pgd));
--- a/arch/s390/mm/page-states.c
+++ b/arch/s390/mm/page-states.c
-@@ -188,6 +188,12 @@ void __init cmma_init_nodat(void)
+@@ -181,6 +181,12 @@ void __init cmma_init_nodat(void)
return;
/* Mark pages used in kernel page tables */
mark_kernel_pgd();
+++ /dev/null
-From 16ba44826a04834d3eeeda4b731c2ea3481062b7 Mon Sep 17 00:00:00 2001
-From: Heiko Carstens <hca@linux.ibm.com>
-Date: Tue, 17 Oct 2023 21:07:03 +0200
-Subject: s390/cmma: fix initial kernel address space page table walk
-
-From: Heiko Carstens <hca@linux.ibm.com>
-
-commit 16ba44826a04834d3eeeda4b731c2ea3481062b7 upstream.
-
-If the cmma no-dat feature is available the kernel page tables are walked
-to identify and mark all pages which are used for address translation (all
-region, segment, and page tables). In a subsequent loop all other pages are
-marked as "no-dat" pages with the ESSA instruction.
-
-This information is visible to the hypervisor, so that the hypervisor can
-optimize purging of guest TLB entries. The initial loop however does not
-cover the complete kernel address space. This can result in pages being
-marked as not being used for dynamic address translation, even though they
-are. In turn guest TLB entries incorrectly may not be purged.
-
-Fix this by adjusting the end address of the kernel address range being
-walked.
-
-Cc: <stable@vger.kernel.org>
-Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com>
-Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
-Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- arch/s390/mm/page-states.c | 13 ++++++++++---
- 1 file changed, 10 insertions(+), 3 deletions(-)
-
---- a/arch/s390/mm/page-states.c
-+++ b/arch/s390/mm/page-states.c
-@@ -151,15 +151,22 @@ static void mark_kernel_p4d(pgd_t *pgd,
-
- static void mark_kernel_pgd(void)
- {
-- unsigned long addr, next;
-+ unsigned long addr, next, max_addr;
- struct page *page;
- pgd_t *pgd;
- int i;
-
- addr = 0;
-+ /*
-+ * Figure out maximum virtual address accessible with the
-+ * kernel ASCE. This is required to keep the page table walker
-+ * from accessing non-existent entries.
-+ */
-+ max_addr = (S390_lowcore.kernel_asce.val & _ASCE_TYPE_MASK) >> 2;
-+ max_addr = 1UL << (max_addr * 11 + 31);
- pgd = pgd_offset_k(addr);
- do {
-- next = pgd_addr_end(addr, MODULES_END);
-+ next = pgd_addr_end(addr, max_addr);
- if (pgd_none(*pgd))
- continue;
- if (!pgd_folded(*pgd)) {
-@@ -168,7 +175,7 @@ static void mark_kernel_pgd(void)
- set_bit(PG_arch_1, &page[i].flags);
- }
- mark_kernel_p4d(pgd, addr, next);
-- } while (pgd++, addr = next, addr != MODULES_END);
-+ } while (pgd++, addr = next, addr != max_addr);
- }
-
- void __init cmma_init_nodat(void)
powerpc-pseries-iommu-enable_ddw-incorrectly-returns-direct-mapping-for-sr-iov-device.patch
dmaengine-stm32-mdma-correct-desc-prep-when-channel-running.patch
s390-mm-add-missing-arch_set_page_dat-call-to-vmem_crst_alloc.patch
-s390-cmma-fix-initial-kernel-address-space-page-table-walk.patch
s390-cmma-fix-detection-of-dat-pages.patch
s390-cmma-fix-handling-of-swapper_pg_dir-and-invalid_pg_dir.patch
mm-cma-use-nth_page-in-place-of-direct-struct-page-manipulation.patch
set_bit(PG_arch_1, &page[i].flags);
}
mark_kernel_pud(p4d, addr, next);
-@@ -171,7 +171,7 @@ static void mark_kernel_pgd(void)
+@@ -164,7 +164,7 @@ static void mark_kernel_pgd(void)
continue;
if (!pgd_folded(*pgd)) {
page = phys_to_page(pgd_val(*pgd));
--- a/arch/s390/mm/page-states.c
+++ b/arch/s390/mm/page-states.c
-@@ -188,6 +188,12 @@ void __init cmma_init_nodat(void)
+@@ -181,6 +181,12 @@ void __init cmma_init_nodat(void)
return;
/* Mark pages used in kernel page tables */
mark_kernel_pgd();
+++ /dev/null
-From 16ba44826a04834d3eeeda4b731c2ea3481062b7 Mon Sep 17 00:00:00 2001
-From: Heiko Carstens <hca@linux.ibm.com>
-Date: Tue, 17 Oct 2023 21:07:03 +0200
-Subject: s390/cmma: fix initial kernel address space page table walk
-
-From: Heiko Carstens <hca@linux.ibm.com>
-
-commit 16ba44826a04834d3eeeda4b731c2ea3481062b7 upstream.
-
-If the cmma no-dat feature is available the kernel page tables are walked
-to identify and mark all pages which are used for address translation (all
-region, segment, and page tables). In a subsequent loop all other pages are
-marked as "no-dat" pages with the ESSA instruction.
-
-This information is visible to the hypervisor, so that the hypervisor can
-optimize purging of guest TLB entries. The initial loop however does not
-cover the complete kernel address space. This can result in pages being
-marked as not being used for dynamic address translation, even though they
-are. In turn guest TLB entries incorrectly may not be purged.
-
-Fix this by adjusting the end address of the kernel address range being
-walked.
-
-Cc: <stable@vger.kernel.org>
-Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com>
-Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
-Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- arch/s390/mm/page-states.c | 13 ++++++++++---
- 1 file changed, 10 insertions(+), 3 deletions(-)
-
---- a/arch/s390/mm/page-states.c
-+++ b/arch/s390/mm/page-states.c
-@@ -151,15 +151,22 @@ static void mark_kernel_p4d(pgd_t *pgd,
-
- static void mark_kernel_pgd(void)
- {
-- unsigned long addr, next;
-+ unsigned long addr, next, max_addr;
- struct page *page;
- pgd_t *pgd;
- int i;
-
- addr = 0;
-+ /*
-+ * Figure out maximum virtual address accessible with the
-+ * kernel ASCE. This is required to keep the page table walker
-+ * from accessing non-existent entries.
-+ */
-+ max_addr = (S390_lowcore.kernel_asce.val & _ASCE_TYPE_MASK) >> 2;
-+ max_addr = 1UL << (max_addr * 11 + 31);
- pgd = pgd_offset_k(addr);
- do {
-- next = pgd_addr_end(addr, MODULES_END);
-+ next = pgd_addr_end(addr, max_addr);
- if (pgd_none(*pgd))
- continue;
- if (!pgd_folded(*pgd)) {
-@@ -168,7 +175,7 @@ static void mark_kernel_pgd(void)
- set_bit(PG_arch_1, &page[i].flags);
- }
- mark_kernel_p4d(pgd, addr, next);
-- } while (pgd++, addr = next, addr != MODULES_END);
-+ } while (pgd++, addr = next, addr != max_addr);
- }
-
- void __init cmma_init_nodat(void)
dmaengine-stm32-mdma-correct-desc-prep-when-channel-running.patch
s390-mm-add-missing-arch_set_page_dat-call-to-vmem_crst_alloc.patch
s390-mm-add-missing-arch_set_page_dat-call-to-gmap-allocations.patch
-s390-cmma-fix-initial-kernel-address-space-page-table-walk.patch
s390-cmma-fix-detection-of-dat-pages.patch
s390-cmma-fix-handling-of-swapper_pg_dir-and-invalid_pg_dir.patch
mm-cma-use-nth_page-in-place-of-direct-struct-page-manipulation.patch