PERFORCE change 110339 for review

Warner Losh imp at FreeBSD.org
Tue Nov 21 16:21:17 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=110339

Change 110339 by imp at 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);
 		}


More information about the p4-projects mailing list