From owner-svn-src-all@FreeBSD.ORG Thu Nov 27 02:18:44 2008 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 001BE106564A; Thu, 27 Nov 2008 02:18:43 +0000 (UTC) (envelope-from jfv@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E83FF8FC18; Thu, 27 Nov 2008 02:18:43 +0000 (UTC) (envelope-from jfv@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 mAR2IhX8072973; Thu, 27 Nov 2008 02:18:43 GMT (envelope-from jfv@svn.freebsd.org) Received: (from jfv@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mAR2Ih2g072971; Thu, 27 Nov 2008 02:18:43 GMT (envelope-from jfv@svn.freebsd.org) Message-Id: <200811270218.mAR2Ih2g072971@svn.freebsd.org> From: Jack F Vogel Date: Thu, 27 Nov 2008 02:18:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185355 - head/sys/dev/e1000 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 27 Nov 2008 02:18:44 -0000 Author: jfv Date: Thu Nov 27 02:18:43 2008 New Revision: 185355 URL: http://svn.freebsd.org/changeset/base/185355 Log: Thanks to the reminder from Ganbold, small fix in the RX failure path for an infinite loop. Problem originally noticed in ixgbe by Jeff Roberson and fixed there. Thanks to everyone involved. Modified: head/sys/dev/e1000/if_igb.c Modified: head/sys/dev/e1000/if_igb.c ============================================================================== --- head/sys/dev/e1000/if_igb.c Thu Nov 27 01:57:23 2008 (r185354) +++ head/sys/dev/e1000/if_igb.c Thu Nov 27 02:18:43 2008 (r185355) @@ -3490,12 +3490,11 @@ igb_setup_receive_ring(struct rx_ring *r return (0); fail: /* - * We need to clean up any buffers allocated so far - * 'j' is the failing index, decrement it to get the - * last success. + * We need to clean up any buffers allocated + * so far, 'j' is the failing index. */ - for (--j; j < 0; j--) { - rxbuf = &rxr->rx_buffers[j]; + for (int i = 0; i < j; i++) { + rxbuf = &rxr->rx_buffers[i]; if (rxbuf->m_head != NULL) { bus_dmamap_sync(rxr->rxtag, rxbuf->map, BUS_DMASYNC_POSTREAD); @@ -3516,9 +3515,9 @@ static int igb_setup_receive_structures(struct adapter *adapter) { struct rx_ring *rxr = adapter->rx_rings; - int i, j; + int j; - for (i = 0; i < adapter->num_rx_queues; i++, rxr++) + for (j = 0; j < adapter->num_rx_queues; j++, rxr++) if (igb_setup_receive_ring(rxr)) goto fail; @@ -3527,14 +3526,13 @@ fail: /* * Free RX buffers allocated so far, we will only handle * the rings that completed, the failing case will have - * cleaned up for itself. The value of 'i' will be the - * failed ring so we must pre-decrement it. + * cleaned up for itself. Clean up til 'j', the failure. */ - rxr = adapter->rx_rings; - for (--i; i > 0; i--, rxr++) { - for (j = 0; j < adapter->num_rx_desc; j++) { + for (int i = 0; i < j; i++) { + rxr = &adapter->rx_rings[i]; + for (int n = 0; n < adapter->num_rx_desc; n++) { struct igb_buffer *rxbuf; - rxbuf = &rxr->rx_buffers[j]; + rxbuf = &rxr->rx_buffers[n]; if (rxbuf->m_head != NULL) { bus_dmamap_sync(rxr->rxtag, rxbuf->map, BUS_DMASYNC_POSTREAD);