From owner-p4-projects@FreeBSD.ORG Tue Nov 21 16:21:17 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6349216B523; Tue, 21 Nov 2006 16:21:17 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 1FF2716B460 for ; Tue, 21 Nov 2006 16:21:17 +0000 (UTC) (envelope-from imp@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.FreeBSD.org (Postfix) with ESMTP id 9F15043D6D for ; Tue, 21 Nov 2006 16:19:40 +0000 (GMT) (envelope-from imp@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id kALGJdal046200 for ; Tue, 21 Nov 2006 16:19:39 GMT (envelope-from imp@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id kALGJcB2046197 for perforce@freebsd.org; Tue, 21 Nov 2006 16:19:38 GMT (envelope-from imp@freebsd.org) Date: Tue, 21 Nov 2006 16:19:38 GMT Message-Id: <200611211619.kALGJcB2046197@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to imp@freebsd.org using -f From: Warner Losh To: Perforce Change Reviews Cc: Subject: PERFORCE change 110339 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Nov 2006 16:21:17 -0000 http://perforce.freebsd.org/chv.cgi?CH=110339 Change 110339 by imp@imp_lighthouse on 2006/11/21 15:29:12 oops, on read copyout, not write. Affected files ... .. //depot/projects/arm/src/sys/dev/iicbus/iic.c#7 edit Differences ... ==== //depot/projects/arm/src/sys/dev/iicbus/iic.c#7 (text+ko) ==== @@ -246,13 +246,15 @@ char *buf = NULL; void **usrbufs = NULL; - if (!sc) - return (EINVAL); + if (!sc) { printf("iic einval\n"); + return (EINVAL); } if ((error = iicbus_request_bus(device_get_parent(iicdev), iicdev, (flags & O_NONBLOCK) ? IIC_DONTWAIT : - (IIC_WAIT | IIC_INTR)))) + (IIC_WAIT | IIC_INTR)))) { + printf("bus request failed %d\n", error); return (error); + } switch (cmd) { case I2CSTART: @@ -310,18 +312,12 @@ case I2CRDWR: buf = malloc(sizeof(*d->msgs) * d->nmsgs, M_TEMP, M_WAITOK); - if (buf == NULL) { - error = ENOMEM; - break; - } usrbufs = malloc(sizeof(void *) * d->nmsgs, M_TEMP, M_ZERO | M_WAITOK); - if (usrbufs == NULL) { - error = ENOMEM; + error = copyin(d->msgs, buf, sizeof(*d->msgs) * d->nmsgs); + if (error) { + printf("copying returns %d\n", error); break; } - error = copyin(d->msgs, buf, sizeof(*d->msgs) * d->nmsgs); - if (error) - break; /* Allocate kernel buffers for userland data, copyin write data */ for (i = 0; i < d->nmsgs; i++) { m = &((struct iic_msg *)buf)[i]; @@ -331,10 +327,11 @@ copyin(usrbufs[i], m->buf, m->len); } error = iicbus_transfer(parent, (struct iic_msg *)buf, d->nmsgs); + printf("transfer returns %d\n", error); /* Copyout all read segments, free up kernel buffers */ for (i = 0; i < d->nmsgs; i++) { m = &((struct iic_msg *)buf)[i]; - if (!(m->flags & IIC_M_RD)) + if (m->flags & IIC_M_RD) copyout(m->buf, usrbufs[i], m->len); free(m->buf, M_TEMP); }