Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 27 Nov 2008 10:33:11 +0800
From:      Ganbold <ganbold@micom.mng.net>
To:        Jack F Vogel <jfv@FreeBSD.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r185355 - head/sys/dev/e1000
Message-ID:  <492E06E7.7060205@micom.mng.net>
In-Reply-To: <200811270218.mAR2Ih2g072971@svn.freebsd.org>
References:  <200811270218.mAR2Ih2g072971@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Jack F Vogel wrote:
> 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];
>   

Thanks, it was CID: 2232.

Ganbold
>  		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);
> _______________________________________________
> svn-src-all@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/svn-src-all
> To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
>
>
>
>   


-- 
Don't abandon hope. Your Captain Midnight decoder ring arrives tomorrow.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?492E06E7.7060205>