[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
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191786
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
lagg.
- 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