From owner-svn-src-user@FreeBSD.ORG Fri Nov 28 16:42:01 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F33E71065672; Fri, 28 Nov 2008 16:42:00 +0000 (UTC) (envelope-from dfr@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E65638FC0A; Fri, 28 Nov 2008 16:42:00 +0000 (UTC) (envelope-from dfr@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mASGg0EZ024185; Fri, 28 Nov 2008 16:42:00 GMT (envelope-from dfr@svn.freebsd.org) Received: (from dfr@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mASGg0pv024184; Fri, 28 Nov 2008 16:42:00 GMT (envelope-from dfr@svn.freebsd.org) Message-Id: <200811281642.mASGg0pv024184@svn.freebsd.org> From: Doug Rabson Date: Fri, 28 Nov 2008 16:42:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185396 - user/dfr/xenhvm/6/sys/xen/xenbus X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 28 Nov 2008 16:42:01 -0000 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; }