patch-2.4.19 linux-2.4.19/arch/alpha/kernel/osf_sys.c
Next file: linux-2.4.19/arch/alpha/kernel/pci_iommu.c
Previous file: linux-2.4.19/arch/alpha/kernel/entry.S
Back to the patch index
Back to the overall index
- Lines: 56
- Date:
Fri Aug 2 17:39:42 2002
- Orig file:
linux-2.4.18/arch/alpha/kernel/osf_sys.c
- Orig date:
Fri Nov 2 17:39:20 2001
diff -urN linux-2.4.18/arch/alpha/kernel/osf_sys.c linux-2.4.19/arch/alpha/kernel/osf_sys.c
@@ -219,8 +219,8 @@
* isn't actually going to matter, as if the parent happens
* to change we can happily return either of the pids.
*/
- (®s)->r20 = tsk->p_opptr->pid;
- return tsk->pid;
+ (®s)->r20 = tsk->p_opptr->tgid;
+ return tsk->tgid;
}
asmlinkage unsigned long osf_mmap(unsigned long addr, unsigned long len,
@@ -1384,3 +1384,44 @@
return addr;
}
+
+#ifdef CONFIG_OSF4_COMPAT
+extern ssize_t sys_readv(unsigned long, const struct iovec *, unsigned long);
+extern ssize_t sys_writev(unsigned long, const struct iovec *, unsigned long);
+
+/* Clear top 32 bits of iov_len in the user's buffer for
+ compatibility with old versions of OSF/1 where iov_len
+ was defined as int. */
+static int
+osf_fix_iov_len(const struct iovec *iov, unsigned long count)
+{
+ unsigned long i;
+
+ for (i = 0 ; i < count ; i++) {
+ int *iov_len_high = (int *)&iov[i].iov_len + 1;
+
+ if (put_user(0, iov_len_high))
+ return -EFAULT;
+ }
+ return 0;
+}
+
+asmlinkage ssize_t
+osf_readv(unsigned long fd, const struct iovec * vector, unsigned long count)
+{
+ if (unlikely(personality(current->personality) == PER_OSF4))
+ if (osf_fix_iov_len(vector, count))
+ return -EFAULT;
+ return sys_readv(fd, vector, count);
+}
+
+asmlinkage ssize_t
+osf_writev(unsigned long fd, const struct iovec * vector, unsigned long count)
+{
+ if (unlikely(personality(current->personality) == PER_OSF4))
+ if (osf_fix_iov_len(vector, count))
+ return -EFAULT;
+ return sys_writev(fd, vector, count);
+}
+
+#endif
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)