Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 3 Jan 2011 05:14:39 +0000 (UTC)
From:      Jeff Roberson <jeff@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r216906 - in projects/ofed/base/sys/ofed: drivers/infiniband/core drivers/infiniband/debug drivers/infiniband/hw/cxgb3 drivers/infiniband/hw/ehca drivers/infiniband/hw/mlx4 drivers/infi...
Message-ID:  <201101030514.p035Edh5075422@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jeff
Date: Mon Jan  3 05:14:39 2011
New Revision: 216906
URL: http://svn.freebsd.org/changeset/base/216906

Log:
   - Update kernel and drivers to ofed 1.5.3-rc1 commit rev
     cf8b6ca317a31ccee24e0058415db36a59242eb6

Modified:
  projects/ofed/base/sys/ofed/drivers/infiniband/core/agent.c
  projects/ofed/base/sys/ofed/drivers/infiniband/core/cache.c
  projects/ofed/base/sys/ofed/drivers/infiniband/core/cm.c
  projects/ofed/base/sys/ofed/drivers/infiniband/core/cma.c
  projects/ofed/base/sys/ofed/drivers/infiniband/core/mad.c
  projects/ofed/base/sys/ofed/drivers/infiniband/core/multicast.c
  projects/ofed/base/sys/ofed/drivers/infiniband/core/sa_query.c
  projects/ofed/base/sys/ofed/drivers/infiniband/core/sysfs.c
  projects/ofed/base/sys/ofed/drivers/infiniband/core/ucma.c
  projects/ofed/base/sys/ofed/drivers/infiniband/core/ud_header.c
  projects/ofed/base/sys/ofed/drivers/infiniband/core/user_mad.c
  projects/ofed/base/sys/ofed/drivers/infiniband/core/uverbs.h
  projects/ofed/base/sys/ofed/drivers/infiniband/core/uverbs_cmd.c
  projects/ofed/base/sys/ofed/drivers/infiniband/core/uverbs_main.c
  projects/ofed/base/sys/ofed/drivers/infiniband/core/verbs.c
  projects/ofed/base/sys/ofed/drivers/infiniband/debug/memtrack.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_hal.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_hal.h
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_resource.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_resource.h
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/iwch_cm.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_main.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/ah.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/cq.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/mad.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/main.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/mlx4_ib.h
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/mr.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/qp.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_dev.h
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_qp.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/Makefile
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes.h
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes_cm.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes_hw.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes_hw.h
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes_nic.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes_utils.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes_verbs.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes_verbs.h
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib.h
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_7322_regs.h
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_common.h
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_cq.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_diag.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_driver.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_file_ops.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_iba6120.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_iba7220.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_iba7322.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_init.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_intr.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_keys.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_mad.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_mr.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_pcie.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_qp.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_rc.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_sdma.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_trace.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_tx.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_uc.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_ud.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_user_sdma.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_verbs.c
  projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_verbs.h
  projects/ofed/base/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ethtool.c
  projects/ofed/base/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
  projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/sdp.h
  projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/sdp_bcopy.c
  projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/sdp_cma.c
  projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/sdp_dbg.h
  projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c
  projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/sdp_proc.c
  projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/sdp_rx.c
  projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/sdp_tx.c
  projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/sdp_zcopy.c
  projects/ofed/base/sys/ofed/drivers/infiniband/ulp/srpt/scst_debug.h
  projects/ofed/base/sys/ofed/drivers/infiniband/util/madeye.c
  projects/ofed/base/sys/ofed/drivers/net/mlx4/alloc.c
  projects/ofed/base/sys/ofed/drivers/net/mlx4/cmd.c
  projects/ofed/base/sys/ofed/drivers/net/mlx4/en_ethtool.c
  projects/ofed/base/sys/ofed/drivers/net/mlx4/en_netdev.c
  projects/ofed/base/sys/ofed/drivers/net/mlx4/en_port.c
  projects/ofed/base/sys/ofed/drivers/net/mlx4/en_port.h
  projects/ofed/base/sys/ofed/drivers/net/mlx4/en_rx.c
  projects/ofed/base/sys/ofed/drivers/net/mlx4/en_tx.c
  projects/ofed/base/sys/ofed/drivers/net/mlx4/fw.c
  projects/ofed/base/sys/ofed/drivers/net/mlx4/main.c
  projects/ofed/base/sys/ofed/drivers/net/mlx4/mcg.c
  projects/ofed/base/sys/ofed/drivers/net/mlx4/mlx4.h
  projects/ofed/base/sys/ofed/drivers/net/mlx4/mlx4_en.h
  projects/ofed/base/sys/ofed/drivers/net/mlx4/pd.c
  projects/ofed/base/sys/ofed/drivers/net/mlx4/port.c
  projects/ofed/base/sys/ofed/drivers/net/mlx4/qp.c
  projects/ofed/base/sys/ofed/include/rdma/ib_addr.h
  projects/ofed/base/sys/ofed/include/rdma/ib_sa.h
  projects/ofed/base/sys/ofed/include/rdma/ib_user_verbs.h
  projects/ofed/base/sys/ofed/include/rdma/ib_verbs.h

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/core/agent.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/core/agent.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/core/agent.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -48,8 +48,6 @@
 struct ib_agent_port_private {
 	struct list_head port_list;
 	struct ib_mad_agent *agent[2];
-	struct ib_device    *device;
-	u8		     port_num;
 };
 
 static DEFINE_SPINLOCK(ib_agent_port_list_lock);
