]> git.baikalelectronics.ru Git - kernel.git/commitdiff
parisc: Align parisc MADV_XXX constants with all other architectures
authorHelge Deller <deller@gmx.de>
Sun, 11 Dec 2022 18:50:20 +0000 (19:50 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 18 Jan 2023 10:42:00 +0000 (11:42 +0100)
commit 71bdea6f798b425bc0003780b13e3fdecb16a010 upstream.

Adjust some MADV_XXX constants to be in sync what their values are on
all other platforms. There is currently no reason to have an own
numbering on parisc, but it requires workarounds in many userspace
sources (e.g. glibc, qemu, ...) - which are often forgotten and thus
introduce bugs and different behaviour on parisc.

A wrapper avoids an ABI breakage for existing userspace applications by
translating any old values to the new ones, so this change allows us to
move over all programs to the new ABI over time.

Signed-off-by: Helge Deller <deller@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/parisc/include/uapi/asm/mman.h
arch/parisc/kernel/sys_parisc.c
arch/parisc/kernel/syscalls/syscall.tbl
tools/arch/parisc/include/uapi/asm/mman.h
tools/perf/bench/bench.h

index 6fd8871e4081eff2ae302c7c00b18b51243ceb3c..6b5da7b06d43f5fcde6c0fd620a9081fb22317e2 100644 (file)
 #define MADV_DONTFORK  10              /* don't inherit across fork */
 #define MADV_DOFORK    11              /* do inherit across fork */
 
-#define MADV_COLD      20              /* deactivate these pages */
-#define MADV_PAGEOUT   21              /* reclaim these pages */
-
-#define MADV_MERGEABLE   65            /* KSM may merge identical pages */
-#define MADV_UNMERGEABLE 66            /* KSM may not merge identical pages */
+#define MADV_MERGEABLE   12            /* KSM may merge identical pages */
+#define MADV_UNMERGEABLE 13            /* KSM may not merge identical pages */
 
-#define MADV_HUGEPAGE  67              /* Worth backing with hugepages */
-#define MADV_NOHUGEPAGE        68              /* Not worth backing with hugepages */
+#define MADV_HUGEPAGE  14              /* Worth backing with hugepages */
+#define MADV_NOHUGEPAGE 15             /* Not worth backing with hugepages */
 
-#define MADV_DONTDUMP   69             /* Explicity exclude from the core dump,
+#define MADV_DONTDUMP   16             /* Explicity exclude from the core dump,
                                           overrides the coredump filter bits */
-#define MADV_DODUMP    70              /* Clear the MADV_NODUMP flag */
+#define MADV_DODUMP    17              /* Clear the MADV_NODUMP flag */
 
-#define MADV_WIPEONFORK 71             /* Zero memory on fork, child only */
-#define MADV_KEEPONFORK 72             /* Undo MADV_WIPEONFORK */
+#define MADV_WIPEONFORK 18             /* Zero memory on fork, child only */
+#define MADV_KEEPONFORK 19             /* Undo MADV_WIPEONFORK */
+
+#define MADV_COLD      20              /* deactivate these pages */
+#define MADV_PAGEOUT   21              /* reclaim these pages */
 
 #define MADV_HWPOISON     100          /* poison a page for testing */
 #define MADV_SOFT_OFFLINE 101          /* soft offline page for testing */
 
 /* compatibility flags */
 #define MAP_FILE       0
-#define MAP_VARIABLE   0
 
 #define PKEY_DISABLE_ACCESS    0x1
 #define PKEY_DISABLE_WRITE     0x2
index 5d458a44b09c6475692c163738c775fa3916cdfd..a795ce76bafe9a3fed0581155514bfeee724e904 100644 (file)
@@ -373,3 +373,30 @@ long parisc_personality(unsigned long personality)
 
        return err;
 }
