arm64: remove unnecessary ifdefs around is_compat_task()
authorLeonardo Bras <leobras@redhat.com>
Tue, 9 Jan 2024 03:46:50 +0000 (00:46 -0300)
committerCatalin Marinas <catalin.marinas@arm.com>
Wed, 28 Feb 2024 18:01:23 +0000 (18:01 +0000)
Currently some parts of the codebase will test for CONFIG_COMPAT before
testing is_compat_task().

is_compat_task() is a inlined function only present on CONFIG_COMPAT.
On the other hand, for !CONFIG_COMPAT, we have in linux/compat.h:

 #define is_compat_task() (0)

Since we have this define available in every usage of is_compat_task() for
!CONFIG_COMPAT, it's unnecessary to keep the ifdefs, since the compiler is
smart enough to optimize-out those snippets on CONFIG_COMPAT=n

This requires some regset code as well as a few other defines to be made
available on !CONFIG_COMPAT, so some symbols can get resolved before
getting optimized-out.

Signed-off-by: Leonardo Bras <leobras@redhat.com>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Link: https://lore.kernel.org/r/20240109034651.478462-2-leobras@redhat.com
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/include/asm/elf.h
arch/arm64/include/asm/fpsimd.h
arch/arm64/kernel/ptrace.c
arch/arm64/kernel/syscall.c

index 97932fbf973d1f82eb709d2cfaf5024fcf3e7efa..3f93f4eef9530a7b5bc966bf4a16d83093a016ee 100644 (file)
@@ -201,16 +201,16 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm,
 #define COMPAT_ELF_PLATFORM            ("v8l")
 #endif
 
-#ifdef CONFIG_COMPAT
-
-/* PIE load location for compat arm. Must match ARM ELF_ET_DYN_BASE. */
-#define COMPAT_ELF_ET_DYN_BASE         0x000400000UL
-
 /* AArch32 registers. */
 #define COMPAT_ELF_NGREG               18
 typedef unsigned int                   compat_elf_greg_t;
 typedef compat_elf_greg_t              compat_elf_gregset_t[COMPAT_ELF_NGREG];
 
+#ifdef CONFIG_COMPAT
+
+/* PIE load location for compat arm. Must match ARM ELF_ET_DYN_BASE. */
+#define COMPAT_ELF_ET_DYN_BASE         0x000400000UL
+
 /* AArch32 EABI. */
 #define EF_ARM_EABI_MASK               0xff000000
 int compat_elf_check_arch(const struct elf32_hdr *);
index 50e5f25d3024ced8b3c107de352a69e65b6ab7f6..94c7ed82fbada2e4d4e101a992762a6f806b2fd0 100644 (file)
@@ -21,7 +21,6 @@
 #include <linux/stddef.h>
 #include <linux/types.h>
 
-#ifdef CONFIG_COMPAT
 /* Masks for extracting the FPSR and FPCR from the FPSCR */
 #define VFP_FPSCR_STAT_MASK    0xf800009f
 #define VFP_FPSCR_CTRL_MASK    0x07f79f00
@@ -30,7 +29,6 @@
  * control/status register.
  */
 #define VFP_STATE_SIZE         ((32 * 8) + 4)
-#endif
 
 static inline unsigned long cpacr_save_enable_kernel_sve(void)
 {
index dc6cf0e37194e428519d7d58524ad0f624f4bebb..366fa248b968e01648080e920cf1a6d3eb003129 100644 (file)
@@ -174,7 +174,6 @@ static void ptrace_hbptriggered(struct perf_event *bp,
        struct arch_hw_breakpoint *bkpt = counter_arch_bp(bp);
        const char *desc = "Hardware breakpoint trap (ptrace)";
 
-#ifdef CONFIG_COMPAT
        if (is_compat_task()) {
                int si_errno = 0;
                int i;
@@ -196,7 +195,7 @@ static void ptrace_hbptriggered(struct perf_event *bp,
                                                  desc);
                return;
        }
-#endif
+
        arm64_force_sig_fault(SIGTRAP, TRAP_HWBKPT, bkpt->trigger, desc);
 }
 
@@ -1596,7 +1595,6 @@ static const struct user_regset_view user_aarch64_view = {
        .regsets = aarch64_regsets, .n = ARRAY_SIZE(aarch64_regsets)
 };
 
-#ifdef CONFIG_COMPAT
 enum compat_regset {
        REGSET_COMPAT_GPR,
        REGSET_COMPAT_VFP,
@@ -1853,6 +1851,7 @@ static const struct user_regset_view user_aarch32_ptrace_view = {
        .regsets = aarch32_ptrace_regsets, .n = ARRAY_SIZE(aarch32_ptrace_regsets)
 };
 
+#ifdef CONFIG_COMPAT
 static int compat_ptrace_read_user(struct task_struct *tsk, compat_ulong_t off,
                                   compat_ulong_t __user *ret)
 {
@@ -2114,7 +2113,6 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
 
 const struct user_regset_view *task_user_regset_view(struct task_struct *task)
 {
-#ifdef CONFIG_COMPAT
        /*
         * Core dumping of 32-bit tasks or compat ptrace requests must use the
         * user_aarch32_view compatible with arm32. Native ptrace requests on
@@ -2125,7 +2123,7 @@ const struct user_regset_view *task_user_regset_view(struct task_struct *task)
                return &user_aarch32_view;
        else if (is_compat_thread(task_thread_info(task)))
                return &user_aarch32_ptrace_view;
-#endif
+
        return &user_aarch64_view;
 }
 
index 9a70d9746b661bfcfab619bbb636ad1d30b80d56..ad198262b9817a057fe2779f47d56e9258dbd4fb 100644 (file)
@@ -20,14 +20,11 @@ long sys_ni_syscall(void);
 
 static long do_ni_syscall(struct pt_regs *regs, int scno)
 {
-#ifdef CONFIG_COMPAT
-       long ret;
        if (is_compat_task()) {
-               ret = compat_arm_syscall(regs, scno);
+               long ret = compat_arm_syscall(regs, scno);
                if (ret != -ENOSYS)
                        return ret;
        }
-#endif
 
        return sys_ni_syscall();
 }