Re: if_sk patch to get more info from people with problems

From: Arjan de Vet <devet_at_devet.org>
Date: Wed, 3 Nov 2004 19:28:06 +0100
In article <34cb7c8404110209563fc01498_at_mail.gmail.com> you write:

>Ok, I don't have this hardware, but dumb question:
>
>A (very) quick look at the source reveals that buffers are allocated
>via  sk_rxeof()->sk_newbuf()->sk_jalloc() in the interrupt receive
>function, with the softc lock held in sk_rxeof().
>
>They're freed by the mbuf system via a call to sk_jfree(), but that
>doesn't hold the SK_LOCK. Is this possibly the source of the
>corruption problems? What am I missing?
>This compiles, anyway :-)
>
>--- /tmp/if_sk.c        Tue Nov  2 17:49:26 2004
>+++ if_sk.c     Tue Nov  2 17:52:20 2004
>_at__at_ -1115,12 +1115,14 _at__at_
>        if ((i < 0) || (i >= SK_JSLOTS))
>                panic("sk_jfree: asked to free buffer that we don't manage!");
> 
>+       SK_LOCK(sc_if->sk_softc);
>        entry = SLIST_FIRST(&sc_if->sk_jinuse_listhead);
>        if (entry == NULL)
>                panic("sk_jfree: buffer not in use!");
>        entry->slot = i;
>        SLIST_REMOVE_HEAD(&sc_if->sk_jinuse_listhead, jpool_entries);
>        SLIST_INSERT_HEAD(&sc_if->sk_jfree_listhead, entry, jpool_entries);
>+       SK_UNLOCK(sc_if->sk_softc);
> 
>        return;
> }

Thank you very much! This patch seems to fix the network corruption
problems I have reported in kern/73038. I'll do some more testing,
because sometimes the problems only appear after some time. But for now,
I can use if_sk.c without debug.mpsafenet="0" on 5.3-RC2.

Arjan

-- 
Arjan de Vet, Eindhoven, The Netherlands               <devet_at_devet.org>
URL : http://www.devet.org/                     <Arjan.deVet_at_adv.iae.nl>
Work: http://www.madison-gurkha.com/  (Security, Open Source, Education)
Received on Wed Nov 03 2004 - 17:34:04 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:20 UTC