• Arjun Vynipadath's avatar
    cxgb4/cxgb4vf: Notify link changes to OS-dependent code · e2f4f4e9
    Arjun Vynipadath authored
    We have a confusion of two different abstractions in the Common
    Code:  Physical Link (Port) and Logical Network Interface (Virtual
    Interface), and we haven't been properly managing the state of the
    intersection of those two abstractions.
    On the one hand we have the Physical state of the Link -- up or down --
    and on the other we have the logical state of the VI, enabled or not.
    {ethN} refers to both the Physical and Logical State. In this case,
    ifconfig only affects/interrogates the Logical State of a VI,
    and ethtool only deals with the Physical State. And these are different.
    
    So, just because we disable the VI, we don't really want to change the
    Physical Link Up/Down state.  Thus, the previous hack to set
    "lc->link_ok = 0" when we disable a VI is completely incorrect.
    
    Where we get into trouble is where the Physical Link State and the
    Logical VI State cross swords.  And that happens in
    t4_handle_get_port_info() where we need to manage/safe the Physical
    Link State, but we also need to know when the Logical VI State has
    changed and pass that back up to the OS-dependent Driver routine
    t4_os_link_changed() which is concerned about the Logical Interface.
    
    So we enable a VI and that causes Firmware to send us a new Port
    Information message, but if none of the Physical Link State
    particulars have changed, we don't call t4_os_link_changed().
    
    This fix uses the existing OS Contract APIs for the Common Code to
    inform the OS-dependent portion of the Host Driver when the "Link" (really
    Logical Network Interface) is "up" or "down". A new API
    t4_enable_pi_params() is added which calls t4_enable_vi_params() and,
    if that is successful, then calls back to the OS Contract API
    t4_os_link_changed() notifying the OS-dependent layer of the
    potential Link State change.
    
    Original Work by : Casey Leedom <leedom@chelsio.com>
    Signed-off-by: default avatarSantosh Rastapur <santosh@chelsio.com>
    Signed-off-by: default avatarArjun Vynipadath <arjun@chelsio.com>
    Signed-off-by: default avatarGanesh Goudar <ganeshgr@chelsio.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    e2f4f4e9
cxgb4vf_main.c 92.9 KB