lagg failover not automatic

Jacob Owens jacoblowens at gmail.com
Fri Aug 29 03:18:30 UTC 2008


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





On Tue, Aug 12, 2008 at 11:48 PM, Pyun YongHyeon <pyunyh at gmail.com> wrote:
>
> On Tue, Aug 12, 2008 at 08:49:20AM -0500, Jacob Owens wrote:
>  > pyun,
>  >
>  > Thank you! I am not familiar with patching freebsd. i tried:
>  >
>  > # patch < amphy.diff
>  >
>  > then it asked me to pick a file.i entered: /sys/dev/mii/amphy.c
>  >
>  > then i recompiled my kernel. I don't know if the patch was applied
>  > correctly. either way, it didn't change anything.
>  >
>
> Thanks for testing! I've checked dc(4) and link state checking code
> in the driver looks questionable. So I made a patch but I don't
> know whether it helps or not. The patch can even break establishing
> link so you should be very careful before applying the patch and
> should not apply the patch if you have no physical acesss to the
> hardware. Would you give it a try?
>
> Note, I'm not familiar with dc(4) and dc(4) supports too many
> variants. It seems that each controller needs different workaround
> to overcome its hardware limitation. Link state handling seems to
> be one of reason why dc(4) didn't periodically invoke link state
> check clock. I would be on vacation from Aug 14 for a week so don't
> expect quick reply.
>
> # You can apply the patch with the following command.
> 1. save attached patch to /tmp
> 2. #cd /usr/src
> 3. #patch -p0 < /tmp/dc.patch
> 4. rebuild/install kernel and reboot.
>
> --
> Regards,
> Pyun YongHyeon


More information about the freebsd-net mailing list