Date: Fri, 28 Nov 2008 16:42:00 +0000 (UTC) From: Doug Rabson <dfr@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r185396 - user/dfr/xenhvm/6/sys/xen/xenbus Message-ID: <200811281642.mASGg0pv024184@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dfr Date: Fri Nov 28 16:42:00 2008 New Revision: 185396 URL: http://svn.freebsd.org/changeset/base/185396 Log: Add Xen HVM support. Make the write path to the device actually work. Modified: user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_dev.c Modified: user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_dev.c ============================================================================== --- user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_dev.c Fri Nov 28 16:40:59 2008 (r185395) +++ user/dfr/xenhvm/6/sys/xen/xenbus/xenbus_dev.c Fri Nov 28 16:42:00 2008 (r185396) @@ -124,21 +124,22 @@ static void queue_reply(struct xenbus_de static int xenbus_dev_write(struct cdev *dev, struct uio *uio, int ioflag) { - int err = 0; + int error; struct xenbus_dev_data *u = dev->si_drv1; struct xenbus_dev_transaction *trans; void *reply; - int len = uio->uio_iov[0].iov_len; + int len = uio->uio_resid; if ((len + u->len) > sizeof(u->u.buffer)) return EINVAL; - if (copyin(u->u.buffer + u->len, uio->uio_iov[0].iov_base, len) != 0) - return EFAULT; + error = uiomove(u->u.buffer + u->len, len, uio); + if (error) + return (error); u->len += len; if (u->len < (sizeof(u->u.msg) + u->u.msg.len)) - return len; + return (0); switch (u->u.msg.type) { case XS_TRANSACTION_START: @@ -154,7 +155,7 @@ xenbus_dev_write(struct cdev *dev, struc case XS_SET_PERMS: reply = xenbus_dev_request_and_reply(&u->u.msg); if (IS_ERR(reply)) { - err = PTR_ERR(reply); + error = PTR_ERR(reply); } else { if (u->u.msg.type == XS_TRANSACTION_START) { trans = kmalloc(sizeof(*trans), GFP_KERNEL); @@ -179,23 +180,21 @@ xenbus_dev_write(struct cdev *dev, struc break; default: - err = EINVAL; + error = EINVAL; break; } - if (err == 0) { + if (error == 0) u->len = 0; - err = len; - } - return err; + return (error); } static int xenbus_dev_open(struct cdev *dev, int oflags, int devtype, struct thread *td) { struct xenbus_dev_data *u; - if (xen_start_info->store_evtchn == 0) + if (xen_store_evtchn == 0) return ENOENT; #if 0 /* XXX figure out if equiv needed */ nonseekable_open(inode, filp); @@ -239,7 +238,7 @@ static struct cdevsw xenbus_dev_cdevsw = static int xenbus_dev_sysinit(void) { - make_dev(&xenbus_dev_cdevsw, 0, UID_ROOT, GID_WHEEL, 0400, "xenbus"); + make_dev(&xenbus_dev_cdevsw, 0, UID_ROOT, GID_WHEEL, 0400, "xen/xenbus"); return 0; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200811281642.mASGg0pv024184>