Skip to contentSkip to conversation

arch-independent syscalls to return long

PATCH In review Randy.Dunlap 4 participants 7 messages Mar 21, 2003

Subsystems (9)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 arch-independent syscalls to return long

Hi,

I posted this about 1 month ago (as [RFC]), to no avail. However, tonight Andi needs it for pause() [which is failing on x86_64], and Robert Love mentioned converting the affinity syscalls. I had already done them, so here they are again.

Builds and boots.

Please apply. Patch is to 2.5.65-current.

Thanks,
~Randy

patch_name: syscalls-long-2560.patch
patch_version: 2003-02-13.22:58:43
author: Randy.Dunlap <[email protected]>
description: convert arch-independent syscalls to long return values;
product: Linux
product_versions: 2.5.65
diffstat: =

 arch/x86_64/ia32/sys_ia32.c |    4 ++--
 fs/dcookies.c               |    2 +-
 fs/readdir.c                |    2 +-
 include/linux/mm.h          |    2 +-
 kernel/fork.c               |    2 +-
 kernel/sched.c              |    4 ++--
 kernel/signal.c             |    2 +-
 mm/fremap.c                 |    2 +-
 8 files changed, 10 insertions(+), 10 deletions(-)
arch/x86_64/ia32/sys_ia32.c renamed from arch/x86_64/ia32/sys_ia32.c%LONG +2 -2
diff -Naur ./arch/x86_64/ia32/sys_ia32.c%LONG ./arch/x86_64/ia32/sys_ia32.c
@@ -2071,8 +2071,8 @@
 	return -ENOSYS ;
 } 
 
