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