All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rohan McLure <rmclure@linux.ibm.com>
To: linuxppc-dev@lists.ozlabs.org
Cc: Rohan McLure <rmclure@linux.ibm.com>
Subject: [PATCH 18/23] powerpc: Use common syscall handler type
Date: Fri, 16 Sep 2022 15:32:55 +1000	[thread overview]
Message-ID: <20220916053300.786330-19-rmclure@linux.ibm.com> (raw)
In-Reply-To: <20220916053300.786330-1-rmclure@linux.ibm.com>

Cause syscall handlers to be typed as follows when called indirectly
throughout the kernel. This is to allow for better type checking.

typedef long (*syscall_fn)(unsigned long, unsigned long, unsigned long,
                           unsigned long, unsigned long, unsigned long);

Since both 32 and 64-bit abis allow for at least the first six
machine-word length parameters to a function to be passed by registers,
even handlers which admit fewer than six parameters may be viewed as
having the above type.

Coercing syscalls to syscall_fn requires a cast to void* to avoid
-Wcast-function-type.

Fixup comparisons in VDSO to avoid pointer-integer comparison. Introduce
explicit cast on systems with SPUs.

Signed-off-by: Rohan McLure <rmclure@linux.ibm.com>
---
V1 -> V2: New patch.
V2 -> V3: Remove unnecessary cast from const syscall_fn to syscall_fn
V4 -> V5: Update patch description.
---
 arch/powerpc/include/asm/syscall.h          | 7 +++++--
 arch/powerpc/include/asm/syscalls.h         | 1 +
 arch/powerpc/kernel/systbl.c                | 6 +++---
 arch/powerpc/kernel/vdso.c                  | 4 ++--
 arch/powerpc/platforms/cell/spu_callbacks.c | 6 +++---
 5 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/arch/powerpc/include/asm/syscall.h b/arch/powerpc/include/asm/syscall.h
index 25fc8ad9a27a..d2a8dfd5de33 100644
--- a/arch/powerpc/include/asm/syscall.h
+++ b/arch/powerpc/include/asm/syscall.h
@@ -14,9 +14,12 @@
 #include <linux/sched.h>
 #include <linux/thread_info.h>
 
+typedef long (*syscall_fn)(unsigned long, unsigned long, unsigned long,
+			   unsigned long, unsigned long, unsigned long);
+
 /* ftrace syscalls requires exporting the sys_call_table */
