Skip to content

Commit 030c988

Browse files
chelsiocudbgdavem330
authored andcommitted
cxgb4: move PTP lock and unlock to caller in Tx path
Check for whether PTP is enabled or not at the caller and perform locking/unlocking at the caller. Fixes following sparse warning: sge.c:1641:26: warning: context imbalance in 'cxgb4_eth_xmit' - different lock contexts for basic block Fixes: a456950 ("cxgb4: time stamping interface for PTP") Signed-off-by: Rahul Lakkireddy <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 11d8cd5 commit 030c988

File tree

1 file changed

+11
-12
lines changed
  • drivers/net/ethernet/chelsio/cxgb4

1 file changed

+11
-12
lines changed

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

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1425,12 +1425,10 @@ static netdev_tx_t cxgb4_eth_xmit(struct sk_buff *skb, struct net_device *dev)
14251425

14261426
qidx = skb_get_queue_mapping(skb);
14271427
if (ptp_enabled) {
1428-
spin_lock(&adap->ptp_lock);
14291428
if (!(adap->ptp_tx_skb)) {
14301429
skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
14311430
adap->ptp_tx_skb = skb_get(skb);
14321431
} else {
1433-
spin_unlock(&adap->ptp_lock);
14341432
goto out_free;
14351433
}
14361434
q = &adap->sge.ptptxq;
@@ -1444,11 +1442,8 @@ static netdev_tx_t cxgb4_eth_xmit(struct sk_buff *skb, struct net_device *dev)
14441442

14451443
#ifdef CONFIG_CHELSIO_T4_FCOE
14461444
ret = cxgb_fcoe_offload(skb, adap, pi, &cntrl);
1447-
if (unlikely(ret == -ENOTSUPP)) {
1448-
if (ptp_enabled)
1449-
spin_unlock(&adap->ptp_lock);
1445+
if (unlikely(ret == -EOPNOTSUPP))
14501446
goto out_free;
1451-
}
14521447
#endif /* CONFIG_CHELSIO_T4_FCOE */
14531448

14541449
chip_ver = CHELSIO_CHIP_VERSION(adap->params.chip);
@@ -1461,8 +1456,6 @@ static netdev_tx_t cxgb4_eth_xmit(struct sk_buff *skb, struct net_device *dev)
14611456
dev_err(adap->pdev_dev,
14621457
"%s: Tx ring %u full while queue awake!\n",
14631458
dev->name, qidx);
1464-
if (ptp_enabled)
1465-
spin_unlock(&adap->ptp_lock);
14661459
return NETDEV_TX_BUSY;
14671460
}
14681461

@@ -1481,8 +1474,6 @@ static netdev_tx_t cxgb4_eth_xmit(struct sk_buff *skb, struct net_device *dev)
14811474
unlikely(cxgb4_map_skb(adap->pdev_dev, skb, sgl_sdesc->addr) < 0)) {
14821475
memset(sgl_sdesc->addr, 0, sizeof(sgl_sdesc->addr));
14831476
q->mapping_err++;
1484-
if (ptp_enabled)
1485-
spin_unlock(&adap->ptp_lock);
14861477
goto out_free;
14871478
}
14881479

@@ -1630,8 +1621,6 @@ static netdev_tx_t cxgb4_eth_xmit(struct sk_buff *skb, struct net_device *dev)
16301621
txq_advance(&q->q, ndesc);
16311622

16321623
cxgb4_ring_tx_db(adap, &q->q, ndesc);
1633-
if (ptp_enabled)
1634-
spin_unlock(&adap->ptp_lock);
16351624
return NETDEV_TX_OK;
16361625

16371626
out_free:
@@ -2377,6 +2366,16 @@ netdev_tx_t t4_start_xmit(struct sk_buff *skb, struct net_device *dev)
23772366
if (unlikely(qid >= pi->nqsets))
23782367
return cxgb4_ethofld_xmit(skb, dev);
23792368

2369+
if (is_ptp_enabled(skb, dev)) {
2370+
struct adapter *adap = netdev2adap(dev);
2371+
netdev_tx_t ret;
2372+
2373+
spin_lock(&adap->ptp_lock);
2374+
ret = cxgb4_eth_xmit(skb, dev);
2375+
spin_unlock(&adap->ptp_lock);
2376+
return ret;
2377+
}
2378+
23802379
return cxgb4_eth_xmit(skb, dev);
23812380
}
23822381

0 commit comments

Comments
 (0)