lagg failover not automatic

Marius Strobl marius at alchemy.franken.de
Fri Aug 29 20:55:24 UTC 2008


On Thu, Aug 28, 2008 at 10:18:28PM -0500, Jacob Owens wrote:
> To resolve the issue, Pyun first had my patch amphy.c , then the dc driver.
> The DC patch fixed my issue. Here is what i had to do:
> 
> 1. save attached patch to /tmp
> 2. #cd /usr/src
> 3. #patch -p0 < /tmp/dc.patch
> 4. rebuild/install kernel and reboot. i used instructions from here:
> http://www.freebsdmadeeasy.com/tutorials/freebsd/recompiling-the-kernel-in-freebsd.php
> 
> THANK YOU to Pyun YongHyeon and the freebsd-net group for helping me with
> this issue!!!
> 
> Save the text below and save as dc.patch. (The first line is 'index:
> sys/dev/dc......' ,Last line is ' * When the init.....'
> 
> Index: sys/dev/dc/if_dc.c
> ===================================================================
> --- sys/dev/dc/if_dc.c	(revision 181654)
> +++ sys/dev/dc/if_dc.c	(working copy)
> @@ -2868,6 +2868,12 @@
>  	ifp = sc->dc_ifp;
>  	mii = device_get_softc(sc->dc_miibus);
> 
> +	/*
> +	 * XXX Can cause autonegotiation failure on certain models
> +	 *     as DC21143 overdrive mii_ticks.
> +	 */
> +	mii_tick(mii);
> +
>  	if (sc->dc_flags & DC_REDUCED_MII_POLL) {
>  		if (sc->dc_flags & DC_21143_NWAY) {
>  			r = CSR_READ_4(sc, DC_10BTSTAT);
> @@ -2881,19 +2887,15 @@
>  				sc->dc_link = 0;
>  				mii_mediachg(mii);
>  			}
> -			if (sc->dc_link == 0)
> -				mii_tick(mii);
>  		} else {
>  			r = CSR_READ_4(sc, DC_ISR);
>  			if ((r & DC_ISR_RX_STATE) == DC_RXSTATE_WAIT &&
>  			    sc->dc_cdata.dc_tx_cnt == 0) {
> -				mii_tick(mii);
>  				if (!(mii->mii_media_status & IFM_ACTIVE))
>  					sc->dc_link = 0;
>  			}
>  		}
> -	} else
> -		mii_tick(mii);
> +	}
> 
>  	/*
>  	 * When the init routine completes, we expect to be able to send

For the records, a more appropriate fix (the above patch just
lets dc(4) bypasse the DC_REDUCED_MII_POLL handling completely)
was commited as r182461.

Marius



More information about the freebsd-net mailing list