NicoElro.Net

OpenBSD, informatique libre, humeurs et coups de coeur,...

Aller au contenu Aller au menu Aller à la recherche

Patch pour le driver re(4) sous OpenBSD

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 :-)

Skype sous OpenBSD, c'est possible !

Des fois, on doit utiliser certains logiciels qu'on aime pas... Voire qui ne sont pas portés sous notre OS favori. Mais pour ça, on a deux choix :

  • opter pour la simplicité, et donc, aller sur un OS le supportant (au hasard, Windows)
  • soit, bidouiller pour le faire fonctionner sur notre OS adoré

Bon, ben moi, pour utiliser Skype sous OpenBSD, j'ai choisi la deuxième solution ! Voici un tutorial qui explique comment faire, vous allez voir, c'est très simple... :-) Bon par contre, pas de conversations audios, mais bon, j'en ai pas l'utilité.