-int sys_sched_getaffinity(pid_t pid, unsigned int len, unsigned long *new_mask_ptr); 
-int sys_sched_setaffinity(pid_t pid, unsigned int len, unsigned long *new_mask_ptr); 
+long sys_sched_getaffinity(pid_t pid, unsigned int len, unsigned long *new_mask_ptr); 
+long sys_sched_setaffinity(pid_t pid, unsigned int len, unsigned long *new_mask_ptr); 
 
 /* only works on LE */
 long sys32_sched_setaffinity(pid_t pid, unsigned int len,
fs/dcookies.c renamed from fs/dcookies.c%LONG +1 -1
diff -Naur ./fs/dcookies.c%LONG ./fs/dcookies.c
@@ -142,7 +142,7 @@
 /* And here is where the userspace process can look up the cookie value
  * to retrieve the path.
  */
-asmlinkage int sys_lookup_dcookie(u64 cookie64, char * buf, size_t len)
+asmlinkage long sys_lookup_dcookie(u64 cookie64, char * buf, size_t len)
 {
 	unsigned long cookie = (unsigned long)cookie64;
 	int err = -EINVAL;
fs/readdir.c renamed from fs/readdir.c%LONG +1 -1
diff -Naur ./fs/readdir.c%LONG ./fs/readdir.c
@@ -85,7 +85,7 @@
 	return 0;
 }
 
-asmlinkage int old_readdir(unsigned int fd, void * dirent, unsigned int count)
+asmlinkage long old_readdir(unsigned int fd, void * dirent, unsigned int count)
 {
 	int error;
 	struct file * file;
kernel/fork.c renamed from kernel/fork.c%LONG +1 -1
diff -Naur ./kernel/fork.c%LONG ./kernel/fork.c
@@ -736,7 +736,7 @@
 	p->flags = new_flags;
 }
 
-asmlinkage int sys_set_tid_address(int *tidptr)
+asmlinkage long sys_set_tid_address(int *tidptr)
 {
 	current->clear_child_tid = tidptr;
 
kernel/sched.c renamed from kernel/sched.c%LONG +2 -2
diff -Naur ./kernel/sched.c%LONG ./kernel/sched.c
@@ -1902,7 +1902,7 @@
  * @len: length in bytes of the bitmask pointed to by user_mask_ptr
  * @user_mask_ptr: user-space pointer to the new cpu mask
  */
-asmlinkage int sys_sched_setaffinity(pid_t pid, unsigned int len,
+asmlinkage long sys_sched_setaffinity(pid_t pid, unsigned int len,
 				      unsigned long *user_mask_ptr)
 {
 	unsigned long new_mask;
@@ -1954,7 +1954,7 @@
  * @len: length in bytes of the bitmask pointed to by user_mask_ptr
  * @user_mask_ptr: user-space pointer to hold the current cpu mask
  */
-asmlinkage int sys_sched_getaffinity(pid_t pid, unsigned int len,
+asmlinkage long sys_sched_getaffinity(pid_t pid, unsigned int len,
 				      unsigned long *user_mask_ptr)
 {
 	unsigned int real_len;
kernel/signal.c renamed from kernel/signal.c%LONG +1 -1
diff -Naur ./kernel/signal.c%LONG ./kernel/signal.c
@@ -2254,7 +2254,7 @@
 
 #ifndef HAVE_ARCH_SYS_PAUSE
 
-asmlinkage int
+asmlinkage long
 sys_pause(void)
 {
 	current->state = TASK_INTERRUPTIBLE;
mm/fremap.c renamed from mm/fremap.c%LONG +1 -1
diff -Naur ./mm/fremap.c%LONG ./mm/fremap.c
@@ -110,7 +110,7 @@
  * or use PROT_NONE in the original linear mapping and add a special
  * SIGBUS pagefault handler to reinstall zapped mappings.
  */
-int sys_remap_file_pages(unsigned long start, unsigned long size,
+long sys_remap_file_pages(unsigned long start, unsigned long size,
 	unsigned long prot, unsigned long pgoff, unsigned long flags)
 {
 	struct mm_struct *mm = current->mm;
include/linux/mm.h renamed from include/linux/mm.h%LONG +1 -1
@@ -421,7 +421,7 @@
 extern int handle_mm_fault(struct mm_struct *mm,struct vm_area_struct *vma, unsigned long address, int write_access);
 extern int make_pages_present(unsigned long addr, unsigned long end);
 extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write);
-extern int sys_remap_file_pages(unsigned long start, unsigned long size, unsigned long prot, unsigned long pgoff, unsigned long nonblock);
+extern long sys_remap_file_pages(unsigned long start, unsigned long size, unsigned long prot, unsigned long pgoff, unsigned long nonblock);
 
 
 int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, unsigned long start,
#1 lore raw
Quoted 8 lines · Randy.Dunlap

Hi,

I posted this about 1 month ago (as [RFC]), to no avail. However, tonight Andi needs it for pause() [which is failing on x86_64], and Robert Love mentioned converting the affinity syscalls. I had already done them, so here they are again.

Thanks. Is that all of them done now?

#2 lore raw
Quoted 5 lines · Andrew Morton
Quoted 3 lines · Randy.Dunlap

Hi,

Quoted 7 lines
Quoted 5 lines

I posted this about 1 month ago (as [RFC]), to no avail. However, tonight Andi needs it for pause() [which is failing on x86_64], and Robert Love mentioned converting the affinity syscalls. I had already done them, so here they are again.

Thanks. Is that all of them done now?

AFAIK, without guarantees. I used a list from Jamie Lokier and then went thru bunches of source files & syscalls myself and came up with these.

There are still some syscall prototypes that are declared as int instead of long, but I can't fix them tonight (zzz). Examples:

	sys_sched_setaffinity
		arch/sparc64/, arch/ppc64/, arch/s390x/ (FIX PROTO)
	sys_sched_getaffinity
		arch/sparc64/, arch/ppc64/, arch/s390x/ (FIX PROTO)
	sys_remap_file_pages
		arch/sparc/ (FIX PROTO)
	sys_lookup_dcookie
		arch/sparc64/, arch/ppc64/, arch/parisc/ (FIX PROTO)

That's all that I know of.

~Randy

#3 lore raw
In reply to Andrew Morton
Quoted 1 line · Andrew Morton

Thanks. Is that all of them done now?

I think so, I just grepped the whole tree.

But... Here are some related cleanups that should accompany the original patch.

Against 2.5.65.

Robert Love

 Documentation/DocBook/kernel-hacking.tmpl |    2 +-
 drivers/macintosh/via-pmu.c               |    2 +-
 drivers/message/fusion/mptctl.c           |    2 +-
 include/asm-parisc/unistd.h               |   10 +++++-----
 include/linux/ioctl32.h                   |    2 +-
 kernel/suspend.c                          |    2 +-
 net/compat.c                              |    6 +++---
 7 files changed, 13 insertions(+), 13 deletions(-)
Documentation/DocBook/kernel-hacking.tmpl +1 -1
diff -urN linux-2.5.65/Documentation/DocBook/kernel-hacking.tmpl linux/Documentation/DocBook/kernel-hacking.tmpl
@@ -319,7 +319,7 @@
   </para>
 
   <programlisting>
-asmlinkage int sys_mycall(int arg) 
+asmlinkage long sys_mycall(int arg)
 {
         return 0; 
 }
drivers/macintosh/via-pmu.c +1 -1
diff -urN linux-2.5.65/drivers/macintosh/via-pmu.c linux/drivers/macintosh/via-pmu.c
@@ -2002,7 +2002,7 @@
 	last_jiffy_stamp(0) = tb_last_stamp = get_tbl();
 }
 
-extern int sys_sync(void);
+extern long sys_sync(void);
 
 #define	GRACKLE_PM	(1<<7)
 #define GRACKLE_DOZE	(1<<5)
drivers/message/fusion/mptctl.c +1 -1
diff -urN linux-2.5.65/drivers/message/fusion/mptctl.c linux/drivers/message/fusion/mptctl.c
@@ -2743,7 +2743,7 @@
 						      unsigned long,
 						      struct file *));
 int unregister_ioctl32_conversion(unsigned int cmd);
-extern asmlinkage int sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg);
+extern long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg);
 
 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
 /* sparc32_XXX functions are used to provide a conversion between
include/asm-parisc/unistd.h +5 -5
diff -urN linux-2.5.65/include/asm-parisc/unistd.h linux/include/asm-parisc/unistd.h
@@ -842,19 +842,19 @@
 
 static inline pid_t setsid(void)
 {
-	extern int sys_setsid(void);
+	extern long sys_setsid(void);
 	return sys_setsid();
 }
 
 static inline int write(int fd, const char *buf, off_t count)
 {
-	extern int sys_write(int, const char *, int);
+	extern long sys_write(int, const char *, int);
 	return sys_write(fd, buf, count);
 }
 
 static inline int read(int fd, char *buf, off_t count)
 {
-	extern int sys_read(int, char *, int);
+	extern long sys_read(int, char *, int);
 	return sys_read(fd, buf, count);
 }
 
@@ -866,7 +866,7 @@
 
 static inline int dup(int fd)
 {
-	extern int sys_dup(int);
+	extern long sys_dup(int);
 	return sys_dup(fd);
 }
 
@@ -891,7 +891,7 @@
 
 static inline int _exit(int exitcode)
 {
-	extern int sys_exit(int) __attribute__((noreturn));
+	extern long sys_exit(int) __attribute__((noreturn));
 	return sys_exit(exitcode);
 }
 
include/linux/ioctl32.h +1 -1
diff -urN linux-2.5.65/include/linux/ioctl32.h linux/include/linux/ioctl32.h
@@ -3,7 +3,7 @@
 
 struct file;
 
-int sys_ioctl(unsigned int, unsigned int, unsigned long);
+extern long sys_ioctl(unsigned int, unsigned int, unsigned long);
 
 /* 
  * Register an 32bit ioctl translation handler for ioctl cmd.
kernel/suspend.c +1 -1
diff -urN linux-2.5.65/kernel/suspend.c linux/kernel/suspend.c
@@ -65,7 +65,7 @@
 #include <asm/pgtable.h>
 #include <asm/io.h>
 
-extern int sys_sync(void);
+extern long sys_sync(void);
 
 unsigned char software_suspend_enabled = 0;
 
net/compat.c +3 -3
diff -urN linux-2.5.65/net/compat.c linux/net/compat.c
@@ -365,8 +365,8 @@
 	kmsg->msg_control = (void *) orig_cmsg_uptr;
 }
 
-extern asmlinkage int sys_setsockopt(int fd, int level, int optname,
-				     char *optval, int optlen);
+extern long sys_setsockopt(int fd, int level, int optname,
+			   char *optval, int optlen);
 
 static int do_netfilter_replace(int fd, int level, int optname,
 				char *optval, int optlen)
@@ -530,7 +530,7 @@
 	return err;
 }
 
-asmlinkage int compat_sys_setsockopt(int fd, int level, int optname,
+asmlinkage long compat_sys_setsockopt(int fd, int level, int optname,
 				char *optval, int optlen)
 {
 	if (optname == IPT_SO_SET_REPLACE)
#4 lore raw

On 21 Mar 2003 01:51:50 -0500 Robert Love <[email protected]> wrote:

| -extern asmlinkage int sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg); | +extern long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg);

keep the asmlinkage (or why not?)

| -extern asmlinkage int sys_setsockopt(int fd, int level, int optname,
| -				     char *optval, int optlen);
| +extern long sys_setsockopt(int fd, int level, int optname,
| +			   char *optval, int optlen);

ditto

--
~Randy [resending after error on first attempt]

#5 lore raw
Quoted 6 lines · Randy.Dunlap

On 21 Mar 2003 01:51:50 -0500 Robert Love <[email protected]> wrote:

| -extern asmlinkage int sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg); | +extern long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg);

keep the asmlinkage (or why not?)

I always that it did not matter, but Arjan just pointed out otherwise (as you saw). So I guess these need to be reverted.

There are a handful of other such cases around the kernel...

Robert Love

#6 lore raw
Quoted 2 lines · Robert Love

I always that it did not matter, but Arjan just pointed out otherwise (as you saw). So I guess these need to be reverted.

And here is a patch to do so.

This patch, against 2.5.65 + the previous two, replaces the missing asmlinkage on prototypes.

Robert Love

 drivers/message/fusion/mptctl.c |    3 ++-
 net/compat.c                    |    4 ++--
 2 files changed, 4 insertions(+), 3 deletions(-)
drivers/message/fusion/mptctl.c +2 -1
diff -urN linux-2.5.65/drivers/message/fusion/mptctl.c linux/drivers/message/fusion/mptctl.c
@@ -2743,7 +2743,8 @@
 						      unsigned long,
 						      struct file *));
 int unregister_ioctl32_conversion(unsigned int cmd);
-extern long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg);
+extern asmlinkage long sys_ioctl(unsigned int fd, unsigned int cmd,
+				 unsigned long arg);
 
 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
 /* sparc32_XXX functions are used to provide a conversion between
net/compat.c +2 -2
diff -urN linux-2.5.65/net/compat.c linux/net/compat.c
@@ -365,8 +365,8 @@
 	kmsg->msg_control = (void *) orig_cmsg_uptr;
 }
 
-extern long sys_setsockopt(int fd, int level, int optname,
-			   char *optval, int optlen);
+extern asmlinkage long sys_setsockopt(int fd, int level, int optname,
+				      char *optval, int optlen);
 
 static int do_netfilter_replace(int fd, int level, int optname,
 				char *optval, int optlen)