mirror of
https://github.com/opnsense/src.git
synced 2026-06-09 00:32:25 -04:00
cxgb(4): Rework my commit 9dc7c250.
The previous implementation was reported to try to coalesce packets in situations when it should not, that resulted in assertion later. This implementation better checks the first packet of the chain for the coallescing elligibility. MFC after: 3 days
This commit is contained in:
parent
963cf6cb0f
commit
d510bf133d
1 changed files with 10 additions and 8 deletions
|
|
@ -312,20 +312,22 @@ set_wr_hdr(struct work_request_hdr *wrp, uint32_t wr_hi, uint32_t wr_lo)
|
|||
struct coalesce_info {
|
||||
int count;
|
||||
int nbytes;
|
||||
int noncoal;
|
||||
};
|
||||
|
||||
static int
|
||||
coalesce_check(struct mbuf *m, void *arg)
|
||||
{
|
||||
struct coalesce_info *ci = arg;
|
||||
int *count = &ci->count;
|
||||
int *nbytes = &ci->nbytes;
|
||||
|
||||
if ((*nbytes == 0) || ((*nbytes + m->m_len <= 10500) &&
|
||||
(*count < 7) && (m->m_next == NULL) &&
|
||||
((mtod(m, vm_offset_t) & PAGE_MASK) + m->m_len <= PAGE_SIZE))) {
|
||||
*count += 1;
|
||||
*nbytes += m->m_len;
|
||||
if ((m->m_next != NULL) ||
|
||||
((mtod(m, vm_offset_t) & PAGE_MASK) + m->m_len > PAGE_SIZE))
|
||||
ci->noncoal = 1;
|
||||
|
||||
if ((ci->count == 0) || (ci->noncoal == 0 && (ci->count < 7) &&
|
||||
(ci->nbytes + m->m_len <= 10500))) {
|
||||
ci->count++;
|
||||
ci->nbytes += m->m_len;
|
||||
return (1);
|
||||
}
|
||||
return (0);
|
||||
|
|
@ -342,7 +344,7 @@ cxgb_dequeue(struct sge_qset *qs)
|
|||
return TXQ_RING_DEQUEUE(qs);
|
||||
|
||||
m_head = m_tail = NULL;
|
||||
ci.count = ci.nbytes = 0;
|
||||
ci.count = ci.nbytes = ci.noncoal = 0;
|
||||
do {
|
||||
m = TXQ_RING_DEQUEUE_COND(qs, coalesce_check, &ci);
|
||||
if (m_head == NULL) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue