svn commit: r185355 - head/sys/dev/e1000

Ganbold ganbold at micom.mng.net
Wed Nov 26 18:33:14 PST 2008


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


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


More information about the svn-src-all mailing list