Bon, un problème récurrent sur OpenBSD concerne un certain freeze, ayant lieu assez rapidement après le boot si on utilise le driver re(4) (chipset Gigabit Realtek, soit un truc super courant sur les laptops et carte mères récentes...). D'ailleurs, ça en parle pas mal sur bugs@ et tech@.

Certains ont pu corriger le problème en forçant le transit des données en Base100TX, d'autres n'ont même pas ce problème. Enfin, pour ceux ayant ce chipset réseau sur du pcie, là, c'est le freeze systématique. brad@ a pas mal bossé sur le problème, mais ça stagne et il est assez difficile à résoudre. Le problème est apparement dû aux paquets multicasts. markus@ a trouvé un fix à l'arrache, qui est carrément de désactiver le multicast... Oui, c'est crade, mais c'est temporaire, et ça peut permettre d'utiliser cette carte pendant ce temps. Ca ne passera jamais dans le CVS par contre, faut pas déconner, OpenBSD c'est pas Linux :-) (c'est apparement la solution adoptée dans le kernel Linux pour ce chipset, oui, ça fait peur, mais comme d'hab, chut...).

Voici donc le fix pour ceux étant 4.2-current, ça se joue dans sys/dev/ic/re.c :

--- re.c	16 Jan 2008 09:52:34 -0000	1.75
+++ re.c	22 Jan 2008 21:44:56 -0000
 -570,6 +570,7  re_setmulti(struct rl_softc *sc)
   	case RL_HWREV_8101E:
   	case RL_HWREV_8168_SPIN1:
   	case RL_HWREV_8168_SPIN2:
+		hashes1 = hashes0 = 0xffffffff;
   		CSR_WRITE_4(sc, RL_MAR0, swap32(hashes1));
   		
CSR_WRITE_4(sc, RL_MAR4, swap32(hashes0));
    		break;

Enfin, voici le fix pour ceux tournant en 4.2-stable, toujours dans le même fichier :

--- re.c.old    Tue Jan 29 21:28:55 2008
+++ re.c        Sun Feb  3 17:57:11 2008
 -568,6 +568,7  re_setmulti(struct rl_softc *sc)
        if (hwrev == RL_HWREV_8100E_SPIN1 || hwrev == RL_HWREV_8100E_SPIN2 ||
            hwrev == RL_HWREV_8101E || hwrev == RL_HWREV_8168_SPIN1 ||
            hwrev == RL_HWREV_8168_SPIN2) {
+               hashes1 = hashes0 = 0xffffffff;
                CSR_WRITE_4(sc, RL_MAR0, swap32(hashes1));
                CSR_WRITE_4(sc, RL_MAR4, swap32(hashes0));
        } else {

Voilà, en attendant de trouver mieux... D'ailleurs, pour ceux ayant le même problème, n'hésitez pas à poster vos dmesg sur bugs@, ou de envoyer directement markus@ ou brad@. Plus il y aura de monde aidant à pister ce problème, plus vite il sera résolu :-)