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);