Date: Wed, 23 Mar 2011 02:47:04 +0000 (UTC) From: Jeff Roberson <jeff@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r219893 - head/sys/ofed/drivers/net/mlx4 Message-ID: <201103230247.p2N2l4xp078723@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jeff Date: Wed Mar 23 02:47:04 2011 New Revision: 219893 URL: http://svn.freebsd.org/changeset/base/219893 Log: - Correct the vlan filter programming. The device filter is built in reverse order. - Name the cq taskqueues according to whether they handle rx or tx. - Default LRO to on. Modified: head/sys/ofed/drivers/net/mlx4/en_cq.c head/sys/ofed/drivers/net/mlx4/en_netdev.c head/sys/ofed/drivers/net/mlx4/en_port.c Modified: head/sys/ofed/drivers/net/mlx4/en_cq.c ============================================================================== --- head/sys/ofed/drivers/net/mlx4/en_cq.c Wed Mar 23 01:26:21 2011 (r219892) +++ head/sys/ofed/drivers/net/mlx4/en_cq.c Wed Mar 23 02:47:04 2011 (r219893) @@ -51,21 +51,23 @@ int mlx4_en_create_cq(struct mlx4_en_pri int err; cq->size = entries; + cq->tq = taskqueue_create_fast("mlx4_en_que", M_NOWAIT, + taskqueue_thread_enqueue, &cq->tq); if (mode == RX) { cq->buf_size = cq->size * sizeof(struct mlx4_cqe); cq->vector = (ring + priv->port) % mdev->dev->caps.num_comp_vectors; TASK_INIT(&cq->cq_task, 0, mlx4_en_rx_que, cq); + taskqueue_start_threads(&cq->tq, 1, PI_NET, "%s rx cq", + if_name(priv->dev)); } else { cq->buf_size = sizeof(struct mlx4_cqe); cq->vector = MLX4_LEAST_ATTACHED_VECTOR; TASK_INIT(&cq->cq_task, 0, mlx4_en_tx_que, cq); + taskqueue_start_threads(&cq->tq, 1, PI_NET, "%s tx cq", + if_name(priv->dev)); } - cq->tq = taskqueue_create_fast("mlx4_en_que", M_NOWAIT, - taskqueue_thread_enqueue, &cq->tq); - taskqueue_start_threads(&cq->tq, 1, PI_NET, "%s cq", - if_name(priv->dev)); cq->ring = ring; cq->is_tx = mode; mtx_init(&cq->lock.m, "mlx4 cq", NULL, MTX_DEF); Modified: head/sys/ofed/drivers/net/mlx4/en_netdev.c ============================================================================== --- head/sys/ofed/drivers/net/mlx4/en_netdev.c Wed Mar 23 01:26:21 2011 (r219892) +++ head/sys/ofed/drivers/net/mlx4/en_netdev.c Wed Mar 23 02:47:04 2011 (r219893) @@ -53,13 +53,11 @@ static void mlx4_en_vlan_rx_add_vid(void if ((vid == 0) || (vid > 4095)) /* Invalid */ return; - en_dbg(HW, priv, "adding VLAN:%d\n", vid); - - spin_lock(&priv->vlan_lock); - priv->vlgrp_modified = true; idx = vid >> 5; field = 1 << (vid & 0x1f); + spin_lock(&priv->vlan_lock); + priv->vlgrp_modified = true; if (priv->vlan_unregister[idx] & field) priv->vlan_unregister[idx] &= ~field; else @@ -77,10 +75,10 @@ static void mlx4_en_vlan_rx_kill_vid(voi if ((vid == 0) || (vid > 4095)) /* Invalid */ return; en_dbg(HW, priv, "Killing VID:%d\n", vid); - spin_lock(&priv->vlan_lock); - priv->vlgrp_modified = true; idx = vid >> 5; field = 1 << (vid & 0x1f); + spin_lock(&priv->vlan_lock); + priv->vlgrp_modified = true; if (priv->vlan_register[idx] & field) priv->vlan_register[idx] &= ~field; else @@ -1541,12 +1539,9 @@ int mlx4_en_init_netdev(struct mlx4_en_d #endif if (mdev->LSO_support) dev->if_capabilities |= IFCAP_TSO | IFCAP_VLAN_HWTSO; - - /* Don't enable LOR unless the user requests. */ - dev->if_capenable = dev->if_capabilities; - if (mdev->profile.num_lro) dev->if_capabilities |= IFCAP_LRO; + dev->if_capenable = dev->if_capabilities; /* Register for VLAN events */ priv->vlan_attach = EVENTHANDLER_REGISTER(vlan_config, Modified: head/sys/ofed/drivers/net/mlx4/en_port.c ============================================================================== --- head/sys/ofed/drivers/net/mlx4/en_port.c Wed Mar 23 01:26:21 2011 (r219892) +++ head/sys/ofed/drivers/net/mlx4/en_port.c Wed Mar 23 02:47:04 2011 (r219893) @@ -51,7 +51,7 @@ int mlx4_SET_VLAN_FLTR(struct mlx4_dev * { struct mlx4_cmd_mailbox *mailbox; struct mlx4_set_vlan_fltr_mbox *filter; - int i; + int i, j; int err = 0; mailbox = mlx4_alloc_cmd_mailbox(dev); @@ -61,8 +61,9 @@ int mlx4_SET_VLAN_FLTR(struct mlx4_dev * filter = mailbox->buf; memset(filter, 0, sizeof *filter); if (vlans) - for (i = 0; i < VLAN_FLTR_SIZE; i ++) - filter->entry[i] = cpu_to_be32(vlans[i]); + for (i = 0, j = VLAN_FLTR_SIZE - 1; i < VLAN_FLTR_SIZE; + i++, j--) + filter->entry[j] = cpu_to_be32(vlans[i]); err = mlx4_cmd(dev, mailbox->dma, port, 0, MLX4_CMD_SET_VLAN_FLTR, MLX4_CMD_TIME_CLASS_B); mlx4_free_cmd_mailbox(dev, mailbox);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201103230247.p2N2l4xp078723>