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