Date: Thu, 3 Jan 2008 17:25:57 GMT From: Steve Wise <swise@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 132411 for review Message-ID: <200801031725.m03HPvbK025527@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=132411 Change 132411 by swise@swise:vic10:iwarp on 2008/01/03 17:25:40 Add async notification support in if_cxgb. Affected files ... .. //depot/projects/iwarp/sys/dev/cxgb/cxgb_adapter.h#9 edit .. //depot/projects/iwarp/sys/dev/cxgb/cxgb_sge.c#6 edit Differences ... ==== //depot/projects/iwarp/sys/dev/cxgb/cxgb_adapter.h#9 (text+ko) ==== @@ -120,8 +120,8 @@ uint8_t port_id; uint8_t tx_chan; uint8_t txpkt_intf; + uint8_t nqsets; uint8_t first_qset; - uint32_t nqsets; uint8_t hw_addr[ETHER_ADDR_LEN]; struct taskqueue *tq; @@ -196,6 +196,7 @@ uint32_t holdoff_tmr; uint32_t next_holdoff; uint32_t imm_data; + uint32_t async_notif; struct rsp_desc *desc; uint32_t cntxt_id; struct mtx lock; ==== //depot/projects/iwarp/sys/dev/cxgb/cxgb_sge.c#6 (text+ko) ==== @@ -2749,15 +2749,37 @@ eth = (r->rss_hdr.opcode == CPL_RX_PKT); if (__predict_false(flags & F_RSPD_ASYNC_NOTIF)) { - /* XXX */ - printf("async notification\n"); + struct mbuf *m; + + if (cxgb_debug) + printf("async notification\n"); + + if (rspq->rspq_mbuf == NULL) { + rspq->rspq_mbuf = m_gethdr(M_DONTWAIT, MT_DATA); + m = rspq->rspq_mbuf; + } else { + m = m_gethdr(M_DONTWAIT, MT_DATA); + } + + /* XXX m is lost here if rspq->rspq_mbuf is not NULL */ + + if (m == NULL) + goto no_mem; + memcpy(mtod(m, char *), r, AN_PKT_SIZE); + m->m_len = m->m_pkthdr.len = AN_PKT_SIZE; + *mtod(m, char *) = CPL_ASYNC_NOTIF; + rss_csum = htonl(CPL_ASYNC_NOTIF << 24); + eop = 1; + rspq->async_notif++; + goto skip; } else if (flags & F_RSPD_IMM_DATA_VALID) { #ifdef DISABLE_MBUF_IOVEC if (cxgb_debug) printf("IMM DATA VALID opcode=0x%x rspq->cidx=%d\n", r->rss_hdr.opcode, rspq->cidx); if(get_imm_packet(adap, r, &rspq->rspq_mh) == 0) { + no_mem: rspq->next_holdoff = NOMEM_INTR_DELAY; budget_left--; break; @@ -2777,6 +2799,7 @@ * XXX revisit me */ if (rspq->rspq_mbuf == NULL && m == NULL) { + no_mem: rspq->next_holdoff = NOMEM_INTR_DELAY; budget_left--; break; @@ -2788,7 +2811,7 @@ goto skip; #endif - } else if (r->len_cq) { + } else if (r->len_cq) { int drop_thresh = eth ? SGE_RX_DROP_THRES : 0; #ifdef DISABLE_MBUF_IOVEC
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200801031725.m03HPvbK025527>