Now
MAIN commitmail json YAML
src/sys/net/if.c@1.358
/
diff
/
nxr@1.358
src/sys/net/if.h@1.227 / diff / nxr@1.227
src/sys/net/if_arcsubr.c@1.74 / diff / nxr@1.74
src/sys/net/if_atmsubr.c@1.60 / diff / nxr@1.60
src/sys/net/if_ecosubr.c@1.49 / diff / nxr@1.49
src/sys/net/if_ethersubr.c@1.228 / diff / nxr@1.228
src/sys/net/if_fddisubr.c@1.102 / diff / nxr@1.102
src/sys/net/if_ieee1394subr.c@1.58 / diff / nxr@1.58
src/sys/net/if_mpls.c@1.28 / diff / nxr@1.28
src/sys/net/if_pppoe.c@1.118 / diff / nxr@1.118
src/sys/net/if_spppsubr.c@1.155 / diff / nxr@1.155
src/sys/net/if_tokensubr.c@1.78 / diff / nxr@1.78
src/sys/net/rtsock.c@1.197 / diff / nxr@1.197
src/sys/netatalk/ddp_input.c@1.28 / diff / nxr@1.28
src/sys/netatalk/ddp_usrreq.c@1.69 / diff / nxr@1.69
src/sys/netinet/if_arp.c@1.228 / diff / nxr@1.228
src/sys/netmpls/mpls_proto.c@1.30 / diff / nxr@1.30
src/sys/netnatm/natm.c@1.53 / diff / nxr@1.53
src/sys/netnatm/natm_proto.c@1.17 / diff / nxr@1.17
src/sys/net/if.h@1.227 / diff / nxr@1.227
src/sys/net/if_arcsubr.c@1.74 / diff / nxr@1.74
src/sys/net/if_atmsubr.c@1.60 / diff / nxr@1.60
src/sys/net/if_ecosubr.c@1.49 / diff / nxr@1.49
src/sys/net/if_ethersubr.c@1.228 / diff / nxr@1.228
src/sys/net/if_fddisubr.c@1.102 / diff / nxr@1.102
src/sys/net/if_ieee1394subr.c@1.58 / diff / nxr@1.58
src/sys/net/if_mpls.c@1.28 / diff / nxr@1.28
src/sys/net/if_pppoe.c@1.118 / diff / nxr@1.118
src/sys/net/if_spppsubr.c@1.155 / diff / nxr@1.155
src/sys/net/if_tokensubr.c@1.78 / diff / nxr@1.78
src/sys/net/rtsock.c@1.197 / diff / nxr@1.197
src/sys/netatalk/ddp_input.c@1.28 / diff / nxr@1.28
src/sys/netatalk/ddp_usrreq.c@1.69 / diff / nxr@1.69
src/sys/netinet/if_arp.c@1.228 / diff / nxr@1.228
src/sys/netmpls/mpls_proto.c@1.30 / diff / nxr@1.30
src/sys/netnatm/natm.c@1.53 / diff / nxr@1.53
src/sys/netnatm/natm_proto.c@1.17 / diff / nxr@1.17
Fix race condition on ifqueue used by traditional netisr
If a underlying network device driver supports MSI/MSI-X, RX interrupts
can be delivered to arbitrary CPUs. This means that Layer 2 subroutines
such as ether_input (softint) and subsequent Layer 3 subroutines (softint)
which are called via traditional netisr can be dispatched on an arbitrary
CPU. Layer 2 subroutines now run without any locks (expected) and so a
Layer 2 subroutine and a Layer 3 subroutine can run in parallel.
There is a shared data between a Layer 2 routine and a Layer 3 routine,
that is ifqueue and IF_ENQUEUE (from L2) and IF_DEQUEUE (from L3) on it
are racy now.
To fix the race condition, use ifqueue#ifq_lock to protect ifqueue
instead of splnet that is meaningless now.
The same race condition exists in route_intr. Fix it as well.
Reviewed by knakahara@
If a underlying network device driver supports MSI/MSI-X, RX interrupts
can be delivered to arbitrary CPUs. This means that Layer 2 subroutines
such as ether_input (softint) and subsequent Layer 3 subroutines (softint)
which are called via traditional netisr can be dispatched on an arbitrary
CPU. Layer 2 subroutines now run without any locks (expected) and so a
Layer 2 subroutine and a Layer 3 subroutine can run in parallel.
There is a shared data between a Layer 2 routine and a Layer 3 routine,
that is ifqueue and IF_ENQUEUE (from L2) and IF_DEQUEUE (from L3) on it
are racy now.
To fix the race condition, use ifqueue#ifq_lock to protect ifqueue
instead of splnet that is meaningless now.
The same race condition exists in route_intr. Fix it as well.
Reviewed by knakahara@