[Bug 191786] bce link state changes to same state are ignored by lagg

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Mon Jul 14 12:18:24 UTC 2014


vegeta at tuxpowered.net changed:

           What    |Removed                     |Added
                 CC|                            |vegeta at tuxpowered.net

--- Comment #2 from vegeta at tuxpowered.net ---
Comment on attachment 144650
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=144650
Check for proper phy messages, never check phy status in bce_tick()

I've checked what Linux bce driver does and what the NIC really sends. This
patch changes the following things:

- Remove handling of PHY state from bce_tick() as this function might catch
some not fully "stable" state changes (like IFM_ETHER|IFM_NONE) and set
interface up before link reaches full link state
(IFM_ETHER|IFM_FDX|IFM_1000_T|rxpause|txpause) making the link unusable for

- sc->status_block->status_attn_bits(_ack) are not really link status. Those
bits can change from down to up and then from down to up again without going
from up to down. Call if_link_state_change() only on changes of sc->bce_link_up
which is set only via bce_ifmedia_sts_rphy().

- Distinguish between STATUS_ATTN_BITS_LINK_STATE and
STATUS_ATTN_BITS_TIMER_ABORT. Timer abort messages are in fact sent even if
only link state is subscribed for. The old code would then put the link up with
IFM_ETHER|IFM_NONE state making the link unusable in lagg.

- Sent bce_pulse when on STATUS_ATTN_BITS_TIMER_ABORT with event_code ==
BCE_FW_EVT_CODE_SW_TIMER_EXPIRE_EVENT and also on normal remote PHY events.
Without this a message "Warning: bootcode thinks driver is absent." was seen on
system boot.

You are receiving this mail because:
You are the assignee for the bug.

More information about the freebsd-bugs mailing list