Nicolas Droux wrote:
> Andrew,
>
> Thanks for the additional info. We'd like to verify that interrupts are
> getting disabled from interrupt context itself. If you don't mind, could
> you gather an aggregation of the callers of mac_hwring_disable_intr()
> during one of your runs? You should be able to do this with "dtrace -n
> fbt:: mac_hwring_disable_intr:entry'{...@[stack()] = count()}'"
Yes, they're all coming from the interrupt context, via my rx
interrupt handler:
dtrace: description 'fbt::mac_hwring_disable_intr:entry' matched 1 probe
^C
mac`mac_rx_srs_drain+0x359
mac`mac_rx_srs_process+0x1db
mac`mac_rx+0x94
mac`mac_rx_ring+0x4c
myri10ge`myri10ge_intr_rx+0x70
myri10ge`myri10ge_intr+0xa2
unix`av_dispatch_autovect+0x7c
unix`dispatch_hardint+0x33
unix`switch_sp_and_call+0x13
66481
FWIW, I was able to reproduce the problem on another machine
running build 111. I BFU'ed to 112, 113, and 114, and I see
the same thing in each build.
I think that I must be doing something wrong in my driver.
Is there some sort of counter or dtrace script that one
use to track down out-of-order packets?
I'm not sure if this is helpful, but the 2 stacks I see for
the increment of mib:::tcpInDataUnorderSegs are:
# dtrace -n mib:::tcpInDataUnorderSegs'{...@[stack()] = count()}'
dtrace: description 'mib:::tcpInDataUnorderSegs' matched 1 probe
^C
ip`tcp_rput_data+0xdd0
ip`squeue_enter+0x330
ip`ip_input+0xc17
mac`mac_rx_soft_ring_drain+0xdf
mac`mac_soft_ring_worker+0x111
unix`thread_start+0x8
1710
ip`tcp_rput_data+0xdd0
ip`squeue_drain+0x179
ip`squeue_enter+0x3f4
ip`ip_input+0xc17
mac`mac_rx_soft_ring_drain+0xdf
mac`mac_soft_ring_worker+0x111
unix`thread_start+0x8
195335
Thanks,
Drew