XVE_CM_BUF_SIZE = XVE_CM_MTU + VLAN_ETH_HLEN,
XVE_CM_HEAD_SIZE = XVE_CM_BUF_SIZE % PAGE_SIZE,
XVE_CM_RX_SG = ALIGN(XVE_CM_BUF_SIZE, PAGE_SIZE) / PAGE_SIZE,
- XVE_RX_RING_SIZE = 256,
- XVE_TX_RING_SIZE = 128,
+ XVE_RX_RING_SIZE = 2048,
+ XVE_TX_RING_SIZE = 2048,
XVE_MAX_QUEUE_SIZE = 8192,
XVE_MIN_QUEUE_SIZE = 2,
XVE_CM_MAX_CONN_QP = 4096,
XVE_TX_UD_COUNTER,
XVE_TX_RC_COUNTER,
+ XVE_RC_RXCOMPL_COUNTER,
+ XVE_RC_TXCOMPL_COUNTER,
XVE_TX_MCAST_PKT,
XVE_TX_BCAST_PKT,
XVE_TX_MCAST_ARP_QUERY,
XVE_HBEAT_COUNTER,
XVE_LINK_STATUS_COUNTER,
XVE_RX_NOGRH,
+ XVE_DUP_VID_COUNTER,
XVE_MAX_COUNTERS
};
/* TX and RX Ring attributes */
int xve_recvq_size;
int xve_sendq_size;
+ int xve_rcq_size;
+ int xve_scq_size;
int xve_max_send_cqe;
struct xve_rx_buf *rx_ring;
struct xve_tx_buf *tx_ring;
"mcast detach count:\t\t",
"tx ud count:\t\t\t",
"tx rc count:\t\t\t",
+ "rc tx compl count:\t\t\t",
+ "rc rx compl count:\t\t\t",
"tx mcast count:\t\t\t",
"tx broadcast count:\t\t\t",
"tx arp count:\t\t\t",
"Heartbeat Count(0x8919):\t\t",
"Link State message count:\t",
"RX frames without GRH\t\t",
+ "Duplicate xve install count:\t"
};
static char *misc_counter_name[XVE_MISC_MAX_COUNTERS] = {
seq_printf(m, "Receive Queue size: \t\t%d\n", vp->xve_recvq_size);
seq_printf(m, "Transmit Queue size: \t\t%d\n", vp->xve_sendq_size);
- seq_printf(m, "Completion Queue size: \t\t%d\n", vp->xve_max_send_cqe);
+ seq_printf(m, "Receive CQ size: \t\t%d\n", vp->xve_rcq_size);
+ seq_printf(m, "Transmit CQ size: \t\t%d\n", vp->xve_scq_size);
if (vp->cm_supported) {
seq_printf(m, "Num of cm frags: \t\t%d\n", vp->cm.num_frags);
seq_printf(m, "CM mtu \t\t\t%d\n", vp->cm.max_cm_mtu);
+ seq_printf(m, "CM SRQ \t\t\t%s\n", (vp->cm.srq) ? "yes" : "no");
}
seq_puts(m, "\n");
static int xve_max_inline_data = 128;
module_param(xve_max_inline_data, int, 0644);
+static int xve_use_hugecq = 16384;
+module_param(xve_use_hugecq, int, 0644);
+
int xve_mcast_attach(struct net_device *dev, u16 mlid, union ib_gid *mgid,
int set_qkey)
{
.qp_type = IB_QPT_UD
};
struct ethtool_coalesce *coal;
- int ret, size, max_sge = MAX_SKB_FRAGS + 1;
+ int ret, size = 0, max_sge = MAX_SKB_FRAGS + 1;
int i;
priv->pd = ib_alloc_pd(priv->ca);
goto out_free_pd;
}
- size = priv->xve_recvq_size + 1;
ret = xve_cm_dev_init(dev);
if (ret != 0) {
pr_err("%s Failed for %s [ret %d ]\n", __func__,
goto out_free_mr;
}
- size += priv->xve_sendq_size;
- size = priv->xve_recvq_size + 1; /* 1 extra for rx_drain_qp */
+ /* Bug 24673784 */
+ if (priv->is_titan && xve_use_hugecq) {
+ priv->xve_rcq_size = priv->xve_scq_size =
+ xve_use_hugecq;
+ } else {
+ size = priv->xve_sendq_size;
+ size += priv->xve_recvq_size + 1; /* 1 extra for rx_drain_qp */
+ priv->xve_rcq_size = size;
+ priv->xve_scq_size = priv->xve_sendq_size;
+ }
/* Create Receive CompletionQueue */
- priv->recv_cq =
- ib_create_cq(priv->ca, xve_ib_completion, NULL, dev, size, 0);
+ priv->recv_cq = ib_create_cq(priv->ca, xve_ib_completion, NULL,
+ dev, priv->xve_rcq_size, 0);
if (IS_ERR(priv->recv_cq)) {
- pr_warn("%s: failed to create receive CQ for %s\n",
- ca->name, priv->xve_name);
+ pr_warn("%s: failed to create receive CQ for %s size%d\n",
+ ca->name, priv->xve_name, priv->xve_rcq_size);
goto out_free_mr;
}
/* Create Send CompletionQueue */
priv->send_cq = ib_create_cq(priv->ca, xve_send_comp_handler, NULL,
- dev, priv->xve_sendq_size, 0);
+ dev, priv->xve_scq_size, 0);
if (IS_ERR(priv->send_cq)) {
- pr_warn("%s: failed to create send CQ for %s\n",
- ca->name, priv->xve_name);
+ pr_warn("%s: failed to create send CQ for %s size%d\n",
+ ca->name, priv->xve_name, priv->xve_scq_size);
goto out_free_recv_cq;
}