[openib-general] [PATCH] mthca: mthca_map_cmd off by one

Roland Dreier rolandd at cisco.com
Mon Sep 26 09:34:37 PDT 2005


Yes, good catch, but I think the fix is not quite right.  When we fill
up the table, we'll set nent = 0, and then do ++nent at the end of the
loop.  So the second time around we'll start with nent = 1.

Something like this is better, right?

--- linux-kernel/infiniband/hw/mthca/mthca_cmd.c	(revision 3544)
+++ linux-kernel/infiniband/hw/mthca/mthca_cmd.c	(working copy)
@@ -605,7 +605,7 @@ static int mthca_map_cmd(struct mthca_de
 			err = -EINVAL;
 			goto out;
 		}
-		for (i = 0; i < mthca_icm_size(&iter) / (1 << lg); ++i, ++nent) {
+		for (i = 0; i < mthca_icm_size(&iter) / (1 << lg); ++i) {
 			if (virt != -1) {
 				pages[nent * 2] = cpu_to_be64(virt);
 				virt += 1 << lg;
@@ -616,7 +616,7 @@ static int mthca_map_cmd(struct mthca_de
 			ts += 1 << (lg - 10);
 			++tc;
 
-			if (nent == MTHCA_MAILBOX_SIZE / 16) {
+			if (++nent == MTHCA_MAILBOX_SIZE / 16) {
 				err = mthca_cmd(dev, mailbox->dma, nent, 0, op,
 						CMD_TIME_CLASS_B, status);
 				if (err || *status)



More information about the general mailing list