|
@@ -415,17 +415,13 @@ static enum hrtimer_restart xgbe_tx_timer(struct hrtimer *timer)
|
|
struct xgbe_channel *channel = container_of(timer,
|
|
struct xgbe_channel *channel = container_of(timer,
|
|
struct xgbe_channel,
|
|
struct xgbe_channel,
|
|
tx_timer);
|
|
tx_timer);
|
|
- struct xgbe_ring *ring = channel->tx_ring;
|
|
|
|
struct xgbe_prv_data *pdata = channel->pdata;
|
|
struct xgbe_prv_data *pdata = channel->pdata;
|
|
struct napi_struct *napi;
|
|
struct napi_struct *napi;
|
|
- unsigned long flags;
|
|
|
|
|
|
|
|
DBGPR("-->xgbe_tx_timer\n");
|
|
DBGPR("-->xgbe_tx_timer\n");
|
|
|
|
|
|
napi = (pdata->per_channel_irq) ? &channel->napi : &pdata->napi;
|
|
napi = (pdata->per_channel_irq) ? &channel->napi : &pdata->napi;
|
|
|
|
|
|
- spin_lock_irqsave(&ring->lock, flags);
|
|
|
|
-
|
|
|
|
if (napi_schedule_prep(napi)) {
|
|
if (napi_schedule_prep(napi)) {
|
|
/* Disable Tx and Rx interrupts */
|
|
/* Disable Tx and Rx interrupts */
|
|
if (pdata->per_channel_irq)
|
|
if (pdata->per_channel_irq)
|
|
@@ -439,8 +435,6 @@ static enum hrtimer_restart xgbe_tx_timer(struct hrtimer *timer)
|
|
|
|
|
|
channel->tx_timer_active = 0;
|
|
channel->tx_timer_active = 0;
|
|
|
|
|
|
- spin_unlock_irqrestore(&ring->lock, flags);
|
|
|
|
-
|
|
|
|
DBGPR("<--xgbe_tx_timer\n");
|
|
DBGPR("<--xgbe_tx_timer\n");
|
|
|
|
|
|
return HRTIMER_NORESTART;
|
|
return HRTIMER_NORESTART;
|
|
@@ -1450,7 +1444,6 @@ static int xgbe_xmit(struct sk_buff *skb, struct net_device *netdev)
|
|
struct xgbe_ring *ring;
|
|
struct xgbe_ring *ring;
|
|
struct xgbe_packet_data *packet;
|
|
struct xgbe_packet_data *packet;
|
|
struct netdev_queue *txq;
|
|
struct netdev_queue *txq;
|
|
- unsigned long flags;
|
|
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
DBGPR("-->xgbe_xmit: skb->len = %d\n", skb->len);
|
|
DBGPR("-->xgbe_xmit: skb->len = %d\n", skb->len);
|
|
@@ -1462,8 +1455,6 @@ static int xgbe_xmit(struct sk_buff *skb, struct net_device *netdev)
|
|
|
|
|
|
ret = NETDEV_TX_OK;
|
|
ret = NETDEV_TX_OK;
|
|
|
|
|
|
- spin_lock_irqsave(&ring->lock, flags);
|
|
|
|
-
|
|
|
|
if (skb->len == 0) {
|
|
if (skb->len == 0) {
|
|
netdev_err(netdev, "empty skb received from stack\n");
|
|
netdev_err(netdev, "empty skb received from stack\n");
|
|
dev_kfree_skb_any(skb);
|
|
dev_kfree_skb_any(skb);
|
|
@@ -1510,10 +1501,6 @@ static int xgbe_xmit(struct sk_buff *skb, struct net_device *netdev)
|
|
ret = NETDEV_TX_OK;
|
|
ret = NETDEV_TX_OK;
|
|
|
|
|
|
tx_netdev_return:
|
|
tx_netdev_return:
|
|
- spin_unlock_irqrestore(&ring->lock, flags);
|
|
|
|
-
|
|
|
|
- DBGPR("<--xgbe_xmit\n");
|
|
|
|
-
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1841,7 +1828,6 @@ static int xgbe_tx_poll(struct xgbe_channel *channel)
|
|
struct xgbe_ring_desc *rdesc;
|
|
struct xgbe_ring_desc *rdesc;
|
|
struct net_device *netdev = pdata->netdev;
|
|
struct net_device *netdev = pdata->netdev;
|
|
struct netdev_queue *txq;
|
|
struct netdev_queue *txq;
|
|
- unsigned long flags;
|
|
|
|
int processed = 0;
|
|
int processed = 0;
|
|
unsigned int tx_packets = 0, tx_bytes = 0;
|
|
unsigned int tx_packets = 0, tx_bytes = 0;
|
|
|
|
|
|
@@ -1853,8 +1839,6 @@ static int xgbe_tx_poll(struct xgbe_channel *channel)
|
|
|
|
|
|
txq = netdev_get_tx_queue(netdev, channel->queue_index);
|
|
txq = netdev_get_tx_queue(netdev, channel->queue_index);
|
|
|
|
|
|
- spin_lock_irqsave(&ring->lock, flags);
|
|
|
|
-
|
|
|
|
while ((processed < XGBE_TX_DESC_MAX_PROC) &&
|
|
while ((processed < XGBE_TX_DESC_MAX_PROC) &&
|
|
(ring->dirty != ring->cur)) {
|
|
(ring->dirty != ring->cur)) {
|
|
rdata = XGBE_GET_DESC_DATA(ring, ring->dirty);
|
|
rdata = XGBE_GET_DESC_DATA(ring, ring->dirty);
|
|
@@ -1885,7 +1869,7 @@ static int xgbe_tx_poll(struct xgbe_channel *channel)
|
|
}
|
|
}
|
|
|
|
|
|
if (!processed)
|
|
if (!processed)
|
|
- goto unlock;
|
|
|
|
|
|
+ return 0;
|
|
|
|
|
|
netdev_tx_completed_queue(txq, tx_packets, tx_bytes);
|
|
netdev_tx_completed_queue(txq, tx_packets, tx_bytes);
|
|
|
|
|
|
@@ -1897,9 +1881,6 @@ static int xgbe_tx_poll(struct xgbe_channel *channel)
|
|
|
|
|
|
DBGPR("<--xgbe_tx_poll: processed=%d\n", processed);
|
|
DBGPR("<--xgbe_tx_poll: processed=%d\n", processed);
|
|
|
|
|
|
-unlock:
|
|
|
|
- spin_unlock_irqrestore(&ring->lock, flags);
|
|
|
|
-
|
|
|
|
return processed;
|
|
return processed;
|
|
}
|
|
}
|
|
|
|
|