cvs commit: src/sys/dev/ath if_ath.c src/sys/dev/awi awi.c src/sys/dev/bfe if_bfe.c src/sys/dev/bge if_bge.c src/sys/dev/ed if_ed.c src/sys/dev/em if_em.c src/sys/dev/ex if_ex.c src/sys/dev/fe if_fe.c src/sys/dev/fxp if_fxp.c src/sys/dev/gem ...

Robert Watson rwatson at FreeBSD.org
Sun Jan 29 13:01:21 PST 2006


On Sun, 29 Jan 2006, Julian Elischer wrote:

>>   Note that with these changes, these drivers now depend on locking the 
>> global
>>  if_addr_mtx, so binary modules of these drivers will not work on 5.4 or
>>  earlier releases.
>
> Is the converse true?
>
> i.e. can older binaries (e.g. from 5.4) work on 5.5?
>
> this is a "must"

Yes.  The "problem" is that modules using the new locking will reference a new 
global symbol, if_addr_mtx.  Old modules will continue to load fine, and 
continue to not have locking around their manipulation of the multicast 
address lists, so will not work worse than they did before.  New modules build 
from our kernel tree will have the new symbol reference -- vendor drivers that 
don't have the locking but are built on new systems will continue to work fine 
on old kernels, but it is desirable for vendors to add the locking to avoid 
race conditions in multicast address management, which can be observed in the 
wild when using multicast moderately heavily.

The version of multicast address locking merged to RELENG_5 by Ed is actually 
a fairly modified version of the code I originally committed to HEAD -- I 
added an if_addr_mtx field to struct ifnet, which is used for synchronizing 
per-ifnet address lists.  We didn't want to modify struct ifnet in RELENG_5, 
so he added a global mutex which is accessed by the macros instead, giving 
driver source compatibility with RELENG_6 and HEAD, but avoiding changes to 
struct ifnet.

I.e., I think all is fine.

Robert N M Watson


More information about the cvs-src mailing list