Date: Thu, 1 Nov 2007 01:39:46 GMT From: Kip Macy <kmacy@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 128443 for review Message-ID: <200711010139.lA11dk0n063159@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=128443 Change 128443 by kmacy@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) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200711010139.lA11dk0n063159>