8f4376cb6f
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@ |
||
---|---|---|
.. | ||
aarp.c | ||
aarp.h | ||
at_control.c | ||
at_extern.h | ||
at_print.c | ||
at_proto.c | ||
at_rmx.c | ||
at_var.h | ||
at.h | ||
ddp_input.c | ||
ddp_output.c | ||
ddp_private.h | ||
ddp_usrreq.c | ||
ddp_var.h | ||
ddp.h | ||
files.netatalk | ||
Makefile | ||
phase2.h |