Skip to content

Commit

Permalink
cxgb4: update supported DCB version
Browse files Browse the repository at this point in the history
- In CXGB4_DCB_STATE_FW_INCOMPLETE state check if the dcb
  version is changed and update the dcb supported version.

- Also, fill the priority code point value for priority
  based flow control.

Signed-off-by: Ganesh Goudar <ganeshgr@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Ganesh Goudar authored and David S. Miller committed Sep 14, 2018
1 parent 992bea8 commit c3ec8bc
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 2 deletions.
27 changes: 27 additions & 0 deletions drivers/net/ethernet/chelsio/cxgb4/cxgb4_dcb.c
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,24 @@ void cxgb4_dcb_reset(struct net_device *dev)
cxgb4_dcb_state_init(dev);
}

/* update the dcb port support, if version is IEEE then set it to
* FW_PORT_DCB_VER_IEEE and if DCB_CAP_DCBX_VER_CEE is already set then
* clear that. and if it is set to CEE then set dcb supported to
* DCB_CAP_DCBX_VER_CEE & if DCB_CAP_DCBX_VER_IEEE is set, clear it
*/
static inline void cxgb4_dcb_update_support(struct port_dcb_info *dcb)
{
if (dcb->dcb_version == FW_PORT_DCB_VER_IEEE) {
if (dcb->supported & DCB_CAP_DCBX_VER_CEE)
dcb->supported &= ~DCB_CAP_DCBX_VER_CEE;
dcb->supported |= DCB_CAP_DCBX_VER_IEEE;
} else if (dcb->dcb_version == FW_PORT_DCB_VER_CEE1D01) {
if (dcb->supported & DCB_CAP_DCBX_VER_IEEE)
dcb->supported &= ~DCB_CAP_DCBX_VER_IEEE;
dcb->supported |= DCB_CAP_DCBX_VER_CEE;
}
}

/* Finite State machine for Data Center Bridging.
*/
void cxgb4_dcb_state_fsm(struct net_device *dev,
Expand Down Expand Up @@ -165,6 +183,15 @@ void cxgb4_dcb_state_fsm(struct net_device *dev,
}

case CXGB4_DCB_STATE_FW_INCOMPLETE: {
if (transition_to != CXGB4_DCB_INPUT_FW_DISABLED) {
/* during this CXGB4_DCB_STATE_FW_INCOMPLETE state,
* check if the dcb version is changed (there can be
* mismatch in default config & the negotiated switch
* configuration at FW, so update the dcb support
* accordingly.
*/
cxgb4_dcb_update_support(dcb);
}
switch (transition_to) {
case CXGB4_DCB_INPUT_FW_ENABLED: {
/* we're alreaady in firmware DCB mode */
Expand Down
6 changes: 4 additions & 2 deletions drivers/net/ethernet/chelsio/cxgb4/l2t.c
Original file line number Diff line number Diff line change
Expand Up @@ -433,10 +433,12 @@ struct l2t_entry *cxgb4_l2t_get(struct l2t_data *d, struct neighbour *neigh,
else
lport = netdev2pinfo(physdev)->lport;

if (is_vlan_dev(neigh->dev))
if (is_vlan_dev(neigh->dev)) {
vlan = vlan_dev_vlan_id(neigh->dev);
else
vlan |= vlan_dev_get_egress_qos_mask(neigh->dev, priority);
} else {
vlan = VLAN_NONE;
}

write_lock_bh(&d->lock);
for (e = d->l2tab[hash].first; e; e = e->next)
Expand Down

0 comments on commit c3ec8bc

Please sign in to comment.