I have some systems where the bnx driver seems to lose mbuf clusters under heavy load. Looking at the code, I see bnx_tick called by a callout, and it does splnet but does not seem to take the KERNEL_LOCK. It seems like the rule for the rest of the driver is to be at splnet and have the kernel lock, so this seems wrong. Are callouts automatically invoked with the big lock? It seems like they aren't (and shouldn't be) since they can be used in mpsafe code.
Attachment:
pgpRZVY2mnq_r.pgp
Description: PGP signature