[parisc-linux] pread/pwrite

Richard Hirst rhirst@linuxcare.com
Wed, 11 Apr 2001 11:30:39 +0100


Hi Willy,

> Could those who're having problems with pread/pwrite try the following patch?

  I don't see how this is supposed to work with a 32 bit userspace and 64
bit kernel.  Do we also need syscall wrappers for pread/pwrite, something
like this:

Index: arch/parisc/kernel/sys_parisc32.c
===================================================================
RCS file: /home/cvs/parisc/linux/arch/parisc/kernel/sys_parisc32.c,v
retrieving revision 1.4
diff -u -r1.4 sys_parisc32.c
--- sys_parisc32.c	2001/04/10 20:05:24	1.4
+++ sys_parisc32.c	2001/04/11 10:18:17
@@ -2727,3 +2727,19 @@
 	}
 	sys_fcntl(fd, cmd, arg);
 }
+
+
+asmlinkage int sys32_pread(int fd, void *buf, size_t count, unsigned int high, unsigned int low)
+{
+	extern asmlinkage ssize_t sys_pread(unsigned int, char *, size_t, loff_t);
+
+	return sys_pread(fd, buf, count, (loff_t)high << 32 | low);
+}
+
+asmlinkage int sys32_pwrite(int fd, void *buf, size_t count, unsigned int high, unsigned int low)
+{
+	extern asmlinkage ssize_t sys_pwrite(unsigned int, char *, size_t, loff_t);
+
+	return sys_pwrite(fd, buf, count, (loff_t)high << 32 | low);
+}
+
Index: arch/parisc/kernel/syscall.S
===================================================================
RCS file: /home/cvs/parisc/linux/arch/parisc/kernel/syscall.S,v
retrieving revision 1.60
diff -u -r1.60 syscall.S
--- syscall.S	2001/04/10 20:05:24	1.60
+++ syscall.S	2001/04/11 10:18:18
@@ -441,8 +441,8 @@
 	ENTRY_SAME(getitimer)	/* 105 */
 	ENTRY_SAME(capget)
 	ENTRY_SAME(capset)
-	ENTRY_SAME(pread)
-	ENTRY_SAME(pwrite)
+	ENTRY_DIFF(pread)
+	ENTRY_DIFF(pwrite)
 	ENTRY_SAME(getcwd)		/* 110 */
 	ENTRY_SAME(vhangup)
 	ENTRY_SAME(fstat64)