Module Name:    src
Committed By:   pooka
Date:           Fri Sep 14 16:29:22 UTC 2012

Modified Files:
        src/lib/librumpuser: rumpuser.c
        src/sys/rump/dev/lib/libscsitest: scsitest.c
        src/sys/rump/dev/lib/libugenhc: ugenhc.c
        src/sys/rump/include/rump: rumpuser.h
        src/sys/rump/librump/rumpvfs: rumpblk.c rumpfs.c
        src/sys/rump/net/lib/libshmif: if_shmem.c
        src/sys/rump/net/lib/libvirtif: if_virt.c

Log Message:
Do not assume that O_FOO flags have matching values in the rump kernel
and hypervisor.


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/lib/librumpuser/rumpuser.c
cvs rdiff -u -r1.3 -r1.4 src/sys/rump/dev/lib/libscsitest/scsitest.c
cvs rdiff -u -r1.10 -r1.11 src/sys/rump/dev/lib/libugenhc/ugenhc.c
cvs rdiff -u -r1.72 -r1.73 src/sys/rump/include/rump/rumpuser.h
cvs rdiff -u -r1.47 -r1.48 src/sys/rump/librump/rumpvfs/rumpblk.c
cvs rdiff -u -r1.110 -r1.111 src/sys/rump/librump/rumpvfs/rumpfs.c
cvs rdiff -u -r1.44 -r1.45 src/sys/rump/net/lib/libshmif/if_shmem.c
cvs rdiff -u -r1.26 -r1.27 src/sys/rump/net/lib/libvirtif/if_virt.c

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

Modified files:

Index: src/lib/librumpuser/rumpuser.c
diff -u src/lib/librumpuser/rumpuser.c:1.19 src/lib/librumpuser/rumpuser.c:1.20
--- src/lib/librumpuser/rumpuser.c:1.19	Sat Aug 25 18:00:06 2012
+++ src/lib/librumpuser/rumpuser.c	Fri Sep 14 16:29:22 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpuser.c,v 1.19 2012/08/25 18:00:06 pooka Exp $	*/
+/*	$NetBSD: rumpuser.c,v 1.20 2012/09/14 16:29:22 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007-2010 Antti Kantee.  All Rights Reserved.
@@ -28,7 +28,7 @@
 #include "rumpuser_port.h"
 
 #if !defined(lint)
-__RCSID("$NetBSD: rumpuser.c,v 1.19 2012/08/25 18:00:06 pooka Exp $");
+__RCSID("$NetBSD: rumpuser.c,v 1.20 2012/09/14 16:29:22 pooka Exp $");
 #endif /* !lint */
 
 #include <sys/ioctl.h>
@@ -317,10 +317,32 @@ rumpuser_memsync(void *addr, size_t len,
 }
 
 int
-rumpuser_open(const char *path, int flags, int *error)
+rumpuser_open(const char *path, int ruflags, int *error)
 {
+	int flags;
 
-	DOCALL(int, (open(path, flags, 0644)));
+	switch (ruflags & RUMPUSER_OPEN_ACCMODE) {
+	case RUMPUSER_OPEN_RDONLY:
+		flags = O_RDONLY;
+		break;
+	case RUMPUSER_OPEN_WRONLY:
+		flags = O_WRONLY;
+		break;
+	case RUMPUSER_OPEN_RDWR:
+		flags = O_RDWR;
+		break;
+	default:
+		*error = EINVAL;
+		return -1;
+	}
+
+#define TESTSET(_ru_, _h_) if (ruflags & _ru_) flags |= _h_;
+	TESTSET(RUMPUSER_OPEN_CREATE, O_CREAT);
+	TESTSET(RUMPUSER_OPEN_EXCL, O_EXCL);
+	TESTSET(RUMPUSER_OPEN_DIRECT, O_DIRECT);
+#undef TESTSET
+
+	DOCALL_KLOCK(int, (open(path, flags, 0644)));
 }
 
 int

