]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: s390: Refactor pgste lock and unlock functions
authorClaudio Imbrenda <imbrenda@linux.ibm.com>
Wed, 4 Feb 2026 15:02:30 +0000 (16:02 +0100)
committerClaudio Imbrenda <imbrenda@linux.ibm.com>
Wed, 4 Feb 2026 16:00:08 +0000 (17:00 +0100)
Move the pgste lock and unlock functions back into mm/pgtable.c and
duplicate them in mm/gmap_helpers.c to avoid function name collisions
later on.

Acked-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
arch/s390/include/asm/pgtable.h
arch/s390/mm/gmap_helpers.c
arch/s390/mm/pgtable.c

index bca9b29778c3f2e8fe804ba6b9b206e22436b673..8194a2b12ecf8b125037ebd4e25a4a70d777810f 100644 (file)
@@ -2040,26 +2040,4 @@ static inline unsigned long gmap_pgste_get_pgt_addr(unsigned long *pgt)
        return res;
 }
 
-static inline pgste_t pgste_get_lock(pte_t *ptep)
-{
-       unsigned long value = 0;
-#ifdef CONFIG_PGSTE
-       unsigned long *ptr = (unsigned long *)(ptep + PTRS_PER_PTE);
-
-       do {
-               value = __atomic64_or_barrier(PGSTE_PCL_BIT, ptr);
-       } while (value & PGSTE_PCL_BIT);
-       value |= PGSTE_PCL_BIT;
-#endif
-       return __pgste(value);
-}
-
-static inline void pgste_set_unlock(pte_t *ptep, pgste_t pgste)
-{
-#ifdef CONFIG_PGSTE
-       barrier();
-       WRITE_ONCE(*(unsigned long *)(ptep + PTRS_PER_PTE), pgste_val(pgste) & ~PGSTE_PCL_BIT);
-#endif
-}
-
 #endif /* _S390_PAGE_H */
index d41b19925a5ad133642b5494561b06b7ec485783..4fba13675950a2ccb5e346fb234edd8a6ddc9bc4 100644 (file)
@@ -15,7 +15,6 @@
 #include <linux/pagewalk.h>
 #include <linux/ksm.h>
 #include <asm/gmap_helpers.h>
-#include <asm/pgtable.h>
 
 /**
  * ptep_zap_softleaf_entry() - discard a software leaf entry.
@@ -35,6 +34,28 @@ static void ptep_zap_softleaf_entry(struct mm_struct *mm, softleaf_t entry)
        free_swap_and_cache(entry);
 }
 
+static inline pgste_t pgste_get_lock(pte_t *ptep)
+{
+       unsigned long value = 0;
+#ifdef CONFIG_PGSTE
+       unsigned long *ptr = (unsigned long *)(ptep + PTRS_PER_PTE);
+
+       do {
+               value = __atomic64_or_barrier(PGSTE_PCL_BIT, ptr);
+       } while (value & PGSTE_PCL_BIT);
+       value |= PGSTE_PCL_BIT;
+#endif
+       return __pgste(value);
+}
+
+static inline void pgste_set_unlock(pte_t *ptep, pgste_t pgste)
+{
+#ifdef CONFIG_PGSTE
+       barrier();
+       WRITE_ONCE(*(unsigned long *)(ptep + PTRS_PER_PTE), pgste_val(pgste) & ~PGSTE_PCL_BIT);
+#endif
+}
+
 /**
  * gmap_helper_zap_one_page() - discard a page if it was swapped.
  * @mm: the mm
index 666adcd681aba280c7ec31fb3297f71947d22c43..08743c1dac2f93899e3229127367913878634d43 100644 (file)
@@ -24,7 +24,6 @@
 #include <asm/tlbflush.h>
 #include <asm/mmu_context.h>
 #include <asm/page-states.h>
-#include <asm/pgtable.h>
 #include <asm/machine.h>
 
 pgprot_t pgprot_writecombine(pgprot_t prot)
@@ -116,6 +115,28 @@ static inline pte_t ptep_flush_lazy(struct mm_struct *mm,
        return old;
 }
 
+static inline pgste_t pgste_get_lock(pte_t *ptep)
+{
+       unsigned long value = 0;
+#ifdef CONFIG_PGSTE
+       unsigned long *ptr = (unsigned long *)(ptep + PTRS_PER_PTE);
+
+       do {
+               value = __atomic64_or_barrier(PGSTE_PCL_BIT, ptr);
+       } while (value & PGSTE_PCL_BIT);
+       value |= PGSTE_PCL_BIT;
+#endif
+       return __pgste(value);
+}
+
+static inline void pgste_set_unlock(pte_t *ptep, pgste_t pgste)
+{
+#ifdef CONFIG_PGSTE
+       barrier();
+       WRITE_ONCE(*(unsigned long *)(ptep + PTRS_PER_PTE), pgste_val(pgste) & ~PGSTE_PCL_BIT);
+#endif
+}
+
 static inline pgste_t pgste_get(pte_t *ptep)
 {
        unsigned long pgste = 0;