@@ -60,10 +58,11 @@ __ib_get_agent_port(struct ib_device *de
 {
 	struct ib_agent_port_private *entry;
 
-	list_for_each_entry(entry, &ib_agent_port_list, port_list)
-		if (entry->device == device && entry->port_num == port_num)
+	list_for_each_entry(entry, &ib_agent_port_list, port_list) {
+		if (entry->agent[1]->device == device &&
+		    entry->agent[1]->port_num == port_num)
 			return entry;
-
+	}
 	return NULL;
 }
 
@@ -156,7 +155,7 @@ int ib_agent_port_open(struct ib_device 
 		goto error1;
 	}
 
-	if (rdma_port_link_layer(device, port_num) == IB_LINK_LAYER_INFINIBAND) {
+	if (rdma_port_get_link_layer(device, port_num) == IB_LINK_LAYER_INFINIBAND) {
 		/* Obtain send only MAD agent for SMI QP */
 		port_priv->agent[0] = ib_register_mad_agent(device, port_num,
 							    IB_QPT_SMI, NULL, 0,
@@ -178,9 +177,6 @@ int ib_agent_port_open(struct ib_device 
 		goto error3;
 	}
 
-	port_priv->device = device;
-	port_priv->port_num = port_num;
-
 	spin_lock_irqsave(&ib_agent_port_list_lock, flags);
 	list_add_tail(&port_priv->port_list, &ib_agent_port_list);
 	spin_unlock_irqrestore(&ib_agent_port_list_lock, flags);
@@ -188,7 +184,7 @@ int ib_agent_port_open(struct ib_device 
 	return 0;
 
 error3:
-	if (rdma_port_link_layer(device, port_num) == IB_LINK_LAYER_INFINIBAND)
+	if (port_priv->agent[0])
 		ib_unregister_mad_agent(port_priv->agent[0]);
 error2:
 	kfree(port_priv);
@@ -212,7 +208,7 @@ int ib_agent_port_close(struct ib_device
 	spin_unlock_irqrestore(&ib_agent_port_list_lock, flags);
 
 	ib_unregister_mad_agent(port_priv->agent[1]);
-	if (rdma_port_link_layer(device, port_num) == IB_LINK_LAYER_INFINIBAND)
+	if (port_priv->agent[0])
 		ib_unregister_mad_agent(port_priv->agent[0]);
 
 	kfree(port_priv);

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/core/cache.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/core/cache.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/core/cache.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -302,7 +302,8 @@ static void ib_cache_event(struct ib_eve
 	    event->event == IB_EVENT_LID_CHANGE  ||
 	    event->event == IB_EVENT_PKEY_CHANGE ||
 	    event->event == IB_EVENT_SM_CHANGE   ||
-	    event->event == IB_EVENT_CLIENT_REREGISTER) {
+	    event->event == IB_EVENT_CLIENT_REREGISTER ||
+	    event->event == IB_EVENT_GID_CHANGE) {
 		work = kmalloc(sizeof *work, GFP_ATOMIC);
 		if (work) {
 			INIT_WORK(&work->work, ib_cache_task);

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/core/cm.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/core/cm.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/core/cm.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -362,7 +362,6 @@ static int cm_init_av_by_path(struct ib_
 	unsigned long flags;
 	int ret;
 	u8 p;
-	int force_grh;
 
 	read_lock_irqsave(&cm.device_lock, flags);
 	list_for_each_entry(cm_dev, &cm.device_list, list) {
@@ -383,10 +382,8 @@ static int cm_init_av_by_path(struct ib_
 		return ret;
 
 	av->port = port;
-	force_grh = rdma_port_link_layer(cm_dev->ib_device, port->port_num) ==
-		IB_LINK_LAYER_ETHERNET ? 1 : 0;
 	ib_init_ah_from_path(cm_dev->ib_device, port->port_num, path,
-			     &av->ah_attr, force_grh);
+			     &av->ah_attr);
 	av->timeout = path->packet_life_time + 1;
 	return 0;
 }
@@ -2446,10 +2443,12 @@ int ib_send_cm_mra(struct ib_cm_id *cm_i
 		msg_response = CM_MSG_RESPONSE_REP;
 		break;
 	case IB_CM_ESTABLISHED:
-		cm_state = cm_id->state;
-		lap_state = IB_CM_MRA_LAP_SENT;
-		msg_response = CM_MSG_RESPONSE_OTHER;
-		break;
+		if (cm_id->lap_state == IB_CM_LAP_RCVD) {
+			cm_state = cm_id->state;
+			lap_state = IB_CM_MRA_LAP_SENT;
+			msg_response = CM_MSG_RESPONSE_OTHER;
+			break;
+		}
 	default:
 		ret = -EINVAL;
 		goto error1;

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/core/cma.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/core/cma.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/core/cma.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -608,7 +608,7 @@ static int cma_ib_init_qp_attr(struct rd
 	int ret;
 	u16 pkey;
 
-	if (rdma_port_link_layer(id_priv->id.device, id_priv->id.port_num) ==
+	if (rdma_port_get_link_layer(id_priv->id.device, id_priv->id.port_num) ==
 	    IB_LINK_LAYER_INFINIBAND)
 		pkey = ib_addr_get_pkey(dev_addr);
 	else
@@ -793,7 +793,7 @@ static inline int cma_user_data_offset(e
 
 static void cma_cancel_route(struct rdma_id_private *id_priv)
 {
-	switch (rdma_port_link_layer(id_priv->id.device, id_priv->id.port_num)) {
+	switch (rdma_port_get_link_layer(id_priv->id.device, id_priv->id.port_num)) {
 	case IB_LINK_LAYER_INFINIBAND:
 		if (id_priv->query)
 			ib_sa_cancel_query(id_priv->query_id, id_priv->query);
@@ -874,7 +874,7 @@ static void cma_leave_mc_groups(struct r
 		mc = container_of(id_priv->mc_list.next,
 				  struct cma_multicast, list);
 		list_del(&mc->list);
-		switch (rdma_port_link_layer(id_priv->cma_dev->device, id_priv->id.port_num)) {
+		switch (rdma_port_get_link_layer(id_priv->cma_dev->device, id_priv->id.port_num)) {
 		case IB_LINK_LAYER_INFINIBAND:
 			ib_sa_free_multicast(mc->multicast.ib);
 			kfree(mc);
@@ -1793,7 +1793,7 @@ static int cma_resolve_iboe_route(struct
 	struct sockaddr_in *src_addr = (struct sockaddr_in *)&route->addr.src_addr;
 	struct sockaddr_in *dst_addr = (struct sockaddr_in *)&route->addr.dst_addr;
 	struct net_device *ndev = NULL;
-	u16 vid = 0;
+	u16 vid;
 
 	if (src_addr->sin_family != dst_addr->sin_family)
 		return -EINVAL;
@@ -1820,9 +1820,7 @@ static int cma_resolve_iboe_route(struct
 		goto err2;
 	}
 
-#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
-	vid = vlan_dev_vlan_id(ndev);
-#endif
+	vid = rdma_vlan_dev_vlan_id(ndev);
 
 	iboe_mac_vlan_to_ll(&route->path_rec->sgid, addr->dev_addr.src_dev_addr, vid);
 	iboe_mac_vlan_to_ll(&route->path_rec->dgid, addr->dev_addr.dst_dev_addr, vid);
@@ -1873,7 +1871,7 @@ int rdma_resolve_route(struct rdma_cm_id
 	atomic_inc(&id_priv->refcount);
 	switch (rdma_node_get_transport(id->device->node_type)) {
 	case RDMA_TRANSPORT_IB:
-		switch (rdma_port_link_layer(id->device, id->port_num)) {
+		switch (rdma_port_get_link_layer(id->device, id->port_num)) {
 		case IB_LINK_LAYER_INFINIBAND:
 			ret = cma_resolve_ib_route(id_priv, timeout_ms);
 			break;
@@ -1935,7 +1933,7 @@ port_found:
 		goto out;
 
 	id_priv->id.route.addr.dev_addr.dev_type =
-		(rdma_port_link_layer(cma_dev->device, p) == IB_LINK_LAYER_INFINIBAND) ?
+		(rdma_port_get_link_layer(cma_dev->device, p) == IB_LINK_LAYER_INFINIBAND) ?
 		ARPHRD_INFINIBAND : ARPHRD_ETHER;
 
 	rdma_addr_set_sgid(&id_priv->id.route.addr.dev_addr, &gid);
@@ -2408,7 +2406,6 @@ static int cma_sidr_rep_handler(struct i
 	struct rdma_cm_event event;
 	struct ib_cm_sidr_rep_event_param *rep = &ib_event->param.sidr_rep_rcvd;
 	int ret = 0;
-	int force_grh;
 
 	if (cma_disable_callback(id_priv, CMA_CONNECT))
 		return 0;
@@ -2438,11 +2435,9 @@ static int cma_sidr_rep_handler(struct i
 			event.status = -EINVAL;
 			break;
 		}
-		force_grh = rdma_port_link_layer(cm_id->device, id_priv->id.port_num) ==
-			IB_LINK_LAYER_ETHERNET ? 1 : 0;
 		ib_init_ah_from_path(id_priv->id.device, id_priv->id.port_num,
 				     id_priv->id.route.path_rec,
-				     &event.param.ud.ah_attr, force_grh);
+				     &event.param.ud.ah_attr);
 		event.param.ud.qp_num = rep->qpn;
 		event.param.ud.qkey = rep->qkey;
 		event.event = RDMA_CM_EVENT_ESTABLISHED;
@@ -3010,7 +3005,7 @@ static void cma_iboe_set_mgid(struct soc
 }
 
 static int cma_iboe_join_multicast(struct rdma_id_private *id_priv,
-				     struct cma_multicast *mc)
+				   struct cma_multicast *mc)
 {
 	struct iboe_mcast_work *work;
 	struct rdma_dev_addr *dev_addr = &id_priv->id.route.addr.dev_addr;
@@ -3094,7 +3089,7 @@ int rdma_join_multicast(struct rdma_cm_i
 
 	switch (rdma_node_get_transport(id->device->node_type)) {
 	case RDMA_TRANSPORT_IB:
-		switch (rdma_port_link_layer(id->device, id->port_num)) {
+		switch (rdma_port_get_link_layer(id->device, id->port_num)) {
 		case IB_LINK_LAYER_INFINIBAND:
 			ret = cma_join_ib_multicast(id_priv, mc);
 			break;
@@ -3139,7 +3134,7 @@ void rdma_leave_multicast(struct rdma_cm
 						&mc->multicast.ib->rec.mgid,
 						mc->multicast.ib->rec.mlid);
 			if (rdma_node_get_transport(id_priv->cma_dev->device->node_type) == RDMA_TRANSPORT_IB) {
-				switch (rdma_port_link_layer(id->device, id->port_num)) {
+				switch (rdma_port_get_link_layer(id->device, id->port_num)) {
 				case IB_LINK_LAYER_INFINIBAND:
 					ib_sa_free_multicast(mc->multicast.ib);
 					kfree(mc);

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/core/mad.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/core/mad.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/core/mad.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -2814,7 +2814,7 @@ static int ib_mad_port_open(struct ib_de
 	init_mad_qp(port_priv, &port_priv->qp_info[1]);
 
 	cq_size = mad_sendq_size + mad_recvq_size;
-	has_smi = rdma_port_link_layer(device, port_num) == IB_LINK_LAYER_INFINIBAND;
+	has_smi = rdma_port_get_link_layer(device, port_num) == IB_LINK_LAYER_INFINIBAND;
 	if (has_smi)
 		cq_size *= 2;
 

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/core/multicast.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/core/multicast.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/core/multicast.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -745,7 +745,7 @@ static void mcast_event_handler(struct i
 	int index;
 
 	dev = container_of(handler, struct mcast_device, event_handler);
-	if (rdma_port_link_layer(dev->device, event->element.port_num) !=
+	if (rdma_port_get_link_layer(dev->device, event->element.port_num) !=
 	    IB_LINK_LAYER_INFINIBAND)
 		return;
 
@@ -776,7 +776,7 @@ static void mcast_add_one(struct ib_devi
 	if (rdma_node_get_transport(device->node_type) != RDMA_TRANSPORT_IB)
 		return;
 
-	dev = kzalloc(sizeof *dev + device->phys_port_cnt * sizeof *port,
+	dev = kmalloc(sizeof *dev + device->phys_port_cnt * sizeof *port,
 		      GFP_KERNEL);
 	if (!dev)
 		return;
@@ -789,7 +789,7 @@ static void mcast_add_one(struct ib_devi
 	}
 
 	for (i = 0; i <= dev->end_port - dev->start_port; i++) {
-		if (rdma_port_link_layer(device, dev->start_port + i) !=
+		if (rdma_port_get_link_layer(device, dev->start_port + i) !=
 		    IB_LINK_LAYER_INFINIBAND)
 			continue;
 		port = &dev->port[i];
@@ -828,7 +828,7 @@ static void mcast_remove_one(struct ib_d
 	flush_workqueue(mcast_wq);
 
 	for (i = 0; i <= dev->end_port - dev->start_port; i++) {
-		if (rdma_port_link_layer(device, dev->start_port + i) ==
+		if (rdma_port_get_link_layer(device, dev->start_port + i) ==
 		    IB_LINK_LAYER_INFINIBAND) {
 			port = &dev->port[i];
 			deref_port(port);

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/core/sa_query.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/core/sa_query.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/core/sa_query.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -580,17 +580,17 @@ static void ib_sa_event(struct ib_event_
 		struct ib_sa_port *port =
 			&sa_dev->port[event->element.port_num - sa_dev->start_port];
 
-		if (rdma_port_link_layer(handler->device, port->port_num) == IB_LINK_LAYER_INFINIBAND) {
-			spin_lock_irqsave(&port->ah_lock, flags);
-			if (port->sm_ah)
-				kref_put(&port->sm_ah->ref, free_sm_ah);
-			port->sm_ah = NULL;
-			spin_unlock_irqrestore(&port->ah_lock, flags);
+		if (rdma_port_get_link_layer(handler->device, port->port_num) != IB_LINK_LAYER_INFINIBAND)
+			return;
 
-			schedule_work(&sa_dev->port[event->element.port_num -
-				      sa_dev->start_port].update_task);
-		}
+		spin_lock_irqsave(&port->ah_lock, flags);
+		if (port->sm_ah)
+			kref_put(&port->sm_ah->ref, free_sm_ah);
+		port->sm_ah = NULL;
+		spin_unlock_irqrestore(&port->ah_lock, flags);
 
+		schedule_work(&sa_dev->port[event->element.port_num -
+					    sa_dev->start_port].update_task);
 	}
 }
 
@@ -656,11 +656,11 @@ static u8 get_src_path_mask(struct ib_de
 }
 
 int ib_init_ah_from_path(struct ib_device *device, u8 port_num,
-			 struct ib_sa_path_rec *rec, struct ib_ah_attr *ah_attr,
-			 int force_grh)
+			 struct ib_sa_path_rec *rec, struct ib_ah_attr *ah_attr)
 {
 	int ret;
 	u16 gid_index;
+	int force_grh;
 
 	memset(ah_attr, 0, sizeof *ah_attr);
 	ah_attr->dlid = be16_to_cpu(rec->dlid);
@@ -670,6 +670,8 @@ int ib_init_ah_from_path(struct ib_devic
 	ah_attr->port_num = port_num;
 	ah_attr->static_rate = rec->rate;
 
+	force_grh = rdma_port_get_link_layer(device, port_num) == IB_LINK_LAYER_ETHERNET;
+
 	if (rec->hop_limit > 1 || force_grh) {
 		ah_attr->ah_flags = IB_AH_GRH;
 		ah_attr->grh.dgid = rec->dgid;
@@ -1337,7 +1339,7 @@ static void ib_sa_add_one(struct ib_devi
 
 	for (i = 0; i <= e - s; ++i) {
 		spin_lock_init(&sa_dev->port[i].ah_lock);
-		if (rdma_port_link_layer(device, i + 1) != IB_LINK_LAYER_INFINIBAND)
+		if (rdma_port_get_link_layer(device, i + 1) != IB_LINK_LAYER_INFINIBAND)
 			continue;
 
 		sa_dev->port[i].sm_ah    = NULL;
@@ -1377,14 +1379,14 @@ static void ib_sa_add_one(struct ib_devi
 		goto err;
 
 	for (i = 0; i <= e - s; ++i)
-		if (rdma_port_link_layer(device, i + 1) == IB_LINK_LAYER_INFINIBAND)
+		if (rdma_port_get_link_layer(device, i + 1) == IB_LINK_LAYER_INFINIBAND)
 			update_sm_ah(&sa_dev->port[i].update_task);
 
 	return;
 
 err:
 	while (--i >= 0)
-		if (rdma_port_link_layer(device, i + 1) == IB_LINK_LAYER_INFINIBAND) {
+		if (rdma_port_get_link_layer(device, i + 1) == IB_LINK_LAYER_INFINIBAND) {
 			if (!IS_ERR(sa_dev->port[i].notice_agent))
 				ib_unregister_mad_agent(sa_dev->port[i].notice_agent);
 			if (!IS_ERR(sa_dev->port[i].agent))
@@ -1409,7 +1411,7 @@ static void ib_sa_remove_one(struct ib_d
 	flush_scheduled_work();
 
 	for (i = 0; i <= sa_dev->end_port - sa_dev->start_port; ++i) {
-		if (rdma_port_link_layer(device, i + 1) == IB_LINK_LAYER_INFINIBAND) {
+		if (rdma_port_get_link_layer(device, i + 1) == IB_LINK_LAYER_INFINIBAND) {
 			ib_unregister_mad_agent(sa_dev->port[i].notice_agent);
 			ib_unregister_mad_agent(sa_dev->port[i].agent);
 			if (sa_dev->port[i].sm_ah)

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/core/sysfs.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/core/sysfs.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/core/sysfs.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -79,7 +79,7 @@ static ssize_t port_attr_show(struct kob
 	return port_attr->show(p, port_attr, buf);
 }
 
-static struct sysfs_ops port_sysfs_ops = {
+static const struct sysfs_ops port_sysfs_ops = {
 	.show = port_attr_show
 };
 
@@ -225,7 +225,7 @@ static ssize_t phys_state_show(struct ib
 static ssize_t link_layer_show(struct ib_port *p, struct port_attribute *unused,
 			       char *buf)
 {
-	switch (rdma_port_link_layer(p->ibdev, p->port_num)) {
+	switch (rdma_port_get_link_layer(p->ibdev, p->port_num)) {
 	case IB_LINK_LAYER_INFINIBAND:
 		return sprintf(buf, "%s\n", "IB");
 	case IB_LINK_LAYER_ETHERNET:

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/core/ucma.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/core/ucma.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/core/ucma.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -49,7 +49,7 @@ MODULE_DESCRIPTION("RDMA Userspace Conne
 MODULE_LICENSE("Dual BSD/GPL");
 
 enum {
-	UCMA_MAX_BACKLOG	= 128
+	UCMA_MAX_BACKLOG	= 1024
 };
 
 struct ucma_file {
@@ -582,7 +582,7 @@ static void ucma_copy_ib_route(struct rd
 }
 
 static void ucma_copy_iboe_route(struct rdma_ucm_query_route_resp *resp,
-				   struct rdma_route *route)
+				 struct rdma_route *route)
 {
 	struct rdma_dev_addr *dev_addr;
 	struct net_device *dev;
@@ -593,17 +593,16 @@ static void ucma_copy_iboe_route(struct 
 	case 0:
 		dev_addr = &route->addr.dev_addr;
 		dev = dev_get_by_index(&init_net, dev_addr->bound_dev_if);
-		if (dev) {
-#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
-			vid = vlan_dev_vlan_id(dev);
-#endif
-			dev_put(dev);
-		}
+			if (dev) {
+				vid = rdma_vlan_dev_vlan_id(dev);
+				dev_put(dev);
+			}
+
 
 		iboe_mac_vlan_to_ll((union ib_gid *) &resp->ib_route[0].dgid,
 				    dev_addr->dst_dev_addr, vid);
 		iboe_addr_get_sgid(dev_addr,
-				 (union ib_gid *) &resp->ib_route[0].sgid);
+				   (union ib_gid *) &resp->ib_route[0].sgid);
 		resp->ib_route[0].pkey = cpu_to_be16(0xffff);
 		break;
 	case 2:
@@ -654,7 +653,7 @@ static ssize_t ucma_query_route(struct u
 	resp.node_guid = (__force __u64) ctx->cm_id->device->node_guid;
 	resp.port_num = ctx->cm_id->port_num;
 	if (rdma_node_get_transport(ctx->cm_id->device->node_type) == RDMA_TRANSPORT_IB) {
-		switch (rdma_port_link_layer(ctx->cm_id->device, ctx->cm_id->port_num)) {
+		switch (rdma_port_get_link_layer(ctx->cm_id->device, ctx->cm_id->port_num)) {
 		case IB_LINK_LAYER_INFINIBAND:
 			ucma_copy_ib_route(&resp, &ctx->cm_id->route);
 			break;

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/core/ud_header.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/core/ud_header.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/core/ud_header.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -269,7 +269,7 @@ void ib_ud_header_init(int     		    pay
 	if (lrh_present)
 		header->lrh.packet_length = cpu_to_be16(packet_length);
 
-	if (header->immediate_present)
+	if (immediate_present)
 		header->bth.opcode           = IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE;
 	else
 		header->bth.opcode           = IB_OPCODE_UD_SEND_ONLY;

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/core/user_mad.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/core/user_mad.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/core/user_mad.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -1137,7 +1137,7 @@ static void ib_umad_add_one(struct ib_de
 	for (i = s; i <= e; ++i) {
 		umad_dev->port[i - s].umad_dev = umad_dev;
 
-		if (rdma_port_link_layer(device, i) == IB_LINK_LAYER_INFINIBAND)
+		if (rdma_port_get_link_layer(device, i) == IB_LINK_LAYER_INFINIBAND)
 			if (ib_umad_init_port(device, i, &umad_dev->port[i - s]))
 				goto err;
 	}
@@ -1148,7 +1148,7 @@ static void ib_umad_add_one(struct ib_de
 
 err:
 	while (--i >= s)
-		if (rdma_port_link_layer(device, i) == IB_LINK_LAYER_INFINIBAND)
+		if (rdma_port_get_link_layer(device, i) == IB_LINK_LAYER_INFINIBAND)
 			ib_umad_kill_port(&umad_dev->port[i - s]);
 
 	kref_put(&umad_dev->ref, ib_umad_release_dev);
@@ -1163,7 +1163,7 @@ static void ib_umad_remove_one(struct ib
 		return;
 
 	for (i = 0; i <= umad_dev->end_port - umad_dev->start_port; ++i)
-		if (rdma_port_link_layer(device, i + 1) == IB_LINK_LAYER_INFINIBAND)
+		if (rdma_port_get_link_layer(device, i + 1) == IB_LINK_LAYER_INFINIBAND)
 			ib_umad_kill_port(&umad_dev->port[i]);
 
 	kref_put(&umad_dev->ref, ib_umad_release_dev);

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/core/uverbs.h
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/core/uverbs.h	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/core/uverbs.h	Mon Jan  3 05:14:39 2011	(r216906)
@@ -214,7 +214,6 @@ IB_UVERBS_DECLARE_CMD(modify_xrc_rcv_qp)
 IB_UVERBS_DECLARE_CMD(query_xrc_rcv_qp);
 IB_UVERBS_DECLARE_CMD(reg_xrc_rcv_qp);
 IB_UVERBS_DECLARE_CMD(unreg_xrc_rcv_qp);
-IB_UVERBS_DECLARE_CMD(get_eth_l2_addr);
 
 
 #endif /* UVERBS_H */

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/core/uverbs_cmd.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/core/uverbs_cmd.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/core/uverbs_cmd.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -1856,38 +1856,6 @@ err:
 	return ret;
 }
 
-ssize_t ib_uverbs_get_eth_l2_addr(struct ib_uverbs_file *file, const char __user *buf,
-				  int in_len, int out_len)
-{
-	struct ib_uverbs_get_eth_l2_addr       cmd;
-	struct ib_uverbs_get_eth_l2_addr_resp  resp;
-	int              ret;
-	struct ib_pd    *pd;
-
-	if (out_len < sizeof resp)
-		return -ENOSPC;
-
-	if (copy_from_user(&cmd, buf, sizeof cmd))
-		return -EFAULT;
-
-	pd = idr_read_pd(cmd.pd_handle, file->ucontext);
-	if (!pd)
-		return -EINVAL;
-
-	ret = ib_get_eth_l2_addr(pd->device, cmd.port, (union ib_gid *)cmd.gid,
-				 cmd.sgid_idx, resp.mac, &resp.vlan_id);
-	put_pd_read(pd);
-	if (!ret) {
-		if (copy_to_user((void __user *) (unsigned long) cmd.response,
-				 &resp, sizeof resp))
-			return -EFAULT;
-
-		return in_len;
-	}
-
-	return ret;
-}
-
 ssize_t ib_uverbs_destroy_ah(struct ib_uverbs_file *file,
 			     const char __user *buf, int in_len, int out_len)
 {

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/core/uverbs_main.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/core/uverbs_main.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/core/uverbs_main.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -117,7 +117,6 @@ static ssize_t (*uverbs_cmd_table[])(str
 	[IB_USER_VERBS_CMD_QUERY_XRC_RCV_QP]	= ib_uverbs_query_xrc_rcv_qp,
 	[IB_USER_VERBS_CMD_REG_XRC_RCV_QP]	= ib_uverbs_reg_xrc_rcv_qp,
 	[IB_USER_VERBS_CMD_UNREG_XRC_RCV_QP]	= ib_uverbs_unreg_xrc_rcv_qp,
-	[IB_USER_VERBS_CMD_GET_ETH_L2_ADDR]	= ib_uverbs_get_eth_l2_addr,
 };
 
 static struct vfsmount *uverbs_event_mnt;

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/core/verbs.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/core/verbs.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/core/verbs.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -94,7 +94,7 @@ rdma_node_get_transport(enum rdma_node_t
 }
 EXPORT_SYMBOL(rdma_node_get_transport);
 
-enum rdma_link_layer rdma_port_link_layer(struct ib_device *device, u8 port_num)
+enum rdma_link_layer rdma_port_get_link_layer(struct ib_device *device, u8 port_num)
 {
 	if (device->get_link_layer)
 		return device->get_link_layer(device, port_num);
@@ -108,7 +108,7 @@ enum rdma_link_layer rdma_port_link_laye
 		return IB_LINK_LAYER_UNSPECIFIED;
 	}
 }
-EXPORT_SYMBOL(rdma_port_link_layer);
+EXPORT_SYMBOL(rdma_port_get_link_layer);
 
 /* Protection domains */
 
@@ -371,8 +371,8 @@ EXPORT_SYMBOL(ib_create_qp);
 
 static const struct {
 	int			valid;
-	enum ib_qp_attr_mask	req_param[IB_QPT_RAW_ETY + 1];
-	enum ib_qp_attr_mask	opt_param[IB_QPT_RAW_ETY + 1];
+	enum ib_qp_attr_mask	req_param[IB_QPT_RAW_ETH + 1];
+	enum ib_qp_attr_mask	opt_param[IB_QPT_RAW_ETH + 1];
 } qp_state_table[IB_QPS_ERR + 1][IB_QPS_ERR + 1] = {
 	[IB_QPS_RESET] = {
 		[IB_QPS_RESET] = { .valid = 1 },
@@ -382,6 +382,7 @@ static const struct {
 				[IB_QPT_UD]  = (IB_QP_PKEY_INDEX		|
 						IB_QP_PORT			|
 						IB_QP_QKEY),
+				[IB_QPT_RAW_ETH] = IB_QP_PORT,
 				[IB_QPT_UC]  = (IB_QP_PKEY_INDEX		|
 						IB_QP_PORT			|
 						IB_QP_ACCESS_FLAGS),
@@ -1001,9 +1002,21 @@ int ib_attach_mcast(struct ib_qp *qp, un
 {
 	if (!qp->device->attach_mcast)
 		return -ENOSYS;
-	if (gid->raw[0] != 0xff || qp->qp_type != IB_QPT_UD)
-		return -EINVAL;
 
+	switch (rdma_node_get_transport(qp->device->node_type)) {
+	case RDMA_TRANSPORT_IB:
+		if (qp->qp_type == IB_QPT_RAW_ETH) {
+			/* In raw Etherent mgids the 63 msb's should be 0 */
+			if (gid->global.subnet_prefix & cpu_to_be64(~1ULL))
+				return -EINVAL;
+		} else if (gid->raw[0] != 0xff || qp->qp_type != IB_QPT_UD)
+			return -EINVAL;
+		break;
+	case RDMA_TRANSPORT_IWARP:
+		if (qp->qp_type != IB_QPT_RAW_ETH)
+			return -EINVAL;
+		break;
+	}
 	return qp->device->attach_mcast(qp, gid, lid);
 }
 EXPORT_SYMBOL(ib_attach_mcast);
@@ -1012,9 +1025,21 @@ int ib_detach_mcast(struct ib_qp *qp, un
 {
 	if (!qp->device->detach_mcast)
 		return -ENOSYS;
-	if (gid->raw[0] != 0xff || qp->qp_type != IB_QPT_UD)
-		return -EINVAL;
 
+	switch (rdma_node_get_transport(qp->device->node_type)) {
+	case RDMA_TRANSPORT_IB:
+		if (qp->qp_type == IB_QPT_RAW_ETH) {
+			/* In raw Etherent mgids the 63 msb's should be 0 */
+			if (gid->global.subnet_prefix & cpu_to_be64(~1ULL))
+				return -EINVAL;
+		} else if (gid->raw[0] != 0xff || qp->qp_type != IB_QPT_UD)
+			return -EINVAL;
+		break;
+	case RDMA_TRANSPORT_IWARP:
+		if (qp->qp_type != IB_QPT_RAW_ETH)
+			return -EINVAL;
+		break;
+	}
 	return qp->device->detach_mcast(qp, gid, lid);
 }
 EXPORT_SYMBOL(ib_detach_mcast);
@@ -1046,12 +1071,3 @@ struct ib_xrcd *ib_alloc_xrcd(struct ib_
 }
 EXPORT_SYMBOL(ib_alloc_xrcd);
 
-int ib_get_eth_l2_addr(struct ib_device *device, u8 port, union ib_gid *gid,
-		       int sgid_idx, u8 *mac, __u16 *vlan_id)
-{
-	if (!device->get_eth_l2_addr)
-		return -ENOSYS;
-
-	return device->get_eth_l2_addr(device, port, gid, sgid_idx, mac, vlan_id);
-}
-EXPORT_SYMBOL(ib_get_eth_l2_addr);

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/debug/memtrack.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/debug/memtrack.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/debug/memtrack.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -435,13 +435,10 @@ static int create_procfs_tree(void)
         for (i=0, bit_mask=1; i<MEMTRACK_NUM_OF_MEMTYPES; ++i, bit_mask<<=1) {
                 if (bit_mask & track_mask) {
                         proc_ent = create_proc_entry(rsc_names[i], S_IRUGO, memtrack_tree);
-                        if ( !proc_ent ) {
+                        if ( !proc_ent )
                                 goto undo_create_root;
-                        }
-                        else {
-                                proc_ent->proc_fops = &memtrack_proc_fops;
-                                proc_ent->owner = THIS_MODULE;
-                        }
+
+			proc_ent->proc_fops = &memtrack_proc_fops;
                 }
         }
 

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_hal.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_hal.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_hal.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -109,7 +109,6 @@ int cxio_hal_cq_op(struct cxio_rdev *rde
 		while (!CQ_VLD_ENTRY(rptr, cq->size_log2, cqe)) {
 			udelay(1);
 			if (i++ > 1000000) {
-				BUG_ON(1);
 				printk(KERN_ERR "%s: stalled rnic\n",
 				       rdev_p->dev_name);
 				return -EIO;

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_hal.h
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_hal.h	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_hal.h	Mon Jan  3 05:14:39 2011	(r216906)
@@ -52,7 +52,7 @@
 #define T3_MAX_PBL_SIZE 256
 #define T3_MAX_RQ_SIZE 1024
 #define T3_MAX_QP_DEPTH (T3_MAX_RQ_SIZE-1)
-#define T3_MAX_CQ_DEPTH 262144
+#define T3_MAX_CQ_DEPTH 65536
 #define T3_MAX_NUM_STAG (1<<15)
 #define T3_MAX_MR_SIZE 0x100000000ULL
 #define T3_PAGESIZE_MASK 0xffff000  /* 4KB-128MB */

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_resource.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_resource.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_resource.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -39,6 +39,8 @@
 #include "cxio_resource.h"
 #include "cxio_hal.h"
 
+#include "genalloc.c"
+
 static struct kfifo *rhdl_fifo;
 static spinlock_t rhdl_fifo_lock;
 

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_resource.h
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_resource.h	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_resource.h	Mon Jan  3 05:14:39 2011	(r216906)
@@ -38,7 +38,6 @@
 #include <linux/kfifo.h>
 #include <linux/spinlock.h>
 #include <linux/errno.h>
-#include <linux/genalloc.h>
 #include "cxio_hal.h"
 
 extern int cxio_hal_init_rhdl_resource(u32 nr_rhdl);

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/iwch_cm.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/iwch_cm.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/iwch_cm.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -486,7 +486,8 @@ static int send_connect(struct iwch_ep *
 	    V_MSS_IDX(mtu_idx) |
 	    V_L2T_IDX(ep->l2t->idx) | V_TX_CHANNEL(ep->l2t->smt_idx);
 	opt0l = V_TOS((ep->tos >> 2) & M_TOS) | V_RCV_BUFSIZ(rcv_win>>10);
-	opt2 = V_FLAVORS_VALID(1) | V_CONG_CONTROL_FLAVOR(cong_flavor);
+	opt2 = F_RX_COALESCE_VALID | V_RX_COALESCE(0) | V_FLAVORS_VALID(1) |
+	       V_CONG_CONTROL_FLAVOR(cong_flavor);
 	skb->priority = CPL_PRIORITY_SETUP;
 	set_arp_failure_handler(skb, act_open_req_arp_failure);
 
@@ -1303,7 +1304,8 @@ static void accept_cr(struct iwch_ep *ep
 	    V_MSS_IDX(mtu_idx) |
 	    V_L2T_IDX(ep->l2t->idx) | V_TX_CHANNEL(ep->l2t->smt_idx);
 	opt0l = V_TOS((ep->tos >> 2) & M_TOS) | V_RCV_BUFSIZ(rcv_win>>10);
-	opt2 = V_FLAVORS_VALID(1) | V_CONG_CONTROL_FLAVOR(cong_flavor);
+	opt2 = F_RX_COALESCE_VALID | V_RX_COALESCE(0) | V_FLAVORS_VALID(1) |
+	       V_CONG_CONTROL_FLAVOR(cong_flavor);
 
 	rpl = cplhdr(skb);
 	rpl->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_main.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_main.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_main.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -359,7 +359,8 @@ static int ehca_sense_attributes(struct 
 	 * a firmware property, so it's valid across all adapters
 	 */
 	if (ehca_lock_hcalls == -1)
-		ehca_lock_hcalls = !(shca->hca_cap & HCA_CAP_H_ALLOC_RES_SYNC);
+		ehca_lock_hcalls = !EHCA_BMASK_GET(HCA_CAP_H_ALLOC_RES_SYNC,
+					shca->hca_cap);
 
 	/* translate supported MR page sizes; always support 4K */
 	shca->hca_cap_mr_pgsize = EHCA_PAGESIZE;

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/ah.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/ah.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/ah.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -100,15 +100,19 @@ static struct ib_ah *create_iboe_ah(stru
 	int err;
 	int is_mcast;
 	u16 vlan_tag;
+	union ib_gid sgid;
 
 	err = mlx4_ib_resolve_grh(ibdev, ah_attr, mac, &is_mcast, ah_attr->port_num);
 	if (err)
 		return ERR_PTR(err);
 
-	memcpy(ah->av.eth.mac_0_1, mac, 2);
-	memcpy(ah->av.eth.mac_2_5, mac + 2, 4);
-	vlan_tag = rdma_get_vlan_id(&ah_attr->grh.dgid);
-	vlan_tag |= (ah_attr->sl & 7) << 13;
+	memcpy(ah->av.eth.mac, mac, 6);
+	err = ib_get_cached_gid(pd->device, ah_attr->port_num, ah_attr->grh.sgid_index, &sgid);
+	if (err)
+		return ERR_PTR(err);
+	vlan_tag = rdma_get_vlan_id(&sgid);
+	if (vlan_tag < 0x1000)
+		vlan_tag |= (ah_attr->sl & 7) << 13;
 	ah->av.eth.port_pd = cpu_to_be32(to_mpd(pd)->pdn | (ah_attr->port_num << 24));
 	ah->av.eth.gid_index = ah_attr->grh.sgid_index;
 	ah->av.eth.vlan = cpu_to_be16(vlan_tag);
@@ -140,7 +144,7 @@ struct ib_ah *mlx4_ib_create_ah(struct i
 	if (!ah)
 		return ERR_PTR(-ENOMEM);
 
-	if (rdma_port_link_layer(pd->device, ah_attr->port_num) == IB_LINK_LAYER_ETHERNET) {
+	if (rdma_port_get_link_layer(pd->device, ah_attr->port_num) == IB_LINK_LAYER_ETHERNET) {
 		if (!(ah_attr->ah_flags & IB_AH_GRH)) {
 			ret = ERR_PTR(-EINVAL);
 			goto out;
@@ -172,7 +176,7 @@ int mlx4_ib_query_ah(struct ib_ah *ibah,
 	memset(ah_attr, 0, sizeof *ah_attr);
 	ah_attr->sl = be32_to_cpu(ah->av.ib.sl_tclass_flowlabel) >> 28;
 	ah_attr->port_num = be32_to_cpu(ah->av.ib.port_pd) >> 24;
-	ll = rdma_port_link_layer(ibah->device, ah_attr->port_num);
+	ll = rdma_port_get_link_layer(ibah->device, ah_attr->port_num);
 	ah_attr->dlid = ll == IB_LINK_LAYER_INFINIBAND ? be16_to_cpu(ah->av.ib.dlid) : 0;
 	if (ah->av.ib.stat_rate)
 		ah_attr->static_rate = ah->av.ib.stat_rate - MLX4_STAT_RATE_OFFSET;
@@ -199,26 +203,3 @@ int mlx4_ib_destroy_ah(struct ib_ah *ah)
 	return 0;
 }
 
-int mlx4_ib_get_eth_l2_addr(struct ib_device *device, u8 port, union ib_gid *dgid,
-			    int sgid_idx, u8 *mac, u16 *vlan_id)
-{
-	int err;
-	struct mlx4_ib_dev *ibdev = to_mdev(device);
-	struct ib_ah_attr ah_attr = {
-		.port_num = port,
-	};
-	int is_mcast;
-	union ib_gid sgid;
-
-	memcpy(ah_attr.grh.dgid.raw, dgid, 16);
-	err = mlx4_ib_resolve_grh(ibdev, &ah_attr, mac, &is_mcast, port);
-	if (err)
-		ERR_PTR(err);
-
-	err = ib_get_cached_gid(device, port, sgid_idx, &sgid);
-	if (err)
-		return err;
-	*vlan_id = rdma_get_vlan_id(&sgid);
-	return 0;
-}
-

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/cq.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/cq.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/cq.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -407,10 +407,14 @@ int mlx4_ib_resize_cq(struct ib_cq *ibcq
 		cq->resize_buf = NULL;
 		cq->resize_umem = NULL;
 	} else {
+		struct mlx4_ib_cq_buf tmp_buf;
+		int tmp_cqe = 0;
+ 
 		spin_lock_irq(&cq->lock);
 		if (cq->resize_buf) {
 			mlx4_ib_cq_resize_copy_cqes(cq);
-			mlx4_ib_free_cq_buf(dev, &cq->buf, cq->ibcq.cqe);
+			tmp_buf = cq->buf;
+			tmp_cqe = cq->ibcq.cqe;
 			cq->buf      = cq->resize_buf->buf;
 			cq->ibcq.cqe = cq->resize_buf->cqe;
 
@@ -418,6 +422,9 @@ int mlx4_ib_resize_cq(struct ib_cq *ibcq
 			cq->resize_buf = NULL;
 		}
 		spin_unlock_irq(&cq->lock);
+
+		if (tmp_cqe)
+			mlx4_ib_free_cq_buf(dev, &tmp_buf, tmp_cqe);
 	}
 
 	goto out;
@@ -785,7 +792,7 @@ int mlx4_ib_arm_cq(struct ib_cq *ibcq, e
 	mlx4_cq_arm(&to_mcq(ibcq)->mcq,
 		    (flags & IB_CQ_SOLICITED_MASK) == IB_CQ_SOLICITED ?
 		    MLX4_CQ_DB_REQ_NOT_SOL : MLX4_CQ_DB_REQ_NOT,
-		    to_mdev(ibcq->device)->uar_map,
+		    to_mdev(ibcq->device)->priv_uar.map,
 		    MLX4_GET_DOORBELL_LOCK(&to_mdev(ibcq->device)->uar_lock));
 
 	return 0;

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/mad.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/mad.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/mad.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -229,6 +229,16 @@ static void forward_trap(struct mlx4_ib_
 	}
 }
 
+static int is_vendor_id(__be16 attr_id)
+{
+	return (attr_id & IB_SMP_ATTR_VENDOR_MASK) == IB_SMP_ATTR_VENDOR_MASK;
+}
+
+static int supported_vendor_id(__be16 attr_id)
+{
+	return 1;
+}
+
 static int ib_process_mad(struct ib_device *ibdev, int mad_flags, u8 port_num,
                           struct ib_wc *in_wc, struct ib_grh *in_grh,
                           struct ib_mad *in_mad, struct ib_mad *out_mad)
@@ -256,8 +266,8 @@ static int ib_process_mad(struct ib_devi
 		 * MADs -- the SMA can't handle them.
 		 */
 		if (in_mad->mad_hdr.attr_id == IB_SMP_ATTR_SM_INFO ||
-		    ((in_mad->mad_hdr.attr_id & IB_SMP_ATTR_VENDOR_MASK) ==
-		     IB_SMP_ATTR_VENDOR_MASK))
+		    (is_vendor_id(in_mad->mad_hdr.attr_id) &&
+		    !supported_vendor_id(in_mad->mad_hdr.attr_id)))
 			return IB_MAD_RESULT_SUCCESS;
 	} else if (in_mad->mad_hdr.mgmt_class == IB_MGMT_CLASS_PERF_MGMT ||
 		   in_mad->mad_hdr.mgmt_class == MLX4_IB_VENDOR_CLASS1   ||
@@ -343,6 +353,7 @@ static int rdmaoe_process_mad(struct ib_
 	if (err)
 		err = IB_MAD_RESULT_FAILURE;
 	else {
+		memset(out_mad->data, 0, sizeof out_mad->data);
 		mode = be32_to_cpu(((struct mlx4_counters *)mailbox->buf)->counter_mode) & 0xf;
 		switch (mode) {
 		case 0:
@@ -367,7 +378,7 @@ int mlx4_ib_process_mad(struct ib_device
 			struct ib_wc *in_wc, struct ib_grh *in_grh,
 			struct ib_mad *in_mad, struct ib_mad *out_mad)
 {
-	switch (rdma_port_link_layer(ibdev, port_num)) {
+	switch (rdma_port_get_link_layer(ibdev, port_num)) {
 	case IB_LINK_LAYER_INFINIBAND:
 		return ib_process_mad(ibdev, mad_flags, port_num, in_wc,
 				      in_grh, in_mad, out_mad);
@@ -393,7 +404,7 @@ int mlx4_ib_mad_init(struct mlx4_ib_dev 
 	enum rdma_link_layer ll;
 
 	for (p = 0; p < dev->num_ports; ++p) {
-		ll = rdma_port_link_layer(&dev->ib_dev, p + 1);
+		ll = rdma_port_get_link_layer(&dev->ib_dev, p + 1);
 		for (q = 0; q <= 1; ++q) {
 			if (ll == IB_LINK_LAYER_INFINIBAND) {
 				agent = ib_register_mad_agent(&dev->ib_dev, p + 1,

Modified: projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/main.c
==============================================================================
--- projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/main.c	Mon Jan  3 03:34:59 2011	(r216905)
+++ projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/main.c	Mon Jan  3 05:14:39 2011	(r216906)
@@ -51,8 +51,8 @@
 #include "wc.h"
 
 #define DRV_NAME	MLX4_IB_DRV_NAME
-#define DRV_VERSION	"1.0-ofed1.5.1"
-#define DRV_RELDATE	"April 4, 2008"
+#define DRV_VERSION	"1.0-ofed1.5.2"
+#define DRV_RELDATE	"August 4, 2010"
 
 MODULE_AUTHOR("Roland Dreier");
 MODULE_DESCRIPTION("Mellanox ConnectX HCA InfiniBand driver");
@@ -169,7 +169,7 @@ static int mlx4_ib_query_device(struct i
 	props->max_srq		   = dev->dev->caps.num_srqs - dev->dev->caps.reserved_srqs;
 	props->max_srq_wr	   = dev->dev->caps.max_srq_wqes - 1;
 	props->max_srq_sge	   = dev->dev->caps.max_srq_sge;
-	props->max_fast_reg_page_list_len = PAGE_SIZE / sizeof (u64);
+	props->max_fast_reg_page_list_len = MAX_FAST_REG_PAGES;
 	props->local_ca_ack_delay  = dev->dev->caps.local_ca_ack_delay;
 	props->atomic_cap	   = dev->dev->caps.flags & MLX4_DEV_CAP_FLAG_ATOMIC ?
 		IB_ATOMIC_HCA : IB_ATOMIC_NONE;
@@ -263,35 +263,10 @@ static int eth_link_query_port(struct ib
 {
 	struct mlx4_ib_iboe *iboe = &to_mdev(ibdev)->iboe;
 	struct net_device *ndev;
-	struct mlx4_cmd_mailbox *mailbox;
-	struct mlx4_dev *dev = to_mdev(ibdev)->dev;
-	int err;
-	u32 *outbox;
-	u32 fl;
 	enum ib_mtu tmp;
 
-	mailbox = mlx4_alloc_cmd_mailbox(dev);
-	if (IS_ERR(mailbox))
-		return PTR_ERR(mailbox);
-
-	err = mlx4_cmd_box(dev, 0, mailbox->dma, port, 0, MLX4_CMD_QUERY_PORT,
-			   MLX4_CMD_TIME_CLASS_B);
-	if (err)
-		goto out;
-	outbox = mailbox->buf;
-
-	fl = be32_to_cpu(outbox[0x40 / 4]);
-	if (fl & 1 << 31)
-		props->active_width = eth_to_ib_width(fl & 0xffff);
-	else
-		props->active_width = IB_WIDTH_1X;
-
-	fl = be32_to_cpu(outbox[0x44 / 4]);
-	if (fl & 1 << 31)
-		props->active_speed = eth_to_ib_speed(fl & 0xffff);
-	else
-		props->active_speed = 1;
-
+	props->active_width	= IB_WIDTH_4X;
+	props->active_speed	= 1;
 	props->port_cap_flags	= IB_PORT_CM_SUP;
 	props->gid_tbl_len	= to_mdev(ibdev)->dev->caps.gid_table_len[port];
 	props->max_msg_sz	= to_mdev(ibdev)->dev->caps.max_msg_sz;
@@ -309,19 +284,17 @@ static int eth_link_query_port(struct ib
 	spin_lock(&iboe->lock);
 	ndev = iboe->netdevs[port - 1];
 	if (!ndev)
-		goto out_ul;
+		goto out;
 
 	tmp = iboe_get_mtu(ndev->mtu);
-	props->active_mtu = tmp ? min(props->max_mtu, tmp) : 0;
-	props->state		= netif_running(ndev) &&  netif_oper_up(ndev) ?
+	props->active_mtu = tmp ? min(props->max_mtu, tmp) : IB_MTU_256;
+	props->state		= netif_carrier_ok(ndev) &&  netif_oper_up(ndev) ?
 					IB_PORT_ACTIVE : IB_PORT_DOWN;
 	props->phys_state	= state_to_phys_state(props->state);
 
-out_ul:
-	spin_unlock(&iboe->lock);
 out:
-	mlx4_free_cmd_mailbox(dev, mailbox);
-	return err;
+	spin_unlock(&iboe->lock);
+	return 0;
 }
 
 static int mlx4_ib_query_port(struct ib_device *ibdev, u8 port,
@@ -408,7 +381,7 @@ static int iboe_query_gid(struct ib_devi
 static int mlx4_ib_query_gid(struct ib_device *ibdev, u8 port, int index,
 			     union ib_gid *gid)
 {
-	if (rdma_port_link_layer(ibdev, port) == IB_LINK_LAYER_INFINIBAND)
+	if (rdma_port_get_link_layer(ibdev, port) == IB_LINK_LAYER_INFINIBAND)
 		return __mlx4_ib_query_gid(ibdev, port, index, gid);
 	else
 		return iboe_query_gid(ibdev, port, index, gid);
@@ -445,14 +418,34 @@ out:
 static int mlx4_ib_modify_device(struct ib_device *ibdev, int mask,
 				 struct ib_device_modify *props)
 {
+	struct mlx4_cmd_mailbox *mailbox;
+	int err;
+
 	if (mask & ~IB_DEVICE_MODIFY_NODE_DESC)

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201101030514.p035Edh5075422>