Index: src/sys/rump/dev/lib/libscsitest/scsitest.c
diff -u src/sys/rump/dev/lib/libscsitest/scsitest.c:1.3 src/sys/rump/dev/lib/libscsitest/scsitest.c:1.4
--- src/sys/rump/dev/lib/libscsitest/scsitest.c:1.3	Sun May  6 16:58:31 2012
+++ src/sys/rump/dev/lib/libscsitest/scsitest.c	Fri Sep 14 16:29:21 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: scsitest.c,v 1.3 2012/05/06 16:58:31 martin Exp $	*/
+/*	$NetBSD: scsitest.c,v 1.4 2012/09/14 16:29:21 pooka Exp $	*/
 
 /*
  * Copyright (c) 2010 Antti Kantee.  All Rights Reserved.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: scsitest.c,v 1.3 2012/05/06 16:58:31 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: scsitest.c,v 1.4 2012/09/14 16:29:21 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -218,7 +218,7 @@ scsitest_match(struct device *parent, st
 		return 0;
 	mycdsize = fsize / CDBLOCKSIZE;
 
-	if ((isofd = rumpuser_open(MYCDISO, O_RDWR, &error)) == -1)
+	if ((isofd = rumpuser_open(MYCDISO, RUMPUSER_OPEN_RDWR, &error)) == -1)
 		return 0;
 #else
 	/*

Index: src/sys/rump/dev/lib/libugenhc/ugenhc.c
diff -u src/sys/rump/dev/lib/libugenhc/ugenhc.c:1.10 src/sys/rump/dev/lib/libugenhc/ugenhc.c:1.11
--- src/sys/rump/dev/lib/libugenhc/ugenhc.c:1.10	Sun Jun 10 06:15:55 2012
+++ src/sys/rump/dev/lib/libugenhc/ugenhc.c	Fri Sep 14 16:29:21 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: ugenhc.c,v 1.10 2012/06/10 06:15:55 mrg Exp $	*/
+/*	$NetBSD: ugenhc.c,v 1.11 2012/09/14 16:29:21 pooka Exp $	*/
 
 /*
  * Copyright (c) 2009, 2010 Antti Kantee.  All Rights Reserved.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ugenhc.c,v 1.10 2012/06/10 06:15:55 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ugenhc.c,v 1.11 2012/09/14 16:29:21 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -602,7 +602,7 @@ rhscintr(void *arg)
 		 */
 
 		for (;;) {
-			fd = rumpuser_open(buf, O_RDWR, &error);
+			fd = rumpuser_open(buf, RUMPUSER_OPEN_RDWR, &error);
 			if (fd != -1)
 				break;
 			kpause("ugwait", false, hz/4, NULL);
@@ -627,7 +627,7 @@ rhscintr(void *arg)
 		 */
 
 		for (;;) {
-			fd = rumpuser_open(buf, O_RDWR, &error);
+			fd = rumpuser_open(buf, RUMPUSER_OPEN_RDWR, &error);
 			if (fd == -1)
 				break;
 
@@ -971,6 +971,7 @@ ugenhc_open(struct usbd_pipe *pipe)
 			}
 
 			makeugendevstr(sc->sc_devnum, endpt, buf);
+			/* XXX: theoretically should convert oflags */
 			fd = rumpuser_open(buf, oflags, &error);
 			if (fd == -1) {
 				return USBD_INVAL; /* XXX: no mapping */

Index: src/sys/rump/include/rump/rumpuser.h
diff -u src/sys/rump/include/rump/rumpuser.h:1.72 src/sys/rump/include/rump/rumpuser.h:1.73
--- src/sys/rump/include/rump/rumpuser.h:1.72	Thu Mar 15 02:02:22 2012
+++ src/sys/rump/include/rump/rumpuser.h	Fri Sep 14 16:29:21 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpuser.h,v 1.72 2012/03/15 02:02:22 joerg Exp $	*/
+/*	$NetBSD: rumpuser.h,v 1.73 2012/09/14 16:29:21 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007-2011 Antti Kantee.  All Rights Reserved.
@@ -68,7 +68,20 @@ void *rumpuser_filemmap(int fd, off_t, s
 void  rumpuser_unmap(void *, size_t);
 int   rumpuser_memsync(void *, size_t, int *);
 
+/*
+ * Open modes.  these "accidentally" happen to match the respective
+ * NetBSD bit representations to preserve NetBSD binary compat for
+ * current users.  If you need to add new ones, just pick any numbers.
+ */
+#define RUMPUSER_OPEN_RDONLY	0x000000
+#define RUMPUSER_OPEN_WRONLY	0x000001
+#define RUMPUSER_OPEN_RDWR	0x000002
+#define RUMPUSER_OPEN_ACCMODE	0x000003 /* "yay" */
+#define RUMPUSER_OPEN_CREATE	0x000200
+#define RUMPUSER_OPEN_EXCL	0x000800
+#define RUMPUSER_OPEN_DIRECT	0x080000
 int rumpuser_open(const char *, int, int *);
+
 int rumpuser_ioctl(int, u_long, void *, int *);
 int rumpuser_close(int, int *);
 int rumpuser_fsync(int, int *);

Index: src/sys/rump/librump/rumpvfs/rumpblk.c
diff -u src/sys/rump/librump/rumpvfs/rumpblk.c:1.47 src/sys/rump/librump/rumpvfs/rumpblk.c:1.48
--- src/sys/rump/librump/rumpvfs/rumpblk.c:1.47	Sat Nov 19 22:51:31 2011
+++ src/sys/rump/librump/rumpvfs/rumpblk.c	Fri Sep 14 16:29:21 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpblk.c,v 1.47 2011/11/19 22:51:31 tls Exp $	*/
+/*	$NetBSD: rumpblk.c,v 1.48 2012/09/14 16:29:21 pooka Exp $	*/
 
 /*
  * Copyright (c) 2009 Antti Kantee.  All Rights Reserved.
@@ -52,7 +52,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rumpblk.c,v 1.47 2011/11/19 22:51:31 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rumpblk.c,v 1.48 2012/09/14 16:29:21 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/buf.h>
@@ -504,16 +504,16 @@ backend_open(struct rblkdev *rblk, const
 	int error, fd;
 
 	KASSERT(rblk->rblk_fd == -1);
-	fd = rumpuser_open(path, O_RDWR, &error);
+	fd = rumpuser_open(path, RUMPUSER_OPEN_RDWR, &error);
 	if (error) {
-		fd = rumpuser_open(path, O_RDONLY, &error);
+		fd = rumpuser_open(path, RUMPUSER_OPEN_RDONLY, &error);
 		if (error)
 			return error;
 		rblk->rblk_mode = FREAD;
 
 #ifdef HAS_ODIRECT
 		rblk->rblk_dfd = rumpuser_open(path,
-		    O_RDONLY | O_DIRECT, &error);
+		    RUMPUSER_OPEN_RDONLY | RUMPUSER_OPEN_DIRECT, &error);
 		if (error) {
 			close(fd);
 			return error;
@@ -524,7 +524,7 @@ backend_open(struct rblkdev *rblk, const
 
 #ifdef HAS_ODIRECT
 		rblk->rblk_dfd = rumpuser_open(path,
-		    O_RDWR | O_DIRECT, &error);
+		    RUMPUSER_OPEN_RDWR | RUMPUSER_OPEN_DIRECT, &error);
 		if (error) {
 			close(fd);
 			return error;

Index: src/sys/rump/librump/rumpvfs/rumpfs.c
diff -u src/sys/rump/librump/rumpvfs/rumpfs.c:1.110 src/sys/rump/librump/rumpvfs/rumpfs.c:1.111
--- src/sys/rump/librump/rumpvfs/rumpfs.c:1.110	Fri Mar 30 18:09:12 2012
+++ src/sys/rump/librump/rumpvfs/rumpfs.c	Fri Sep 14 16:29:22 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpfs.c,v 1.110 2012/03/30 18:09:12 njoly Exp $	*/
+/*	$NetBSD: rumpfs.c,v 1.111 2012/09/14 16:29:22 pooka Exp $	*/
 
 /*
  * Copyright (c) 2009, 2010, 2011 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rumpfs.c,v 1.110 2012/03/30 18:09:12 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rumpfs.c,v 1.111 2012/09/14 16:29:22 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -1251,14 +1251,14 @@ rump_vop_open(void *v)
 		if (rn->rn_readfd != -1)
 			return 0;
 		rn->rn_readfd = rumpuser_open(rn->rn_hostpath,
-		    O_RDONLY, &error);
+		    RUMPUSER_OPEN_RDONLY, &error);
 	}
 
 	if (mode & FWRITE) {
 		if (rn->rn_writefd != -1)
 			return 0;
 		rn->rn_writefd = rumpuser_open(rn->rn_hostpath,
-		    O_WRONLY, &error);
+		    RUMPUSER_OPEN_WRONLY, &error);
 	}
 
 	return error;

Index: src/sys/rump/net/lib/libshmif/if_shmem.c
diff -u src/sys/rump/net/lib/libshmif/if_shmem.c:1.44 src/sys/rump/net/lib/libshmif/if_shmem.c:1.45
--- src/sys/rump/net/lib/libshmif/if_shmem.c:1.44	Sat Nov 19 22:51:31 2011
+++ src/sys/rump/net/lib/libshmif/if_shmem.c	Fri Sep 14 16:29:22 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_shmem.c,v 1.44 2011/11/19 22:51:31 tls Exp $	*/
+/*	$NetBSD: if_shmem.c,v 1.45 2012/09/14 16:29:22 pooka Exp $	*/
 
 /*
  * Copyright (c) 2009, 2010 Antti Kantee.  All Rights Reserved.
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_shmem.c,v 1.44 2011/11/19 22:51:31 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_shmem.c,v 1.45 2012/09/14 16:29:22 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -290,7 +290,8 @@ rump_shmif_create(const char *path, int 
 	int memfd = -1; /* XXXgcc */
 
 	if (path) {
-		memfd = rumpuser_open(path, O_RDWR | O_CREAT, &error);
+		memfd = rumpuser_open(path,
+		    RUMPUSER_OPEN_RDWR | RUMPUSER_OPEN_CREATE, &error);
 		if (memfd == -1)
 			return error;
 	}
@@ -470,7 +471,8 @@ shmif_ioctl(struct ifnet *ifp, u_long cm
 			kmem_free(path, ifd->ifd_len);
 			break;
 		}
-		memfd = rumpuser_open(path, O_RDWR | O_CREAT, &rv);
+		memfd = rumpuser_open(path,
+		    RUMPUSER_OPEN_RDWR | RUMPUSER_OPEN_CREATE, &rv);
 		if (memfd == -1) {
 			kmem_free(path, ifd->ifd_len);
 			break;

Index: src/sys/rump/net/lib/libvirtif/if_virt.c
diff -u src/sys/rump/net/lib/libvirtif/if_virt.c:1.26 src/sys/rump/net/lib/libvirtif/if_virt.c:1.27
--- src/sys/rump/net/lib/libvirtif/if_virt.c:1.26	Sat Nov 19 22:51:31 2011
+++ src/sys/rump/net/lib/libvirtif/if_virt.c	Fri Sep 14 16:29:22 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_virt.c,v 1.26 2011/11/19 22:51:31 tls Exp $	*/
+/*	$NetBSD: if_virt.c,v 1.27 2012/09/14 16:29:22 pooka Exp $	*/
 
 /*
  * Copyright (c) 2008 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_virt.c,v 1.26 2011/11/19 22:51:31 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_virt.c,v 1.27 2012/09/14 16:29:22 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/condvar.h>
@@ -97,7 +97,7 @@ rump_virtif_create(int num)
 		return E2BIG;
 
 	snprintf(tapdev, sizeof(tapdev), "/dev/tap%d", num);
-	fd = rumpuser_open(tapdev, O_RDWR, &error);
+	fd = rumpuser_open(tapdev, RUMPUSER_OPEN_RDWR, &error);
 	if (fd == -1) {
 		printf("virtif_create: can't open /dev/tap%d: %d\n",
 		    num, error);

Reply via email to