msk msk0 watchdog timeout freeze hang lock stop problem

Yonghyeon PYUN pyunyh at
Thu Apr 16 06:21:08 UTC 2015

On Wed, Apr 15, 2015 at 09:52:09PM +0000, Gareth Wyn Roberts wrote:
> I've inserted code to print some values which show the differences between specifying 4096 or 8192 for MSK_STAT_ALIGN.  In both cases the status buffer has length 0x4000 (8x2048=16K) but the alignments are different as expected, respectively start addresses 0x5c3b000 or 0xbdc2c000.
> The following values were output from functions msk_status_dma_alloc(), msk_dmamap_cb() and msk_handle_events().
> The "Break #n" refer to breaks in msk_handle_events(). "#1" occurs if ((control & HW_OWNER) == 0), "#5" is OP_RXSTAT and "#6" is OP_TXINDEXLE.
> The first output is for MSK_STAT_ALIGN=8192.  It continues normally.  Although not shown here, it reaches cons=2047 then cons=0 as expected.
> The second output is for MSK_STAT_ALIGN=4096.  Although there can be isolated occurences of "Break #1" (e.g. cons=196) (?are these to be expected?),  it continues normally until cons=512. At this point it continually invokes the "#1" block because the msk_control from msk_stat_ring[512] is always zero and the network hangs immediately. This suggests the Yukon Ultra 2 88E8057 can't access the next 4096 memory block, but why not?

Yes, it seems the status LE block is not updated at all for
MSK_STAT_ALIGN == 4096 and some elements of the status block looks
suspicious(put index increases but the value in the location is 0).
I vaguely guess this indicates there are DMA alignment and/or DMA
boundary issues.
The maximum number of elements of the status block is 4096 so the
maximum size of the status block is 32KB.  For i386, msk(4) uses
8KB status block(1024 elements).  For 64bit architectures, the
block size is increased to 16KB(2048 elements).
Probably the safe alignment value for the status block would be
32K.  This looks excessive value to me but it shall avoid guessing
DMA boundary issue.

> Please let me know if any further information would be helpful.

Thanks a lot. I've attached a diff which sets the alignment of
TX/RX ring and status block to 32KB.  Not sure whether this also
addresses other msk(4) related watchdog timeouts.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: msk.align.diff
Type: text/x-diff
Size: 693 bytes
Desc: not available
URL: <>

More information about the freebsd-stable mailing list