-extern const unsigned long sys_call_table[];
-extern const unsigned long compat_sys_call_table[];
+extern const syscall_fn sys_call_table[];
+extern const syscall_fn compat_sys_call_table[];
 
 static inline int syscall_get_nr(struct task_struct *task, struct pt_regs *regs)
 {
diff --git a/arch/powerpc/include/asm/syscalls.h b/arch/powerpc/include/asm/syscalls.h
index 5d106acf7906..cc87168d6ecb 100644
--- a/arch/powerpc/include/asm/syscalls.h
+++ b/arch/powerpc/include/asm/syscalls.h
@@ -8,6 +8,7 @@
 #include <linux/types.h>
 #include <linux/compat.h>
 
+#include <asm/syscall.h>
 #ifdef CONFIG_PPC64
 #include <asm/syscalls_32.h>
 #endif
diff --git a/arch/powerpc/kernel/systbl.c b/arch/powerpc/kernel/systbl.c
index ce52bd2ec292..e5d419822b4e 100644
--- a/arch/powerpc/kernel/systbl.c
+++ b/arch/powerpc/kernel/systbl.c
@@ -16,9 +16,9 @@
 #include <asm/syscalls.h>
 
 #define __SYSCALL_WITH_COMPAT(nr, entry, compat) __SYSCALL(nr, entry)
-#define __SYSCALL(nr, entry) [nr] = (unsigned long) &entry,
+#define __SYSCALL(nr, entry) [nr] = (void *) entry,
 
-const unsigned long sys_call_table[] = {
+const syscall_fn sys_call_table[] = {
 #ifdef CONFIG_PPC64
 #include <asm/syscall_table_64.h>
 #else
@@ -29,7 +29,7 @@ const unsigned long sys_call_table[] = {
 #ifdef CONFIG_COMPAT
 #undef __SYSCALL_WITH_COMPAT
 #define __SYSCALL_WITH_COMPAT(nr, native, compat)	__SYSCALL(nr, compat)
-const unsigned long compat_sys_call_table[] = {
+const syscall_fn compat_sys_call_table[] = {
 #include <asm/syscall_table_32.h>
 };
 #endif /* CONFIG_COMPAT */
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c
index bf9574ec26ce..fcca06d200d3 100644
--- a/arch/powerpc/kernel/vdso.c
+++ b/arch/powerpc/kernel/vdso.c
@@ -304,10 +304,10 @@ static void __init vdso_setup_syscall_map(void)
 	unsigned int i;
 
 	for (i = 0; i < NR_syscalls; i++) {
-		if (sys_call_table[i] != (unsigned long)&sys_ni_syscall)
+		if (sys_call_table[i] != (void *)&sys_ni_syscall)
 			vdso_data->syscall_map[i >> 5] |= 0x80000000UL >> (i & 0x1f);
 		if (IS_ENABLED(CONFIG_COMPAT) &&
-		    compat_sys_call_table[i] != (unsigned long)&sys_ni_syscall)
+		    compat_sys_call_table[i] != (void *)&sys_ni_syscall)
 			vdso_data->compat_syscall_map[i >> 5] |= 0x80000000UL >> (i & 0x1f);
 	}
 }
diff --git a/arch/powerpc/platforms/cell/spu_callbacks.c b/arch/powerpc/platforms/cell/spu_callbacks.c
index fe0d8797a00a..e780c14c5733 100644
--- a/arch/powerpc/platforms/cell/spu_callbacks.c
+++ b/arch/powerpc/platforms/cell/spu_callbacks.c
@@ -34,15 +34,15 @@
  *	mbind, mq_open, ipc, ...
  */
 
-static void *spu_syscall_table[] = {
+static const syscall_fn spu_syscall_table[] = {
 #define __SYSCALL_WITH_COMPAT(nr, entry, compat) __SYSCALL(nr, entry)
-#define __SYSCALL(nr, entry) [nr] = entry,
+#define __SYSCALL(nr, entry) [nr] = (void *) entry,
 #include <asm/syscall_table_spu.h>
 };
 
 long spu_sys_callback(struct spu_syscall_block *s)
 {
-	long (*syscall)(u64 a1, u64 a2, u64 a3, u64 a4, u64 a5, u64 a6);
+	syscall_fn syscall;
 
 	if (s->nr_ret >= ARRAY_SIZE(spu_syscall_table)) {
 		pr_debug("%s: invalid syscall #%lld", __func__, s->nr_ret);
-- 
2.34.1


  parent reply	other threads:[~2022-09-16  5:39 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-16  5:32 [PATCH 00/23] powerpc: Syscall wrapper and register clearing Rohan McLure
2022-09-16  5:32 ` [PATCH 01/23] powerpc: Remove asmlinkage from syscall handler definitions Rohan McLure
2022-09-16  5:32 ` [PATCH 02/23] powerpc: Save caller r3 prior to system_call_exception Rohan McLure
2022-09-16  5:32 ` [PATCH 03/23] powerpc: Add ZEROIZE_GPRS macros for register clears Rohan McLure
2022-09-16  5:32 ` [PATCH 04/23] powerpc/64s: Use {ZEROIZE,SAVE,REST}_GPRS macros in sc, scv 0 handlers Rohan McLure
2022-09-16  5:32 ` [PATCH 05/23] powerpc/32: Clarify interrupt restores with REST_GPR macro in entry_32.S Rohan McLure
2022-09-20  0:51   ` Nicholas Piggin
2022-09-16  5:32 ` [PATCH 06/23] powerpc/64e: Clarify register saves and clears with {SAVE,ZEROIZE}_GPRS Rohan McLure
2022-09-20  0:55   ` Nicholas Piggin
2022-09-16  5:32 ` [PATCH 07/23] powerpc/64s: Fix comment on interrupt handler prologue Rohan McLure
2022-09-20  0:55   ` Nicholas Piggin
2022-09-16  5:32 ` [PATCH 08/23] powerpc: Fix fallocate and fadvise64_64 compat parameter combination Rohan McLure
2022-09-16  6:54   ` Arnd Bergmann
2022-09-20  1:01   ` Nicholas Piggin
2022-09-16  5:32 ` [PATCH 09/23] asm-generic: compat: Support BE for long long args in 32-bit ABIs Rohan McLure
2022-09-20  1:06   ` Nicholas Piggin
2022-09-20  1:06     ` Nicholas Piggin
2022-09-20  7:09   ` Arnd Bergmann
2022-09-16  5:32 ` [PATCH 10/23] powerpc: Use generic fallocate compatibility syscall Rohan McLure
2022-09-16  6:56   ` Arnd Bergmann
2022-09-16  5:32 ` [PATCH 11/23] powerpc/32: Remove powerpc select specialisation Rohan McLure
2022-09-16  5:32 ` [PATCH 12/23] powerpc: Remove direct call to personality syscall handler Rohan McLure
2022-09-16  5:32 ` [PATCH 13/23] powerpc: Remove direct call to mmap2 syscall handlers Rohan McLure
2022-09-16  5:32 ` [PATCH 14/23] powerpc: Provide do_ppc64_personality helper Rohan McLure
2022-09-16  5:32 ` [PATCH 15/23] powerpc: Adopt SYSCALL_DEFINE for arch-specific syscall handlers Rohan McLure
2022-09-16  5:48   ` Rohan McLure
2022-09-20  1:24   ` Nicholas Piggin
2022-09-16  5:32 ` [PATCH 16/23] powerpc: Include all arch-specific syscall prototypes Rohan McLure
2022-09-20  1:27   ` Nicholas Piggin
2022-09-16  5:32 ` [PATCH 17/23] powerpc: Enable compile-time check for syscall handlers Rohan McLure
2022-09-20  1:30   ` Nicholas Piggin
2022-09-16  5:32 ` Rohan McLure [this message]
2022-09-20  1:39   ` [PATCH 18/23] powerpc: Use common syscall handler type Nicholas Piggin
2022-09-16  5:32 ` [PATCH 19/23] powerpc: Provide syscall wrapper Rohan McLure
2022-09-20  1:59   ` Nicholas Piggin
2022-09-21  3:44     ` Rohan McLure
2022-09-16  5:32 ` [PATCH 20/23] powerpc/64s: Clear/restore caller gprs in syscall interrupt/return Rohan McLure
2022-09-20  2:03   ` Nicholas Piggin
2022-09-20  4:54     ` Rohan McLure
2022-09-21  5:33       ` Rohan McLure
2022-09-20  2:07   ` Nicholas Piggin
2022-09-16  5:32 ` [PATCH 21/23] powerpc/64: Add INTERRUPT_SANITIZE_REGISTERS Kconfig Rohan McLure
2022-09-20  2:10   ` Nicholas Piggin
2022-09-16  5:32 ` [PATCH 22/23] powerpc/64s: Clear gprs on interrupt routine entry in Book3S Rohan McLure
2022-09-20  2:27   ` Nicholas Piggin
2022-09-16  5:33 ` [PATCH 23/23] powerpc/64e: Clear gprs on interrupt routine entry on Book3E Rohan McLure
2022-09-16  5:58 ` [PATCH 00/23] powerpc: Syscall wrapper and register clearing Rohan McLure

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220916053300.786330-19-rmclure@linux.ibm.com \
    --to=rmclure@linux.ibm.com \
    --cc=linuxppc-dev@lists.ozlabs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.