+
+/*
+ * madvise() wrapper
+ *
+ * Up to kernel v6.1 parisc has different values than all other
+ * platforms for the MADV_xxx flags listed below.
+ * To keep binary compatibility with existing userspace programs
+ * translate the former values to the new values.
+ *
+ * XXX: Remove this wrapper in year 2025 (or later)
+ */
+
+asmlinkage notrace long parisc_madvise(unsigned long start, size_t len_in, int behavior)
+{
+       switch (behavior) {
+       case 65: behavior = MADV_MERGEABLE;     break;
+       case 66: behavior = MADV_UNMERGEABLE;   break;
+       case 67: behavior = MADV_HUGEPAGE;      break;
+       case 68: behavior = MADV_NOHUGEPAGE;    break;
+       case 69: behavior = MADV_DONTDUMP;      break;
+       case 70: behavior = MADV_DODUMP;        break;
+       case 71: behavior = MADV_WIPEONFORK;    break;
+       case 72: behavior = MADV_KEEPONFORK;    break;
+       }
+
+       return sys_madvise(start, len_in, behavior);
+}
index 51f15a414e29ae54fff4c97940b06aa8aa0a8fd2..e016bf6fae1e6dab6e365d36f4283912de743080 100644 (file)
 116    common  sysinfo                 sys_sysinfo                     compat_sys_sysinfo
 117    common  shutdown                sys_shutdown
 118    common  fsync                   sys_fsync
-119    common  madvise                 sys_madvise
+119    common  madvise                 parisc_madvise
 120    common  clone                   sys_clone_wrapper
 121    common  setdomainname           sys_setdomainname
 122    common  sendfile                sys_sendfile                    compat_sys_sendfile
index f9fd1325f5bda746d3393857f4603ae46d7e845e..7d685a15723fff4203a5bece87229081808c83a1 100644 (file)
@@ -1,20 +1,20 @@
 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
 #ifndef TOOLS_ARCH_PARISC_UAPI_ASM_MMAN_FIX_H
 #define TOOLS_ARCH_PARISC_UAPI_ASM_MMAN_FIX_H
-#define MADV_DODUMP    70
+#define MADV_DODUMP    17
 #define MADV_DOFORK    11
-#define MADV_DONTDUMP   69
+#define MADV_DONTDUMP   16
 #define MADV_DONTFORK  10
 #define MADV_DONTNEED   4
 #define MADV_FREE      8
-#define MADV_HUGEPAGE  67
-#define MADV_MERGEABLE   65
-#define MADV_NOHUGEPAGE        68
+#define MADV_HUGEPAGE  14
+#define MADV_MERGEABLE  12
+#define MADV_NOHUGEPAGE 15
 #define MADV_NORMAL     0
 #define MADV_RANDOM     1
 #define MADV_REMOVE    9
 #define MADV_SEQUENTIAL 2
-#define MADV_UNMERGEABLE 66
+#define MADV_UNMERGEABLE 13
 #define MADV_WILLNEED   3
 #define MAP_ANONYMOUS  0x10
 #define MAP_DENYWRITE  0x0800
index 4aa6de1aa67dc6a7f095d135e95f8b406cc7f5c1..d9329ae84e178993042534d5e89d219dffa3fe34 100644 (file)
@@ -10,25 +10,13 @@ extern struct timeval bench__start, bench__end, bench__runtime;
  * The madvise transparent hugepage constants were added in glibc
  * 2.13. For compatibility with older versions of glibc, define these
  * tokens if they are not already defined.
- *
- * PA-RISC uses different madvise values from other architectures and
- * needs to be special-cased.
  */
-#ifdef __hppa__
-# ifndef MADV_HUGEPAGE
-#  define MADV_HUGEPAGE                67
-# endif
-# ifndef MADV_NOHUGEPAGE
-#  define MADV_NOHUGEPAGE      68
-# endif
-#else
 # ifndef MADV_HUGEPAGE
 #  define MADV_HUGEPAGE                14
 # endif
 # ifndef MADV_NOHUGEPAGE
 #  define MADV_NOHUGEPAGE      15
 # endif
-#endif
 
 int bench_numa(int argc, const char **argv);
 int bench_sched_messaging(int argc, const char **argv);