On 17.01-22:14, [EMAIL PROTECTED] wrote: > need an education here. created a patchset for this problem and i'm > about to test that against 4.2 GENERIC and have a couple of questions > > 1. are the results generally intersting? should i post > them somewhere (assuming tests go right) > > assuming above is yes > > 2. had to manually add the line from r1.94 to 'mbuf.h' to skip the > other changes in r1.93. is there a "cvs" way to do that or > should it be manual and i assume there's nothing for me relevant to > branching etc as that is only relevant to the repository/commiter, > right? > > 3. m_gethdr duplicates the new m_inithdr code which seems > ... not great ... would it be better to (a) call the m_inithdr > function from m_gethdr (b) change it to a macro (c) change > the m_inithdr to inline and call it from m_gethdr (no idea > whether the function would get inlined anyway).
i guess the answer to '1' in no but i'm posting this for anyone who may find it useful. it's working nicely for me. comments welcome. nb: this should patch against 4.2 Index: sys/sys/mbuf.h =================================================================== RCS file: /cvs/src/sys/sys/mbuf.h,v retrieving revision 1.92 diff -r1.92 mbuf.h 220a221,254 > * mbuf initialisation macros: > * > * MINITDATA(struct mbuf *m, int type, u_short flags, caddr_t data) > * initialize mbuf internal data (pulled in by MINIT and MINITHDR) > * > * MINIT(struct mbuf *m, int type) > * initialize an mbuf > * > * MINITHDR(struct mbuf *m, int type) > * initialize mbuf with packet header > */ > #define MINITDATA(m, type, flags, data) \ > (m)->m_type = (type); \ > (m)->m_flags = (flags); \ > (m)->m_data = (data); \ > (m)->m_next = (struct mbuf *)NULL; \ > (m)->m_nextpkt = (struct mbuf *)NULL > > #define MINIT(m, type) \ > MINITDATA((m), (type), 0, (m)->m_dat); > > #define MINITHDR(m, type) \ > MINITDATA((m), (type), M_PKTHDR, (m)->m_pktdat); \ > (m)->m_pkthdr.rcvif = NULL; \ > SLIST_INIT(&(m)->m_pkthdr.tags); \ > (m)->m_pkthdr.csum_flags = 0; \ > (m)->m_pkthdr.pf.hdr = NULL; \ > (m)->m_pkthdr.pf.rtableid = 0; \ > (m)->m_pkthdr.pf.qid = 0; \ > (m)->m_pkthdr.pf.tag = 0; \ > (m)->m_pkthdr.pf.flags = 0; \ > (m)->m_pkthdr.pf.routed = 0 > > /* Index: sys/kern/uipc_mbuf.c =================================================================== RCS file: /cvs/src/sys/kern/uipc_mbuf.c,v retrieving revision 1.85 diff -r1.85 uipc_mbuf.c 167d166 < m->m_type = type; 169,172c168 < m->m_next = (struct mbuf *)NULL; < m->m_nextpkt = (struct mbuf *)NULL; < m->m_data = m->m_dat; < m->m_flags = 0; --- > MINIT(m, type); 187d182 < m->m_type = type; 189,201c184 < m->m_next = (struct mbuf *)NULL; < m->m_nextpkt = (struct mbuf *)NULL; < m->m_data = m->m_pktdat; < m->m_flags = M_PKTHDR; < m->m_pkthdr.rcvif = NULL; < SLIST_INIT(&m->m_pkthdr.tags); < m->m_pkthdr.csum_flags = 0; < m->m_pkthdr.pf.hdr = NULL; < m->m_pkthdr.pf.rtableid = 0; < m->m_pkthdr.pf.qid = 0; < m->m_pkthdr.pf.tag = 0; < m->m_pkthdr.pf.flags = 0; < m->m_pkthdr.pf.routed = 0; --- > MINITHDR(m, type); Index: sys/dev/ic/elink3.c =================================================================== RCS file: /cvs/src/sys/dev/ic/elink3.c,v retrieving revision 1.69 diff -r1.69 elink3.c 1390c1390 < /* Convert one of our saved mbuf's. */ --- > /* Convert one of our saved mbuf's ... */ 1392,1395c1392,1393 < m->m_data = m->m_pktdat; < m->m_flags = M_PKTHDR; < m_tag_init(m); < m->m_pkthdr.csum_flags = 0; --- > /* ... and reset the buffer info */ > MINITHDR(m, m->m_type);