Patch "s390/cmma: fix handling of swapper_pg_dir and invalid_pg_dir" has been added to the 6.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 6.6-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.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit f351ad21a347721c35701459a28e5803e11f8c71
Author: Heiko Carstens <hca@xxxxxxxxxxxxx>
Date:   Tue Oct 24 10:15:20 2023 +0200

    s390/cmma: fix handling of swapper_pg_dir and invalid_pg_dir
    
    [ Upstream commit 84bb41d5df48868055d159d9247b80927f1f70f9 ]
    
    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: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/s390/mm/page-states.c b/arch/s390/mm/page-states.c
index 00e7b0876dc50..79a037f49f707 100644
--- a/arch/s390/mm/page-states.c
+++ b/arch/s390/mm/page-states.c
@@ -181,6 +181,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_mem_pfn_range(i, MAX_NUMNODES, &start, &end, NULL) {



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux