Date: Sun, 19 Aug 2007 21:04:27 GMT From: Kip Macy <kmacy@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 125365 for review Message-ID: <200708192104.l7JL4RXr003014@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=125365 Change 125365 by kmacy@kip-macys-computer:opentoe_mbpro on 2007/08/19 21:03:32 synchronize missed changes between vendor updates - most notably servicing of receives for ports 3 and 4 when line interrupts are in use Affected files ... .. //depot/projects/opentoe/sys/dev/cxgb/cxgb_main.c#16 edit .. //depot/projects/opentoe/sys/dev/cxgb/cxgb_offload.c#14 edit .. //depot/projects/opentoe/sys/dev/cxgb/cxgb_sge.c#27 edit Differences ... ==== //depot/projects/opentoe/sys/dev/cxgb/cxgb_main.c#16 (text+ko) ==== @@ -441,7 +441,8 @@ sc->bt = rman_get_bustag(sc->regs_res); sc->bh = rman_get_bushandle(sc->regs_res); sc->mmio_len = rman_get_size(sc->regs_res); - + memset(adapter->rrss_map, 0xff, sizeof(adapter->rrss_map)); + if (t3_prep_adapter(sc, ai, 1) < 0) { printf("prep adapter failed\n"); error = ENODEV; ==== //depot/projects/opentoe/sys/dev/cxgb/cxgb_offload.c#14 (text+ko) ==== @@ -81,7 +81,7 @@ static const unsigned int MAX_ATIDS = 64 * 1024; -static const unsigned int ATID_BASE = 0x100000; +static const unsigned int ATID_BASE = 0x10000; static int inited = 0; static inline int @@ -372,6 +372,8 @@ struct iff_mac *iffmacp; struct ddp_params *ddpp; struct adap_ports *ports; + struct ofld_page_info *rx_page_info; + struct tp_params *tp = &adapter->params.tp; int port; switch (req) { @@ -402,6 +404,15 @@ case GET_L2T_CAPACITY: *(unsigned int *)data = 2048; break; + case GET_CPUIDX_OF_QSET: { + unsigned int qset = *(unsigned int *)data; + + if (qset >= SGE_QSETS || + adapter->rrss_map[qset] >= RSS_TABLE_SIZE) + return -EINVAL; + *(unsigned int *)data = adapter->rrss_map[qset]; + break; + } case GET_MTUS: mtup = data; mtup->size = NMTUS; @@ -436,6 +447,11 @@ case FAILOVER_CLEAR: t3_failover_clear(adapter); break; + case GET_RX_PAGE_INFO: + rx_page_info = data; + rx_page_info->page_size = tp->rx_pg_size; + rx_page_info->num = tp->rx_num_pgs; + break; case ULP_ISCSI_GET_PARAMS: case ULP_ISCSI_SET_PARAMS: if (!offload_running(adapter)) @@ -704,8 +720,16 @@ union opcode_tid *p = cplhdr(m); unsigned int stid = G_TID(ntohl(p->opcode_tid)); struct toe_tid_entry *toe_tid; + const struct tid_info *t = &(TOE_DATA(dev))->tid_maps; - toe_tid = lookup_stid(&(TOE_DATA(dev))->tid_maps, stid); + /* + * We get these messages also when setting up HW filters. Throw + * those away silently. + */ + if (stid >= t->stid_base + t->nstids) + return CPL_RET_BUF_DONE; + + toe_tid = lookup_stid(t, stid); if (toe_tid->ctx && toe_tid->client->handlers && toe_tid->client->handlers[p->opcode]) { return toe_tid->client->handlers[p->opcode] (dev, m, toe_tid->ctx); @@ -746,16 +770,26 @@ { struct cpl_pass_accept_req *req = cplhdr(m); unsigned int stid = G_PASS_OPEN_TID(ntohl(req->tos_tid)); + struct tid_info *t = &(T3C_DATA(dev))->tid_maps; struct toe_tid_entry *toe_tid; + unsigned int tid = GET_TID(req); + + if (unlikely(tid >= t->ntids)) { + CH_MSG("%s: passive open TID %u too large\n", + dev->name, tid); + t3_fatal_err(tdev2adap(dev)); + return CPL_RET_BUF_DONE; + } - toe_tid = lookup_stid(&(TOE_DATA(dev))->tid_maps, stid); - if (toe_tid->ctx && toe_tid->client->handlers && + toe_tid = lookup_stid(t, stid); + if (toe_tid && toe_tid->ctx && toe_tid->client->handlers && toe_tid->client->handlers[CPL_PASS_ACCEPT_REQ]) { return toe_tid->client->handlers[CPL_PASS_ACCEPT_REQ] (dev, m, toe_tid->ctx); } else { - log(LOG_ERR, "%s: received clientless CPL command 0x%x\n", - dev->name, CPL_PASS_ACCEPT_REQ); + CH_MSG(tdev2adap(dev), DEBUG, OFLD, + "%s: received clientless CPL command 0x%x\n", + dev->name, CPL_PASS_ACCEPT_REQ); return CPL_RET_BUF_DONE | CPL_RET_BAD_MSG; } } @@ -804,8 +838,17 @@ { struct cpl_act_establish *req = cplhdr(m); unsigned int atid = G_PASS_OPEN_TID(ntohl(req->tos_tid)); + struct tid_info *t = &(TOE_DATA(dev))->tid_maps; struct toe_tid_entry *toe_tid; + unsigned int tid = GET_TID(req); + if (unlikely(tid >= t->ntids)) { + CH_MSG("%s: active establish TID %u too large\n", + dev->name, tid); + t3_fatal_err(tdev2adap(dev)); + return CPL_RET_BUF_DONE; + } + toe_tid = lookup_atid(&(TOE_DATA(dev))->tid_maps, atid); if (toe_tid->ctx && toe_tid->client->handlers && toe_tid->client->handlers[CPL_ACT_ESTABLISH]) { @@ -813,7 +856,7 @@ (dev, m, toe_tid->ctx); } else { log(LOG_ERR, "%s: received clientless CPL command 0x%x\n", - dev->name, CPL_PASS_ACCEPT_REQ); + dev->name, CPL_ACT_ESTABLISH); return CPL_RET_BUF_DONE | CPL_RET_BAD_MSG; } } ==== //depot/projects/opentoe/sys/dev/cxgb/cxgb_sge.c#27 (text+ko) ==== @@ -353,6 +353,10 @@ (v >> S_RSPQ0DISABLED) & 0xff); } + if (status & (F_HIPIODRBDROPERR | F_LOPIODRBDROPERR)) + CH_ALERT(adapter, "SGE dropped %s priority doorbell\n", + status & F_HIPIODRBDROPERR ? "high" : "lo"); + t3_write_reg(adapter, A_SG_INT_CAUSE, status); if (status & (F_RSPQCREDITOVERFOW | F_RSPQDISABLED)) t3_fatal_err(adapter); @@ -2535,6 +2539,7 @@ adapter_t *adap = data; struct sge_rspq *q0 = &adap->sge.qs[0].rspq; struct sge_rspq *q1 = &adap->sge.qs[1].rspq; + int i; t3_write_reg(adap, A_PL_CLI, 0); map = t3_read_reg(adap, A_SG_DATA_INTR); @@ -2546,13 +2551,10 @@ taskqueue_enqueue(adap->tq, &adap->slow_intr_task); mtx_lock(&q0->lock); - - if (__predict_true(map & 1)) - process_responses_gts(adap, q0); - - if (map & 2) - process_responses_gts(adap, q1); + for_each_port(adap, i) + if (map & (1 << i)) + process_responses_gts(adap, &adap->sge.qs[i].rspq); mtx_unlock(&q0->lock); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200708192104.l7JL4RXr003014>