Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 300763
b: refs/heads/master
c: 0dbab2f
h: refs/heads/master
i:
  300761: d47a2d0
  300759: f025491
v: v3
  • Loading branch information
Tony Zelenoff authored and David S. Miller committed Apr 15, 2012
1 parent ee9464a commit 4404ef3
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 12 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6294512bbe5288a29f146a3cd12921bda8bce4eb
refs/heads/master: 0dbab2fb1dbb2ca749a0787c784528892ecb76d4
27 changes: 16 additions & 11 deletions trunk/drivers/net/ethernet/atheros/atlx/atl1.c
Original file line number Diff line number Diff line change
Expand Up @@ -2069,12 +2069,13 @@ static int atl1_intr_rx(struct atl1_adapter *adapter, int budget)
return count;
}

static void atl1_intr_tx(struct atl1_adapter *adapter)
static int atl1_intr_tx(struct atl1_adapter *adapter)
{
struct atl1_tpd_ring *tpd_ring = &adapter->tpd_ring;
struct atl1_buffer *buffer_info;
u16 sw_tpd_next_to_clean;
u16 cmb_tpd_next_to_clean;
int count = 0;

sw_tpd_next_to_clean = atomic_read(&tpd_ring->next_to_clean);
cmb_tpd_next_to_clean = le16_to_cpu(adapter->cmb.cmb->tpd_cons_idx);
Expand All @@ -2094,12 +2095,16 @@ static void atl1_intr_tx(struct atl1_adapter *adapter)

if (++sw_tpd_next_to_clean == tpd_ring->count)
sw_tpd_next_to_clean = 0;

count++;
}
atomic_set(&tpd_ring->next_to_clean, sw_tpd_next_to_clean);

if (netif_queue_stopped(adapter->netdev) &&
netif_carrier_ok(adapter->netdev))
netif_wake_queue(adapter->netdev);

return count;
}

static u16 atl1_tpd_avail(struct atl1_tpd_ring *tpd_ring)
Expand Down Expand Up @@ -2441,11 +2446,14 @@ static netdev_tx_t atl1_xmit_frame(struct sk_buff *skb,
return NETDEV_TX_OK;
}

static int atl1_rx_clean(struct napi_struct *napi, int budget)
static int atl1_rings_clean(struct napi_struct *napi, int budget)
{
struct atl1_adapter *adapter = container_of(napi, struct atl1_adapter, napi);
int work_done = atl1_intr_rx(adapter, budget);

if (atl1_intr_tx(adapter))
work_done = budget;

/* Let's come again to process some more packets */
if (work_done >= budget)
return work_done;
Expand All @@ -2456,7 +2464,7 @@ static int atl1_rx_clean(struct napi_struct *napi, int budget)
return work_done;
}

static inline int atl1_sched_rx(struct atl1_adapter* adapter)
static inline int atl1_sched_rings_clean(struct atl1_adapter* adapter)
{
if (likely(napi_schedule_prep(&adapter->napi))) {
__napi_schedule(&adapter->napi);
Expand Down Expand Up @@ -2527,12 +2535,9 @@ static irqreturn_t atl1_intr(int irq, void *data)
atl1_check_for_link(adapter);
}

/* transmit event */
if (status & ISR_CMB_TX)
atl1_intr_tx(adapter);

/* rx event */
if (status & ISR_CMB_RX && atl1_sched_rx(adapter))
/* transmit or receive event */
if (status & (ISR_CMB_TX | ISR_CMB_RX) &&
atl1_sched_rings_clean(adapter))
/* Go away with INTs disabled */
return IRQ_HANDLED;

Expand All @@ -2545,7 +2550,7 @@ static irqreturn_t atl1_intr(int irq, void *data)
&adapter->pdev->dev,
"rx exception, ISR = 0x%x\n",
status);
if (atl1_sched_rx(adapter))
if (atl1_sched_rings_clean(adapter))
return IRQ_HANDLED;
}

Expand Down Expand Up @@ -3005,7 +3010,7 @@ static int __devinit atl1_probe(struct pci_dev *pdev,

netdev->netdev_ops = &atl1_netdev_ops;
netdev->watchdog_timeo = 5 * HZ;
netif_napi_add(netdev, &adapter->napi, atl1_rx_clean, 64);
netif_napi_add(netdev, &adapter->napi, atl1_rings_clean, 64);

netdev->ethtool_ops = &atl1_ethtool_ops;
adapter->bd_number = cards_found;
Expand Down

0 comments on commit 4404ef3

Please sign in to comment.