PERFORCE change 128443 for review
Kip Macy
kmacy at FreeBSD.org
Wed Oct 31 18:39:47 PDT 2007
http://perforce.freebsd.org/chv.cgi?CH=128443
Change 128443 by kmacy at kmacy:storage:toestack on 2007/11/01 01:39:39
fix incorrect definition of get_imm_packet the length is not set
the way it is on packets with non-immediate data
Affected files ...
.. //depot/projects/toestack/sys/dev/cxgb/cxgb_sge.c#9 edit
Differences ...
==== //depot/projects/toestack/sys/dev/cxgb/cxgb_sge.c#9 (text+ko) ====
@@ -296,38 +296,14 @@
static __inline int
get_imm_packet(adapter_t *sc, const struct rsp_desc *resp, struct t3_mbuf_hdr *mh)
{
- struct mbuf *m;
- int len;
- uint32_t flags = ntohl(resp->flags);
- uint8_t sopeop = G_RSPD_SOP_EOP(flags);
-
- /*
- * would be a firmware bug
- */
- if (sopeop == RSPQ_NSOP_NEOP || sopeop == RSPQ_SOP)
return (0);
m = m_gethdr(M_DONTWAIT, MT_DATA);
- len = G_RSPD_LEN(ntohl(resp->len_cq));
+ len = IMMED_PKT_SIZE;
if (m) {
- MH_ALIGN(m, IMMED_PKT_SIZE);
memcpy(m->m_data, resp->imm_data, IMMED_PKT_SIZE);
- m->m_len = len;
-
- switch (sopeop) {
- case RSPQ_SOP_EOP:
- mh->mh_head = mh->mh_tail = m;
- m->m_pkthdr.len = len;
- m->m_flags |= M_PKTHDR;
- break;
- case RSPQ_EOP:
- m->m_flags &= ~M_PKTHDR;
- mh->mh_head->m_pkthdr.len += len;
- mh->mh_tail->m_next = m;
- mh->mh_tail = m;
- break;
- }
+ m->m_pkthdr.len = m->m_len = len;
}
return (m != NULL);
}
@@ -336,39 +312,11 @@
static int
get_imm_packet(adapter_t *sc, const struct rsp_desc *resp, struct mbuf *m, void *cl, uint32_t flags)
{
- int len, error;
- uint8_t sopeop = G_RSPD_SOP_EOP(flags);
+
+ m->m_len = m->m_pkthdr.len = IMMED_PKT_SIZE;
+ memcpy(mtod(m, uint8_t *), resp->imm_data, IMMED_PKT_SIZE);
+ return (0);
- /*
- * would be a firmware bug
- */
- len = G_RSPD_LEN(ntohl(resp->len_cq));
- if (sopeop == RSPQ_NSOP_NEOP || sopeop == RSPQ_SOP) {
- if (cxgb_debug)
- device_printf(sc->dev, "unexpected value sopeop=%d flags=0x%x len=%din get_imm_packet\n", sopeop, flags, len);
- bogus_imm++;
- return (EINVAL);
- }
- error = 0;
- switch (sopeop) {
- case RSPQ_SOP_EOP:
- m->m_len = m->m_pkthdr.len = len;
- memcpy(mtod(m, uint8_t *), resp->imm_data, len);
- break;
- case RSPQ_EOP:
- memcpy(cl, resp->imm_data, len);
- /*
- * XXX
- */
- panic("bad append");
- m_iovappend(m, cl, MSIZE, len, 0, NULL);
- break;
- default:
- bogus_imm++;
- error = EINVAL;
- }
-
- return (error);
}
#endif
@@ -1514,7 +1462,7 @@
V_WR_LEN((len + 7) / 8));
wr_gen2(d, gen);
- printf("m_freeing %p\n", m);
+ printf("write_imm m_freeing %p\n", m);
m_freem(m);
}
@@ -2799,7 +2747,7 @@
#else
struct mbuf *m = NULL;
- DPRINTF("IMM DATA VALID opcode=0x%x rspq->cidx=%d\n", r->rss_hdr.opcode, rspq->cidx);
+ printf("IMM DATA VALID opcode=0x%x rspq->cidx=%d\n", r->rss_hdr.opcode, rspq->cidx);
if (rspq->rspq_mbuf == NULL)
rspq->rspq_mbuf = m_gethdr(M_DONTWAIT, MT_DATA);
else
@@ -2813,11 +2761,11 @@
budget_left--;
break;
}
- if (get_imm_packet(adap, r, rspq->rspq_mbuf, m, flags)) {
- eop = 1;
- rspq->imm_data++;
- goto skip;
- }
+ get_imm_packet(adap, r, rspq->rspq_mbuf, m, flags);
+
+ eop = 1;
+ rspq->imm_data++;
+ goto skip;
#endif
} else if (r->len_cq) {
More information about the p4-projects
mailing list