Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 203469
b: refs/heads/master
c: 7f9dd2f
h: refs/heads/master
i:
  203467: a6bb3a2
v: v3
  • Loading branch information
Casey Leedom authored and David S. Miller committed Jul 13, 2010
1 parent 25b2973 commit d0ffe45
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 29 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: 84c3b972f37a735dafc25c4c0d5fb98f99e1157a
refs/heads/master: 7f9dd2fa4ac74d35f7e5200b76bd09533afe4e4c
32 changes: 7 additions & 25 deletions trunk/drivers/net/cxgb4vf/cxgb4vf_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -423,20 +423,20 @@ static int fwevtq_handler(struct sge_rspq *rspq, const __be64 *rsp,

case CPL_SGE_EGR_UPDATE: {
/*
* We've received an Egress Queue status update message.
* We get these, as the SGE is currently configured, when
* the firmware passes certain points in processing our
* TX Ethernet Queue. We use these updates to determine
* when we may need to restart a TX Ethernet Queue which
* was stopped for lack of free slots ...
* We've received an Egress Queue Status Update message. We
* get these, if the SGE is configured to send these when the
* firmware passes certain points in processing our TX
* Ethernet Queue or if we make an explicit request for one.
* We use these updates to determine when we may need to
* restart a TX Ethernet Queue which was stopped for lack of
* free TX Queue Descriptors ...
*/
const struct cpl_sge_egr_update *p = (void *)cpl;
unsigned int qid = EGR_QID(be32_to_cpu(p->opcode_qid));
struct sge *s = &adapter->sge;
struct sge_txq *tq;
struct sge_eth_txq *txq;
unsigned int eq_idx;
int hw_cidx, reclaimable, in_use;

/*
* Perform sanity checking on the Queue ID to make sure it
Expand Down Expand Up @@ -465,24 +465,6 @@ static int fwevtq_handler(struct sge_rspq *rspq, const __be64 *rsp,
break;
}

/*
* Skip TX Queues which aren't stopped.
*/
if (likely(!netif_tx_queue_stopped(txq->txq)))
break;

/*
* Skip stopped TX Queues which have more than half of their
* DMA rings occupied with unacknowledged writes.
*/
hw_cidx = be16_to_cpu(txq->q.stat->cidx);
reclaimable = hw_cidx - txq->q.cidx;
if (reclaimable < 0)
reclaimable += txq->q.size;
in_use = txq->q.in_use - reclaimable;
if (in_use >= txq->q.size/2)
break;

/*
* Restart a stopped TX Queue which has less than half of its
* TX ring in use ...
Expand Down
12 changes: 9 additions & 3 deletions trunk/drivers/net/cxgb4vf/sge.c
Original file line number Diff line number Diff line change
Expand Up @@ -1070,6 +1070,7 @@ static inline void txq_advance(struct sge_txq *tq, unsigned int n)
*/
int t4vf_eth_xmit(struct sk_buff *skb, struct net_device *dev)
{
u32 wr_mid;
u64 cntrl, *end;
int qidx, credits;
unsigned int flits, ndesc;
Expand Down Expand Up @@ -1143,14 +1144,19 @@ int t4vf_eth_xmit(struct sk_buff *skb, struct net_device *dev)
goto out_free;
}

wr_mid = FW_WR_LEN16(DIV_ROUND_UP(flits, 2));
if (unlikely(credits < ETHTXQ_STOP_THRES)) {
/*
* After we're done injecting the Work Request for this
* packet, we'll be below our "stop threshhold" so stop the TX
* Queue now. The queue will get started later on when the
* firmware informs us that space has opened up.
* Queue now and schedule a request for an SGE Egress Queue
* Update message. The queue will get started later on when
* the firmware processes this Work Request and sends us an
* Egress Queue Status Update message indicating that space
* has opened up.
*/
txq_stop(txq);
wr_mid |= FW_WR_EQUEQ | FW_WR_EQUIQ;
}

/*
Expand All @@ -1161,7 +1167,7 @@ int t4vf_eth_xmit(struct sk_buff *skb, struct net_device *dev)
*/
BUG_ON(DIV_ROUND_UP(ETHTXQ_MAX_HDR, TXD_PER_EQ_UNIT) > 1);
wr = (void *)&txq->q.desc[txq->q.pidx];
wr->equiq_to_len16 = cpu_to_be32(FW_WR_LEN16(DIV_ROUND_UP(flits, 2)));
wr->equiq_to_len16 = cpu_to_be32(wr_mid);
wr->r3[0] = cpu_to_be64(0);
wr->r3[1] = cpu_to_be64(0);
skb_copy_from_linear_data(skb, (void *)wr->ethmacdst, fw_hdr_copy_len);
Expand Down

0 comments on commit d0ffe45

Please sign in to comment.