Skip to content

Commit 218d48e

Browse files
Hariprasad Shenaidavem330
authored andcommitted
cxgb4: Reset dcb state machine and tx queue prio only if dcb is enabled
When cxgb4 is enabled with CONFIG_CHELSIO_T4_DCB set, VI enable command gets called with DCB enabled. But when we have a back to back setup with DCB enabled on one side and non-DCB on the Peer side. Firmware doesn't send any DCB_L2_CFG, and DCB priority is never set for Tx queue. But driver resets the queue priority and state machine whenever there is a link down, this patch fixes it by adding a check to reset only if cxgb4_dcb_enabled() returns true. Signed-off-by: Hariprasad Shenai <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 5113bfd commit 218d48e

File tree

1 file changed

+20
-18
lines changed

1 file changed

+20
-18
lines changed

drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,22 @@ static void dcb_tx_queue_prio_enable(struct net_device *dev, int enable)
304304
}
305305
#endif /* CONFIG_CHELSIO_T4_DCB */
306306

307+
int cxgb4_dcb_enabled(const struct net_device *dev)
308+
{
309+
#ifdef CONFIG_CHELSIO_T4_DCB
310+
struct port_info *pi = netdev_priv(dev);
311+
312+
if (!pi->dcb.enabled)
313+
return 0;
314+
315+
return ((pi->dcb.state == CXGB4_DCB_STATE_FW_ALLSYNCED) ||
316+
(pi->dcb.state == CXGB4_DCB_STATE_HOST));
317+
#else
318+
return 0;
319+
#endif
320+
}
321+
EXPORT_SYMBOL(cxgb4_dcb_enabled);
322+
307323
void t4_os_link_changed(struct adapter *adapter, int port_id, int link_stat)
308324
{
309325
struct net_device *dev = adapter->port[port_id];
@@ -314,8 +330,10 @@ void t4_os_link_changed(struct adapter *adapter, int port_id, int link_stat)
314330
netif_carrier_on(dev);
315331
else {
316332
#ifdef CONFIG_CHELSIO_T4_DCB
317-
cxgb4_dcb_state_init(dev);
318-
dcb_tx_queue_prio_enable(dev, false);
333+
if (cxgb4_dcb_enabled(dev)) {
334+
cxgb4_dcb_state_init(dev);
335+
dcb_tx_queue_prio_enable(dev, false);
336+
}
319337
#endif /* CONFIG_CHELSIO_T4_DCB */
320338
netif_carrier_off(dev);
321339
}
@@ -494,22 +512,6 @@ static int link_start(struct net_device *dev)
494512
return ret;
495513
}
496514

497-
int cxgb4_dcb_enabled(const struct net_device *dev)
498-
{
499-
#ifdef CONFIG_CHELSIO_T4_DCB
500-
struct port_info *pi = netdev_priv(dev);
501-
502-
if (!pi->dcb.enabled)
503-
return 0;
504-
505-
return ((pi->dcb.state == CXGB4_DCB_STATE_FW_ALLSYNCED) ||
506-
(pi->dcb.state == CXGB4_DCB_STATE_HOST));
507-
#else
508-
return 0;
509-
#endif
510-
}
511-
EXPORT_SYMBOL(cxgb4_dcb_enabled);
512-
513515
#ifdef CONFIG_CHELSIO_T4_DCB
514516
/* Handle a Data Center Bridging update message from the firmware. */
515517
static void dcb_rpl(struct adapter *adap, const struct fw_port_cmd *pcmd)

0 commit comments

Comments
 (0)