This is a note to let you know that I've just added the patch titled s390/cmma: fix handling of swapper_pg_dir and invalid_pg_dir to the 5.4-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: s390-cmma-fix-handling-of-swapper_pg_dir-and-invalid_pg_dir.patch and it can be found in the queue-5.4 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From 84bb41d5df48868055d159d9247b80927f1f70f9 Mon Sep 17 00:00:00 2001 From: Heiko Carstens <hca@xxxxxxxxxxxxx> Date: Tue, 24 Oct 2023 10:15:20 +0200 Subject: s390/cmma: fix handling of swapper_pg_dir and invalid_pg_dir From: Heiko Carstens <hca@xxxxxxxxxxxxx> commit 84bb41d5df48868055d159d9247b80927f1f70f9 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. All pages used for swapper_pg_dir and invalid_pg_dir are incorrectly marked as no-dat, which in turn can result in incorrect guest TLB flushes. Fix this by marking those pages correctly as being used for DAT. Cc: <stable@xxxxxxxxxxxxxxx> Reviewed-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx> Signed-off-by: Heiko Carstens <hca@xxxxxxxxxxxxx> Signed-off-by: Vasily Gorbik <gor@xxxxxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- arch/s390/mm/page-states.c | 6 ++++++ 1 file changed, 6 insertions(+) --- a/arch/s390/mm/page-states.c +++ b/arch/s390/mm/page-states.c @@ -198,6 +198,12 @@ void __init cmma_init_nodat(void) return; /* Mark pages used in kernel page tables */ mark_kernel_pgd(); + page = virt_to_page(&swapper_pg_dir); + for (i = 0; i < 4; i++) + set_bit(PG_arch_1, &page[i].flags); + page = virt_to_page(&invalid_pg_dir); + for (i = 0; i < 4; i++) + set_bit(PG_arch_1, &page[i].flags); /* Set all kernel pages not used for page tables to stable/no-dat */ for_each_memblock(memory, reg) { Patches currently in stable-queue which might be from hca@xxxxxxxxxxxxx are queue-5.4/s390-cmma-fix-initial-kernel-address-space-page-table-walk.patch queue-5.4/s390-cmma-fix-handling-of-swapper_pg_dir-and-invalid_pg_dir.patch