Subject: CVS commit: syssrc/sys/compat/irix
To: None <source-changes@netbsd.org>
From: Emmanuel Dreyfus <manu@netbsd.org>
List: source-changes
Date: 05/22/2002 08:14:05
Module Name:	syssrc
Committed By:	manu
Date:		Wed May 22 05:14:04 UTC 2002

Modified Files:
	syssrc/sys/compat/irix: irix_fcntl.c irix_ioctl.c irix_ioctl.h
	    irix_syscall.h irix_syscalls.c irix_sysent.c irix_usema.c
	    irix_usema.h syscalls.master

Log Message:
First implementation of IRIX /dev/usemaclone functionnalities. This
successfully emulates a few test program that use poll semaphores,
including the attach-to-file-descriptor-and-select feature.

There are a few issues:
1) at least one ioctl need to set retval. We handle this in irix_sys_ioctl()
by replacing the data argument by a pointer to a strucutre in the stackgap
that carries the real data and retval. The underlying ioctl methods can
therefore retreive both data and retval.

2) usemaclone is a cloning device: each time it is open, it creates a new
context, and ioctl operation on each open file descriptor will lead to
different behavior. This functionnality is available in NetBSD through the
devvp branch. This first implementation does not use devvp yet, but this
should be done later. Currently, we create a new vnode, and we provide our
own vnode operations. Some operation are applied to the cloned vnode, others
are applied to the original vnode. The v_data field is used to hold a
reference to the original vnode so that we can work on it.

3) at least the setattr vnode operation needs some customisation: IRIX
libc relies on the fact that fchmod on /dev/usema will return 0 in case
of failure.


To generate a diff of this commit:
cvs rdiff -r1.7 -r1.8 syssrc/sys/compat/irix/irix_fcntl.c
cvs rdiff -r1.1 -r1.2 syssrc/sys/compat/irix/irix_ioctl.c \
    syssrc/sys/compat/irix/irix_ioctl.h syssrc/sys/compat/irix/irix_usema.c \
    syssrc/sys/compat/irix/irix_usema.h
cvs rdiff -r1.43 -r1.44 syssrc/sys/compat/irix/irix_syscall.h \
    syssrc/sys/compat/irix/irix_syscalls.c \
    syssrc/sys/compat/irix/irix_sysent.c
cvs rdiff -r1.42 -r1.43 syssrc/sys/compat/irix/syscalls.master

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.