Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f78cf0dc authored by Linus Torvalds's avatar Linus Torvalds
Browse files
parents 4cbf8767 7d2babc4
Loading
Loading
Loading
Loading
+9 −1
Original line number Original line Diff line number Diff line
@@ -665,7 +665,15 @@ static int handle_outgoing_dr_smp(struct ib_mad_agent_private *mad_agent_priv,
	struct ib_wc mad_wc;
	struct ib_wc mad_wc;
	struct ib_send_wr *send_wr = &mad_send_wr->send_wr;
	struct ib_send_wr *send_wr = &mad_send_wr->send_wr;


	if (!smi_handle_dr_smp_send(smp, device->node_type, port_num)) {
	/*
	 * Directed route handling starts if the initial LID routed part of
	 * a request or the ending LID routed part of a response is empty.
	 * If we are at the start of the LID routed part, don't update the
	 * hop_ptr or hop_cnt.  See section 14.2.2, Vol 1 IB spec.
	 */
	if ((ib_get_smp_direction(smp) ? smp->dr_dlid : smp->dr_slid) ==
	     IB_LID_PERMISSIVE &&
	    !smi_handle_dr_smp_send(smp, device->node_type, port_num)) {
		ret = -EINVAL;
		ret = -EINVAL;
		printk(KERN_ERR PFX "Invalid directed route\n");
		printk(KERN_ERR PFX "Invalid directed route\n");
		goto out;
		goto out;
+19 −19
Original line number Original line Diff line number Diff line
@@ -1029,25 +1029,6 @@ int mthca_QUERY_DEV_LIM(struct mthca_dev *dev,
	MTHCA_GET(size, outbox, QUERY_DEV_LIM_UAR_ENTRY_SZ_OFFSET);
	MTHCA_GET(size, outbox, QUERY_DEV_LIM_UAR_ENTRY_SZ_OFFSET);
	dev_lim->uar_scratch_entry_sz = size;
	dev_lim->uar_scratch_entry_sz = size;


	mthca_dbg(dev, "Max QPs: %d, reserved QPs: %d, entry size: %d\n",
		  dev_lim->max_qps, dev_lim->reserved_qps, dev_lim->qpc_entry_sz);
	mthca_dbg(dev, "Max SRQs: %d, reserved SRQs: %d, entry size: %d\n",
		  dev_lim->max_srqs, dev_lim->reserved_srqs, dev_lim->srq_entry_sz);
	mthca_dbg(dev, "Max CQs: %d, reserved CQs: %d, entry size: %d\n",
		  dev_lim->max_cqs, dev_lim->reserved_cqs, dev_lim->cqc_entry_sz);
	mthca_dbg(dev, "Max EQs: %d, reserved EQs: %d, entry size: %d\n",
		  dev_lim->max_eqs, dev_lim->reserved_eqs, dev_lim->eqc_entry_sz);
	mthca_dbg(dev, "reserved MPTs: %d, reserved MTTs: %d\n",
		  dev_lim->reserved_mrws, dev_lim->reserved_mtts);
	mthca_dbg(dev, "Max PDs: %d, reserved PDs: %d, reserved UARs: %d\n",
		  dev_lim->max_pds, dev_lim->reserved_pds, dev_lim->reserved_uars);
	mthca_dbg(dev, "Max QP/MCG: %d, reserved MGMs: %d\n",
		  dev_lim->max_pds, dev_lim->reserved_mgms);
	mthca_dbg(dev, "Max CQEs: %d, max WQEs: %d, max SRQ WQEs: %d\n",
		  dev_lim->max_cq_sz, dev_lim->max_qp_sz, dev_lim->max_srq_sz);

	mthca_dbg(dev, "Flags: %08x\n", dev_lim->flags);

	if (mthca_is_memfree(dev)) {
	if (mthca_is_memfree(dev)) {
		MTHCA_GET(field, outbox, QUERY_DEV_LIM_MAX_SRQ_SZ_OFFSET);
		MTHCA_GET(field, outbox, QUERY_DEV_LIM_MAX_SRQ_SZ_OFFSET);
		dev_lim->max_srq_sz = 1 << field;
		dev_lim->max_srq_sz = 1 << field;
@@ -1093,6 +1074,25 @@ int mthca_QUERY_DEV_LIM(struct mthca_dev *dev,
		dev_lim->mpt_entry_sz = MTHCA_MPT_ENTRY_SIZE;
		dev_lim->mpt_entry_sz = MTHCA_MPT_ENTRY_SIZE;
	}
	}


	mthca_dbg(dev, "Max QPs: %d, reserved QPs: %d, entry size: %d\n",
		  dev_lim->max_qps, dev_lim->reserved_qps, dev_lim->qpc_entry_sz);
	mthca_dbg(dev, "Max SRQs: %d, reserved SRQs: %d, entry size: %d\n",
		  dev_lim->max_srqs, dev_lim->reserved_srqs, dev_lim->srq_entry_sz);
	mthca_dbg(dev, "Max CQs: %d, reserved CQs: %d, entry size: %d\n",
		  dev_lim->max_cqs, dev_lim->reserved_cqs, dev_lim->cqc_entry_sz);
	mthca_dbg(dev, "Max EQs: %d, reserved EQs: %d, entry size: %d\n",
		  dev_lim->max_eqs, dev_lim->reserved_eqs, dev_lim->eqc_entry_sz);
	mthca_dbg(dev, "reserved MPTs: %d, reserved MTTs: %d\n",
		  dev_lim->reserved_mrws, dev_lim->reserved_mtts);
	mthca_dbg(dev, "Max PDs: %d, reserved PDs: %d, reserved UARs: %d\n",
		  dev_lim->max_pds, dev_lim->reserved_pds, dev_lim->reserved_uars);
	mthca_dbg(dev, "Max QP/MCG: %d, reserved MGMs: %d\n",
		  dev_lim->max_pds, dev_lim->reserved_mgms);
	mthca_dbg(dev, "Max CQEs: %d, max WQEs: %d, max SRQ WQEs: %d\n",
		  dev_lim->max_cq_sz, dev_lim->max_qp_sz, dev_lim->max_srq_sz);

	mthca_dbg(dev, "Flags: %08x\n", dev_lim->flags);

out:
out:
	mthca_free_mailbox(dev, mailbox);
	mthca_free_mailbox(dev, mailbox);
	return err;
	return err;
+2 −2
Original line number Original line Diff line number Diff line
@@ -53,8 +53,8 @@


#define DRV_NAME	"ib_mthca"
#define DRV_NAME	"ib_mthca"
#define PFX		DRV_NAME ": "
#define PFX		DRV_NAME ": "
#define DRV_VERSION	"0.06"
#define DRV_VERSION	"0.07"
#define DRV_RELDATE	"June 23, 2005"
#define DRV_RELDATE	"February 13, 2006"


enum {
enum {
	MTHCA_FLAG_DDR_HIDDEN = 1 << 1,
	MTHCA_FLAG_DDR_HIDDEN = 1 << 1,
+1 −0
Original line number Original line Diff line number Diff line
@@ -78,6 +78,7 @@ enum {
	IPOIB_FLAG_SUBINTERFACE   = 4,
	IPOIB_FLAG_SUBINTERFACE   = 4,
	IPOIB_MCAST_RUN 	  = 5,
	IPOIB_MCAST_RUN 	  = 5,
	IPOIB_STOP_REAPER         = 6,
	IPOIB_STOP_REAPER         = 6,
	IPOIB_MCAST_STARTED       = 7,


	IPOIB_MAX_BACKOFF_SECONDS = 16,
	IPOIB_MAX_BACKOFF_SECONDS = 16,


+24 −4
Original line number Original line Diff line number Diff line
@@ -533,8 +533,10 @@ void ipoib_mcast_join_task(void *dev_ptr)
	}
	}


	if (!priv->broadcast) {
	if (!priv->broadcast) {
		priv->broadcast = ipoib_mcast_alloc(dev, 1);
		struct ipoib_mcast *broadcast;
		if (!priv->broadcast) {

		broadcast = ipoib_mcast_alloc(dev, 1);
		if (!broadcast) {
			ipoib_warn(priv, "failed to allocate broadcast group\n");
			ipoib_warn(priv, "failed to allocate broadcast group\n");
			mutex_lock(&mcast_mutex);
			mutex_lock(&mcast_mutex);
			if (test_bit(IPOIB_MCAST_RUN, &priv->flags))
			if (test_bit(IPOIB_MCAST_RUN, &priv->flags))
@@ -544,10 +546,11 @@ void ipoib_mcast_join_task(void *dev_ptr)
			return;
			return;
		}
		}


		memcpy(priv->broadcast->mcmember.mgid.raw, priv->dev->broadcast + 4,
		spin_lock_irq(&priv->lock);
		memcpy(broadcast->mcmember.mgid.raw, priv->dev->broadcast + 4,
		       sizeof (union ib_gid));
		       sizeof (union ib_gid));
		priv->broadcast = broadcast;


		spin_lock_irq(&priv->lock);
		__ipoib_mcast_add(dev, priv->broadcast);
		__ipoib_mcast_add(dev, priv->broadcast);
		spin_unlock_irq(&priv->lock);
		spin_unlock_irq(&priv->lock);
	}
	}
@@ -601,6 +604,10 @@ int ipoib_mcast_start_thread(struct net_device *dev)
		queue_work(ipoib_workqueue, &priv->mcast_task);
		queue_work(ipoib_workqueue, &priv->mcast_task);
	mutex_unlock(&mcast_mutex);
	mutex_unlock(&mcast_mutex);


	spin_lock_irq(&priv->lock);
	set_bit(IPOIB_MCAST_STARTED, &priv->flags);
	spin_unlock_irq(&priv->lock);

	return 0;
	return 0;
}
}


@@ -611,6 +618,10 @@ int ipoib_mcast_stop_thread(struct net_device *dev, int flush)


	ipoib_dbg_mcast(priv, "stopping multicast thread\n");
	ipoib_dbg_mcast(priv, "stopping multicast thread\n");


	spin_lock_irq(&priv->lock);
	clear_bit(IPOIB_MCAST_STARTED, &priv->flags);
	spin_unlock_irq(&priv->lock);

	mutex_lock(&mcast_mutex);
	mutex_lock(&mcast_mutex);
	clear_bit(IPOIB_MCAST_RUN, &priv->flags);
	clear_bit(IPOIB_MCAST_RUN, &priv->flags);
	cancel_delayed_work(&priv->mcast_task);
	cancel_delayed_work(&priv->mcast_task);
@@ -693,6 +704,14 @@ void ipoib_mcast_send(struct net_device *dev, union ib_gid *mgid,
	 */
	 */
	spin_lock(&priv->lock);
	spin_lock(&priv->lock);


	if (!test_bit(IPOIB_MCAST_STARTED, &priv->flags)	||
	    !priv->broadcast					||
	    !test_bit(IPOIB_MCAST_FLAG_ATTACHED, &priv->broadcast->flags)) {
		++priv->stats.tx_dropped;
		dev_kfree_skb_any(skb);
		goto unlock;
	}

	mcast = __ipoib_mcast_find(dev, mgid);
	mcast = __ipoib_mcast_find(dev, mgid);
	if (!mcast) {
	if (!mcast) {
		/* Let's create a new send only group now */
		/* Let's create a new send only group now */
@@ -754,6 +773,7 @@ out:
		ipoib_send(dev, skb, mcast->ah, IB_MULTICAST_QPN);
		ipoib_send(dev, skb, mcast->ah, IB_MULTICAST_QPN);
	}
	}


unlock:
	spin_unlock(&priv->lock);
	spin_unlock(&priv->lock);
}
}