svn commit: r265478 - stable/9/sys/dev/cxgbe
Navdeep Parhar
np at FreeBSD.org
Wed May 7 02:13:56 UTC 2014
Author: np
Date: Wed May 7 02:13:55 2014
New Revision: 265478
URL: http://svnweb.freebsd.org/changeset/base/265478
Log:
MFC r253701, r253829, r253873, r253889, r253890, r254577, r254727, and r254933.
r253701:
Display a string instead of a numeric code in the linkdnrc sysctl.
r253829:
Display SGE tunables in the sysctl tree.
dev.t5nex.0.fl_pktshift: payload DMA offset in rx buffer (bytes)
dev.t5nex.0.fl_pad: payload pad boundary (bytes)
dev.t5nex.0.spg_len: status page size (bytes)
dev.t5nex.0.cong_drop: congestion drop setting
r253873:
Set up congestion manager context properly for T5 based cards.
r253889:
Fix previous commit (r253873). "cong" has one bit per channel but the
congestion channel map has 1 nibble per channel. So bits wxyz need to
be blown up into 000w000x000y000z.
r253890:
Display temperature sensor data. Shows -1 if sensor not
available on the card.
# sysctl dev.t4nex.0.temperature
# sysctl dev.t5nex.0.temperature
r254577:
Display P/N information in the description.
r254727:
There is no need to hold the freelist lock around alloc/free of
software descriptors. This also silences WITNESS warnings when
the software descriptors are allocated with M_WAITOK.
r254933:
Use correct mailbox and PCIe PF number when querying RDMA parameters.
Modified:
stable/9/sys/dev/cxgbe/adapter.h
stable/9/sys/dev/cxgbe/t4_main.c
stable/9/sys/dev/cxgbe/t4_sge.c
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/dev/ (props changed)
Modified: stable/9/sys/dev/cxgbe/adapter.h
==============================================================================
--- stable/9/sys/dev/cxgbe/adapter.h Wed May 7 00:51:24 2014 (r265477)
+++ stable/9/sys/dev/cxgbe/adapter.h Wed May 7 02:13:55 2014 (r265478)
@@ -792,6 +792,8 @@ void t4_init_sge_cpl_handlers(struct ada
void t4_tweak_chip_settings(struct adapter *);
int t4_read_chip_settings(struct adapter *);
int t4_create_dma_tag(struct adapter *);
+void t4_sge_sysctls(struct adapter *, struct sysctl_ctx_list *,
+ struct sysctl_oid_list *);
int t4_destroy_dma_tag(struct adapter *);
int t4_setup_adapter_queues(struct adapter *);
int t4_teardown_adapter_queues(struct adapter *);
Modified: stable/9/sys/dev/cxgbe/t4_main.c
==============================================================================
--- stable/9/sys/dev/cxgbe/t4_main.c Wed May 7 00:51:24 2014 (r265477)
+++ stable/9/sys/dev/cxgbe/t4_main.c Wed May 7 02:13:55 2014 (r265478)
@@ -379,6 +379,7 @@ static int sysctl_holdoff_pktc_idx(SYSCT
static int sysctl_qsize_rxq(SYSCTL_HANDLER_ARGS);
static int sysctl_qsize_txq(SYSCTL_HANDLER_ARGS);
static int sysctl_handle_t4_reg64(SYSCTL_HANDLER_ARGS);
+static int sysctl_temperature(SYSCTL_HANDLER_ARGS);
#ifdef SBUF_DRAIN
static int sysctl_cctrl(SYSCTL_HANDLER_ARGS);
static int sysctl_cim_ibq_obq(SYSCTL_HANDLER_ARGS);
@@ -392,6 +393,7 @@ static int sysctl_devlog(SYSCTL_HANDLER_
static int sysctl_fcoe_stats(SYSCTL_HANDLER_ARGS);
static int sysctl_hw_sched(SYSCTL_HANDLER_ARGS);
static int sysctl_lb_stats(SYSCTL_HANDLER_ARGS);
+static int sysctl_linkdnrc(SYSCTL_HANDLER_ARGS);
static int sysctl_meminfo(SYSCTL_HANDLER_ARGS);
static int sysctl_mps_tcam(SYSCTL_HANDLER_ARGS);
static int sysctl_path_mtus(SYSCTL_HANDLER_ARGS);
@@ -2474,7 +2476,7 @@ get_params__post_init(struct adapter *sc
param[3] = FW_PARAM_PFVF(CQ_END);
param[4] = FW_PARAM_PFVF(OCQ_START);
param[5] = FW_PARAM_PFVF(OCQ_END);
- rc = -t4_query_params(sc, 0, 0, 0, 6, param, val);
+ rc = -t4_query_params(sc, sc->mbox, sc->pf, 0, 6, param, val);
if (rc != 0) {
device_printf(sc->dev,
"failed to query RDMA parameters(2): %d.\n", rc);
@@ -2531,9 +2533,9 @@ t4_set_desc(struct adapter *sc)
char buf[128];
struct adapter_params *p = &sc->params;
- snprintf(buf, sizeof(buf), "Chelsio %s %sNIC (rev %d), S/N:%s, E/C:%s",
- p->vpd.id, is_offload(sc) ? "R" : "", chip_rev(sc), p->vpd.sn,
- p->vpd.ec);
+ snprintf(buf, sizeof(buf), "Chelsio %s %sNIC (rev %d), S/N:%s, "
+ "P/N:%s, E/C:%s", p->vpd.id, is_offload(sc) ? "R" : "",
+ chip_rev(sc), p->vpd.sn, p->vpd.pn, p->vpd.ec);
device_set_desc_copy(sc->dev, buf);
}
@@ -4195,6 +4197,12 @@ t4_sysctls(struct adapter *sc)
SYSCTL_ADD_INT(ctx, children, OID_AUTO, "nfilters", CTLFLAG_RD,
NULL, sc->tids.nftids, "number of filters");
+ SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "temperature", CTLTYPE_INT |
+ CTLFLAG_RD, sc, 0, sysctl_temperature, "A",
+ "chip temperature (in Celsius)");
+
+ t4_sge_sysctls(sc, ctx, children);
+
#ifdef SBUF_DRAIN
/*
* dev.t4nex.X.misc. Marked CTLFLAG_SKIP to avoid information overload.
@@ -4412,8 +4420,8 @@ cxgbe_sysctls(struct port_info *pi)
oid = device_get_sysctl_tree(pi->dev);
children = SYSCTL_CHILDREN(oid);
- SYSCTL_ADD_INT(ctx, children, OID_AUTO, "linkdnrc", CTLFLAG_RD,
- &pi->linkdnrc, 0, "reason why link is down");
+ SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "linkdnrc", CTLTYPE_STRING |
+ CTLFLAG_RD, pi, 0, sysctl_linkdnrc, "A", "reason why link is down");
if (pi->port_type == FW_PORT_TYPE_BT_XAUI) {
SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "temperature",
CTLTYPE_INT | CTLFLAG_RD, pi, 0, sysctl_btphy, "I",
@@ -4835,6 +4843,31 @@ sysctl_handle_t4_reg64(SYSCTL_HANDLER_AR
return (sysctl_handle_64(oidp, &val, 0, req));
}
+static int
+sysctl_temperature(SYSCTL_HANDLER_ARGS)
+{
+ struct adapter *sc = arg1;
+ int rc, t;
+ uint32_t param, val;
+
+ rc = begin_synchronized_op(sc, NULL, SLEEP_OK | INTR_OK, "t4temp");
+ if (rc)
+ return (rc);
+ param = V_FW_PARAMS_MNEM(FW_PARAMS_MNEM_DEV) |
+ V_FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DEV_DIAG) |
+ V_FW_PARAMS_PARAM_Y(FW_PARAM_DEV_DIAG_TMP);
+ rc = -t4_query_params(sc, sc->mbox, sc->pf, 0, 1, ¶m, &val);
+ end_synchronized_op(sc, 0);
+ if (rc)
+ return (rc);
+
+ /* unknown is returned as 0 but we display -1 in that case */
+ t = val == 0 ? -1 : val;
+
+ rc = sysctl_handle_int(oidp, &t, 0, req);
+ return (rc);
+}
+
#ifdef SBUF_DRAIN
static int
sysctl_cctrl(SYSCTL_HANDLER_ARGS)
@@ -5459,6 +5492,37 @@ sysctl_lb_stats(SYSCTL_HANDLER_ARGS)
return (rc);
}
+static int
+sysctl_linkdnrc(SYSCTL_HANDLER_ARGS)
+{
+ int rc = 0;
+ struct port_info *pi = arg1;
+ struct sbuf *sb;
+ static const char *linkdnreasons[] = {
+ "non-specific", "remote fault", "autoneg failed", "reserved3",
+ "PHY overheated", "unknown", "rx los", "reserved7"
+ };
+
+ rc = sysctl_wire_old_buffer(req, 0);
+ if (rc != 0)
+ return(rc);
+ sb = sbuf_new_for_sysctl(NULL, NULL, 64, req);
+ if (sb == NULL)
+ return (ENOMEM);
+
+ if (pi->linkdnrc < 0)
+ sbuf_printf(sb, "n/a");
+ else if (pi->linkdnrc < nitems(linkdnreasons))
+ sbuf_printf(sb, "%s", linkdnreasons[pi->linkdnrc]);
+ else
+ sbuf_printf(sb, "%d", pi->linkdnrc);
+
+ rc = sbuf_finish(sb);
+ sbuf_delete(sb);
+
+ return (rc);
+}
+
struct mem_desc {
unsigned int base;
unsigned int limit;
Modified: stable/9/sys/dev/cxgbe/t4_sge.c
==============================================================================
--- stable/9/sys/dev/cxgbe/t4_sge.c Wed May 7 00:51:24 2014 (r265477)
+++ stable/9/sys/dev/cxgbe/t4_sge.c Wed May 7 02:13:55 2014 (r265478)
@@ -496,6 +496,24 @@ t4_create_dma_tag(struct adapter *sc)
return (rc);
}
+void
+t4_sge_sysctls(struct adapter *sc, struct sysctl_ctx_list *ctx,
+ struct sysctl_oid_list *children)
+{
+
+ SYSCTL_ADD_INT(ctx, children, OID_AUTO, "fl_pktshift", CTLFLAG_RD,
+ NULL, fl_pktshift, "payload DMA offset in rx buffer (bytes)");
+
+ SYSCTL_ADD_INT(ctx, children, OID_AUTO, "fl_pad", CTLFLAG_RD,
+ NULL, fl_pad, "payload pad boundary (bytes)");
+
+ SYSCTL_ADD_INT(ctx, children, OID_AUTO, "spg_len", CTLFLAG_RD,
+ NULL, spg_len, "status page size (bytes)");
+
+ SYSCTL_ADD_INT(ctx, children, OID_AUTO, "cong_drop", CTLFLAG_RD,
+ NULL, cong_drop, "congestion drop setting");
+}
+
int
t4_destroy_dma_tag(struct adapter *sc)
{
@@ -1782,9 +1800,7 @@ alloc_iq_fl(struct port_info *pi, struct
/* Allocate space for one software descriptor per buffer. */
fl->cap = (fl->qsize - spg_len / RX_FL_ESIZE) * 8;
- FL_LOCK(fl);
rc = alloc_fl_sdesc(fl);
- FL_UNLOCK(fl);
if (rc != 0) {
device_printf(sc->dev,
"failed to setup fl software descriptors: %d\n",
@@ -1852,6 +1868,31 @@ alloc_iq_fl(struct port_info *pi, struct
iq->flags |= IQ_HAS_FL;
}
+ if (is_t5(sc) && cong >= 0) {
+ uint32_t param, val;
+
+ param = V_FW_PARAMS_MNEM(FW_PARAMS_MNEM_DMAQ) |
+ V_FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DMAQ_CONM_CTXT) |
+ V_FW_PARAMS_PARAM_YZ(iq->cntxt_id);
+ if (cong == 0)
+ val = 1 << 19;
+ else {
+ val = 2 << 19;
+ for (i = 0; i < 4; i++) {
+ if (cong & (1 << i))
+ val |= 1 << (i << 2);
+ }
+ }
+
+ rc = -t4_set_params(sc, sc->mbox, sc->pf, 0, 1, ¶m, &val);
+ if (rc != 0) {
+ /* report error but carry on */
+ device_printf(sc->dev,
+ "failed to set congestion manager context for "
+ "ingress queue %d: %d\n", iq->cntxt_id, rc);
+ }
+ }
+
/* Enable IQ interrupts */
atomic_store_rel_int(&iq->state, IQS_IDLE);
t4_write_reg(sc, MYPF_REG(A_SGE_PF_GTS), V_SEINTARM(iq->intr_params) |
@@ -1892,11 +1933,8 @@ free_iq_fl(struct port_info *pi, struct
free_ring(sc, fl->desc_tag, fl->desc_map, fl->ba,
fl->desc);
- if (fl->sdesc) {
- FL_LOCK(fl);
+ if (fl->sdesc)
free_fl_sdesc(fl);
- FL_UNLOCK(fl);
- }
if (mtx_initialized(&fl->fl_lock))
mtx_destroy(&fl->fl_lock);
@@ -2743,8 +2781,6 @@ alloc_fl_sdesc(struct sge_fl *fl)
bus_dma_tag_t tag;
int i, rc;
- FL_LOCK_ASSERT_OWNED(fl);
-
fl->sdesc = malloc(fl->cap * sizeof(struct fl_sdesc), M_CXGBE,
M_ZERO | M_WAITOK);
@@ -2783,8 +2819,6 @@ free_fl_sdesc(struct sge_fl *fl)
struct fl_sdesc *sd;
int i;
- FL_LOCK_ASSERT_OWNED(fl);
-
sd = fl->sdesc;
for (i = 0; i < fl->cap; i++, sd++) {
More information about the svn-src-stable-9
mailing list