<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel about="http://blog.gmane.org/gmane.linux.drivers.openib">
    <title>gmane.linux.drivers.openib</title>
    <link>http://blog.gmane.org/gmane.linux.drivers.openib</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58864"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58863"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58862"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58861"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58860"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58859"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58858"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58857"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58856"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58855"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58854"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58853"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58852"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58851"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58850"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58849"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58848"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58847"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58846"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.linux.drivers.openib/58845"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58864">
    <title>Re: [ofa-general] ***SPAM*** git http url for ofed_1_3/management.git</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58864</link>
    <description>                git://git.openfabrics.org/ofed_1_3/management.git

</description>
    <dc:creator>Hal Rosenstock</dc:creator>
    <dc:date>2008-12-02T00:05:56</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58863">
    <title>[ofa-general] ***SPAM*** git http url for ofed_1_3/management.git</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58863</link>
    <description/>
    <dc:creator>Todd Bowman</dc:creator>
    <dc:date>2008-12-01T23:28:43</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58862">
    <title>[ofa-general] Re: [PATCH] opensm/osm_prefix_route.h: prefix and guidare in network rather than host endian order</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58862</link>
    <description>

Applied. Thanks.

Sasha
</description>
    <dc:creator>Sasha Khapyorsky</dc:creator>
    <dc:date>2008-12-01T20:51:48</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58861">
    <title>RE: [ofa-general] [RMDA CM IPv6 support. PATCHv5 2/2] RDMA CMsupport</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58861</link>
    <description>
I missed this before, but I think we also need to change cma_loopback_addr()
(called from rdma_bind_addr() through cma_any_addr()) to handle IPv6.

- Sean

</description>
    <dc:creator>Sean Hefty</dc:creator>
    <dc:date>2008-12-01T19:52:57</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58860">
    <title>[ofa-general] RE: [RMDA CM IPv6 support. PATCHv5 1/2]IPv6 IB addrresolution</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58860</link>
    <description>
Thanks for adding this.

Acked-by: Sean Hefty &lt;sean.hefty&lt; at &gt;intel.com&gt;

with one nit...


Is this assignment needed/used?

dst_ip;
*)dst_in)-&gt;sin6_addr;
addr)-


</description>
    <dc:creator>Sean Hefty</dc:creator>
    <dc:date>2008-12-01T19:38:29</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58859">
    <title>[ofa-general] [PATCH] opensm/osm_prefix_route.h: prefix and guid are in network rather than host endian order</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58859</link>
    <description>Sasha,

Minor patch to declare prefix and guid in network rather than host 
endian order.

</description>
    <dc:creator>Hal Rosenstock</dc:creator>
    <dc:date>2008-12-01T18:43:47</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58858">
    <title>Re: [ofa-general] GitWeb really slow</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58858</link>
    <description>Hi Nicolas

Nicolas Morey Chaisemartin wrote:
I have noticed this as well. OFA will be moving to a new server after
OFED 1.4 releases (soon). We will make sure the problem does not occur
there. Please bear with us for now. Thanks.

Jeff Becker
OFA server admin


</description>
    <dc:creator>Jeff Becker</dc:creator>
    <dc:date>2008-12-01T18:21:46</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58857">
    <title>[ofa-general] [GIT PULL] please pull infiniband.git</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58857</link>
    <description>Linus, please pull from

    master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git for-linus

This tree is also available from kernel.org mirrors at:

    git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git for-linus

This will get two fixes to the ehca driver for problems in patches
added in the 2.6.28 cycle, and two fixes for mlx4, one for a
regression introduced in the 2.6.28 cycle, and one for a resource leak
that is serious enough and has a simple enough fix to target -stable.

Jack Morgenstein (2):
      mlx4_core: Save/restore default port IB capability mask
      IB/mlx4: Fix MTT leakage in resize CQ

Joachim Fenkes (1):
      IB/ehca: Change misleading error message on memory hotplug

Roland Dreier (1):
      Merge branches 'ehca' and 'mlx4' into for-linus

Stefan Roscher (1):
      IB/ehca: Fix problem with generated flush work completions

 drivers/infiniband/hw/ehca/ehca_classes.h |    4 ++-
 drivers/infiniband/hw/ehca/ehca_main.c    |    3 +-
 drivers/infiniband/hw/ehca/ehca_qp.c      |   26 +++++++++++---
 drivers/infiniband/hw/ehca/ehca_reqs.c    |   51 +++++++++++++++++------------
 drivers/infiniband/hw/mlx4/cq.c           |    5 +++
 drivers/net/mlx4/main.c                   |    8 ++++
 drivers/net/mlx4/mlx4.h                   |    1 +
 drivers/net/mlx4/port.c                   |   39 +++++++++++++++++++++-
 include/linux/mlx4/device.h               |    1 +
 9 files changed, 107 insertions(+), 31 deletions(-)


diff --git a/drivers/infiniband/hw/ehca/ehca_classes.h b/drivers/infiniband/hw/ehca/ehca_classes.h
index 4df887a..7fc35cf 100644
--- a/drivers/infiniband/hw/ehca/ehca_classes.h
+++ b/drivers/infiniband/hw/ehca/ehca_classes.h
&lt; at &gt;&lt; at &gt; -163,7 +163,8 &lt; at &gt;&lt; at &gt; struct ehca_mod_qp_parm {
 /* struct for tracking if cqes have been reported to the application */
 struct ehca_qmap_entry {
 u16 app_wr_id;
-u16 reported;
+u8 reported;
+u8 cqe_req;
 };
 
 struct ehca_queue_map {
&lt; at &gt;&lt; at &gt; -171,6 +172,7 &lt; at &gt;&lt; at &gt; struct ehca_queue_map {
 unsigned int entries;
 unsigned int tail;
 unsigned int left_to_poll;
+unsigned int next_wqe_idx;   /* Idx to first wqe to be flushed */
 };
 
 struct ehca_qp {
diff --git a/drivers/infiniband/hw/ehca/ehca_main.c b/drivers/infiniband/hw/ehca/ehca_main.c
index bb02a86..bec7e02 100644
--- a/drivers/infiniband/hw/ehca/ehca_main.c
+++ b/drivers/infiniband/hw/ehca/ehca_main.c
&lt; at &gt;&lt; at &gt; -994,8 +994,7 &lt; at &gt;&lt; at &gt; static int ehca_mem_notifier(struct notifier_block *nb,
 if (printk_timed_ratelimit(&amp;ehca_dmem_warn_time,
    30 * 1000))
 ehca_gen_err("DMEM operations are not allowed"
-     "as long as an ehca adapter is"
-     "attached to the LPAR");
+     "in conjunction with eHCA");
 return NOTIFY_BAD;
 }
 }
diff --git a/drivers/infiniband/hw/ehca/ehca_qp.c b/drivers/infiniband/hw/ehca/ehca_qp.c
index 9e05ee2..cadbf0c 100644
--- a/drivers/infiniband/hw/ehca/ehca_qp.c
+++ b/drivers/infiniband/hw/ehca/ehca_qp.c
&lt; at &gt;&lt; at &gt; -435,9 +435,13 &lt; at &gt;&lt; at &gt; static void reset_queue_map(struct ehca_queue_map *qmap)
 {
 int i;
 
-qmap-&gt;tail = 0;
-for (i = 0; i &lt; qmap-&gt;entries; i++)
+qmap-&gt;tail = qmap-&gt;entries - 1;
+qmap-&gt;left_to_poll = 0;
+qmap-&gt;next_wqe_idx = 0;
+for (i = 0; i &lt; qmap-&gt;entries; i++) {
 qmap-&gt;map[i].reported = 1;
+qmap-&gt;map[i].cqe_req = 0;
+}
 }
 
 /*
&lt; at &gt;&lt; at &gt; -1121,6 +1125,7 &lt; at &gt;&lt; at &gt; static int calc_left_cqes(u64 wqe_p, struct ipz_queue *ipz_queue,
 void *wqe_v;
 u64 q_ofs;
 u32 wqe_idx;
+unsigned int tail_idx;
 
 /* convert real to abs address */
 wqe_p = wqe_p &amp; (~(1UL &lt;&lt; 63));
&lt; at &gt;&lt; at &gt; -1133,12 +1138,17 &lt; at &gt;&lt; at &gt; static int calc_left_cqes(u64 wqe_p, struct ipz_queue *ipz_queue,
 return -EFAULT;
 }
 
+tail_idx = (qmap-&gt;tail + 1) % qmap-&gt;entries;
 wqe_idx = q_ofs / ipz_queue-&gt;qe_size;
-if (wqe_idx &lt; qmap-&gt;tail)
-qmap-&gt;left_to_poll = (qmap-&gt;entries - qmap-&gt;tail) + wqe_idx;
-else
-qmap-&gt;left_to_poll = wqe_idx - qmap-&gt;tail;
 
+/* check all processed wqes, whether a cqe is requested or not */
+while (tail_idx != wqe_idx) {
+if (qmap-&gt;map[tail_idx].cqe_req)
+qmap-&gt;left_to_poll++;
+tail_idx = (tail_idx + 1) % qmap-&gt;entries;
+}
+/* save index in queue, where we have to start flushing */
+qmap-&gt;next_wqe_idx = wqe_idx;
 return 0;
 }
 
&lt; at &gt;&lt; at &gt; -1185,10 +1195,14 &lt; at &gt;&lt; at &gt; static int check_for_left_cqes(struct ehca_qp *my_qp, struct ehca_shca *shca)
 } else {
 spin_lock_irqsave(&amp;my_qp-&gt;send_cq-&gt;spinlock, flags);
 my_qp-&gt;sq_map.left_to_poll = 0;
+my_qp-&gt;sq_map.next_wqe_idx = (my_qp-&gt;sq_map.tail + 1) %
+my_qp-&gt;sq_map.entries;
 spin_unlock_irqrestore(&amp;my_qp-&gt;send_cq-&gt;spinlock, flags);
 
 spin_lock_irqsave(&amp;my_qp-&gt;recv_cq-&gt;spinlock, flags);
 my_qp-&gt;rq_map.left_to_poll = 0;
+my_qp-&gt;rq_map.next_wqe_idx = (my_qp-&gt;rq_map.tail + 1) %
+my_qp-&gt;rq_map.entries;
 spin_unlock_irqrestore(&amp;my_qp-&gt;recv_cq-&gt;spinlock, flags);
 }
 
diff --git a/drivers/infiniband/hw/ehca/ehca_reqs.c b/drivers/infiniband/hw/ehca/ehca_reqs.c
index 6492807..00a648f 100644
--- a/drivers/infiniband/hw/ehca/ehca_reqs.c
+++ b/drivers/infiniband/hw/ehca/ehca_reqs.c
&lt; at &gt;&lt; at &gt; -179,6 +179,7 &lt; at &gt;&lt; at &gt; static inline int ehca_write_swqe(struct ehca_qp *qp,
 
 qmap_entry-&gt;app_wr_id = get_app_wr_id(send_wr-&gt;wr_id);
 qmap_entry-&gt;reported = 0;
+qmap_entry-&gt;cqe_req = 0;
 
 switch (send_wr-&gt;opcode) {
 case IB_WR_SEND:
&lt; at &gt;&lt; at &gt; -203,8 +204,10 &lt; at &gt;&lt; at &gt; static inline int ehca_write_swqe(struct ehca_qp *qp,
 
 if ((send_wr-&gt;send_flags &amp; IB_SEND_SIGNALED ||
     qp-&gt;init_attr.sq_sig_type == IB_SIGNAL_ALL_WR)
-    &amp;&amp; !hidden)
+    &amp;&amp; !hidden) {
 wqe_p-&gt;wr_flag |= WQE_WRFLAG_REQ_SIGNAL_COM;
+qmap_entry-&gt;cqe_req = 1;
+}
 
 if (send_wr-&gt;opcode == IB_WR_SEND_WITH_IMM ||
     send_wr-&gt;opcode == IB_WR_RDMA_WRITE_WITH_IMM) {
&lt; at &gt;&lt; at &gt; -569,6 +572,7 &lt; at &gt;&lt; at &gt; static int internal_post_recv(struct ehca_qp *my_qp,
 qmap_entry = &amp;my_qp-&gt;rq_map.map[rq_map_idx];
 qmap_entry-&gt;app_wr_id = get_app_wr_id(cur_recv_wr-&gt;wr_id);
 qmap_entry-&gt;reported = 0;
+qmap_entry-&gt;cqe_req = 1;
 
 wqe_cnt++;
 } /* eof for cur_recv_wr */
&lt; at &gt;&lt; at &gt; -706,27 +710,34 &lt; at &gt;&lt; at &gt; repoll:
 goto repoll;
 wc-&gt;qp = &amp;my_qp-&gt;ib_qp;
 
+qmap_tail_idx = get_app_wr_id(cqe-&gt;work_request_id);
+if (!(cqe-&gt;w_completion_flags &amp; WC_SEND_RECEIVE_BIT))
+/* We got a send completion. */
+qmap = &amp;my_qp-&gt;sq_map;
+else
+/* We got a receive completion. */
+qmap = &amp;my_qp-&gt;rq_map;
+
+/* advance the tail pointer */
+qmap-&gt;tail = qmap_tail_idx;
+
 if (is_error) {
 /*
  * set left_to_poll to 0 because in error state, we will not
  * get any additional CQEs
  */
-ehca_add_to_err_list(my_qp, 1);
+my_qp-&gt;sq_map.next_wqe_idx = (my_qp-&gt;sq_map.tail + 1) %
+my_qp-&gt;sq_map.entries;
 my_qp-&gt;sq_map.left_to_poll = 0;
+ehca_add_to_err_list(my_qp, 1);
 
+my_qp-&gt;rq_map.next_wqe_idx = (my_qp-&gt;rq_map.tail + 1) %
+my_qp-&gt;rq_map.entries;
+my_qp-&gt;rq_map.left_to_poll = 0;
 if (HAS_RQ(my_qp))
 ehca_add_to_err_list(my_qp, 0);
-my_qp-&gt;rq_map.left_to_poll = 0;
 }
 
-qmap_tail_idx = get_app_wr_id(cqe-&gt;work_request_id);
-if (!(cqe-&gt;w_completion_flags &amp; WC_SEND_RECEIVE_BIT))
-/* We got a send completion. */
-qmap = &amp;my_qp-&gt;sq_map;
-else
-/* We got a receive completion. */
-qmap = &amp;my_qp-&gt;rq_map;
-
 qmap_entry = &amp;qmap-&gt;map[qmap_tail_idx];
 if (qmap_entry-&gt;reported) {
 ehca_warn(cq-&gt;device, "Double cqe on qp_num=%#x",
&lt; at &gt;&lt; at &gt; -738,10 +749,6 &lt; at &gt;&lt; at &gt; repoll:
 wc-&gt;wr_id = replace_wr_id(cqe-&gt;work_request_id, qmap_entry-&gt;app_wr_id);
 qmap_entry-&gt;reported = 1;
 
-/* this is a proper completion, we need to advance the tail pointer */
-if (++qmap-&gt;tail == qmap-&gt;entries)
-qmap-&gt;tail = 0;
-
 /* if left_to_poll is decremented to 0, add the QP to the error list */
 if (qmap-&gt;left_to_poll &gt; 0) {
 qmap-&gt;left_to_poll--;
&lt; at &gt;&lt; at &gt; -805,13 +812,14 &lt; at &gt;&lt; at &gt; static int generate_flush_cqes(struct ehca_qp *my_qp, struct ib_cq *cq,
 else
 qmap = &amp;my_qp-&gt;rq_map;
 
-qmap_entry = &amp;qmap-&gt;map[qmap-&gt;tail];
+qmap_entry = &amp;qmap-&gt;map[qmap-&gt;next_wqe_idx];
 
 while ((nr &lt; num_entries) &amp;&amp; (qmap_entry-&gt;reported == 0)) {
 /* generate flush CQE */
+
 memset(wc, 0, sizeof(*wc));
 
-offset = qmap-&gt;tail * ipz_queue-&gt;qe_size;
+offset = qmap-&gt;next_wqe_idx * ipz_queue-&gt;qe_size;
 wqe = (struct ehca_wqe *)ipz_qeit_calc(ipz_queue, offset);
 if (!wqe) {
 ehca_err(cq-&gt;device, "Invalid wqe offset=%#lx on "
&lt; at &gt;&lt; at &gt; -850,11 +858,12 &lt; at &gt;&lt; at &gt; static int generate_flush_cqes(struct ehca_qp *my_qp, struct ib_cq *cq,
 
 wc-&gt;qp = &amp;my_qp-&gt;ib_qp;
 
-/* mark as reported and advance tail pointer */
+/* mark as reported and advance next_wqe pointer */
 qmap_entry-&gt;reported = 1;
-if (++qmap-&gt;tail == qmap-&gt;entries)
-qmap-&gt;tail = 0;
-qmap_entry = &amp;qmap-&gt;map[qmap-&gt;tail];
+qmap-&gt;next_wqe_idx++;
+if (qmap-&gt;next_wqe_idx == qmap-&gt;entries)
+qmap-&gt;next_wqe_idx = 0;
+qmap_entry = &amp;qmap-&gt;map[qmap-&gt;next_wqe_idx];
 
 wc++; nr++;
 }
diff --git a/drivers/infiniband/hw/mlx4/cq.c b/drivers/infiniband/hw/mlx4/cq.c
index d0866a3..1830849 100644
--- a/drivers/infiniband/hw/mlx4/cq.c
+++ b/drivers/infiniband/hw/mlx4/cq.c
&lt; at &gt;&lt; at &gt; -343,6 +343,7 &lt; at &gt;&lt; at &gt; int mlx4_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
 {
 struct mlx4_ib_dev *dev = to_mdev(ibcq-&gt;device);
 struct mlx4_ib_cq *cq = to_mcq(ibcq);
+struct mlx4_mtt mtt;
 int outst_cqe;
 int err;
 
&lt; at &gt;&lt; at &gt; -376,10 +377,13 &lt; at &gt;&lt; at &gt; int mlx4_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
 goto out;
 }
 
+mtt = cq-&gt;buf.mtt;
+
 err = mlx4_cq_resize(dev-&gt;dev, &amp;cq-&gt;mcq, entries, &amp;cq-&gt;resize_buf-&gt;buf.mtt);
 if (err)
 goto err_buf;
 
+mlx4_mtt_cleanup(dev-&gt;dev, &amp;mtt);
 if (ibcq-&gt;uobject) {
 cq-&gt;buf      = cq-&gt;resize_buf-&gt;buf;
 cq-&gt;ibcq.cqe = cq-&gt;resize_buf-&gt;cqe;
&lt; at &gt;&lt; at &gt; -406,6 +410,7 &lt; at &gt;&lt; at &gt; int mlx4_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
 goto out;
 
 err_buf:
+mlx4_mtt_cleanup(dev-&gt;dev, &amp;cq-&gt;resize_buf-&gt;buf.mtt);
 if (!ibcq-&gt;uobject)
 mlx4_ib_free_cq_buf(dev, &amp;cq-&gt;resize_buf-&gt;buf,
     cq-&gt;resize_buf-&gt;cqe);
diff --git a/drivers/net/mlx4/main.c b/drivers/net/mlx4/main.c
index 468921b..90a0281 100644
--- a/drivers/net/mlx4/main.c
+++ b/drivers/net/mlx4/main.c
&lt; at &gt;&lt; at &gt; -753,6 +753,7 &lt; at &gt;&lt; at &gt; static int mlx4_setup_hca(struct mlx4_dev *dev)
 struct mlx4_priv *priv = mlx4_priv(dev);
 int err;
 int port;
+__be32 ib_port_default_caps;
 
 err = mlx4_init_uar_table(dev);
 if (err) {
&lt; at &gt;&lt; at &gt; -852,6 +853,13 &lt; at &gt;&lt; at &gt; static int mlx4_setup_hca(struct mlx4_dev *dev)
 }
 
 for (port = 1; port &lt;= dev-&gt;caps.num_ports; port++) {
+ib_port_default_caps = 0;
+err = mlx4_get_port_ib_caps(dev, port, &amp;ib_port_default_caps);
+if (err)
+mlx4_warn(dev, "failed to get port %d default "
+  "ib capabilities (%d). Continuing with "
+  "caps = 0\n", port, err);
+dev-&gt;caps.ib_port_def_cap[port] = ib_port_default_caps;
 err = mlx4_SET_PORT(dev, port);
 if (err) {
 mlx4_err(dev, "Failed to set port %d, aborting\n",
diff --git a/drivers/net/mlx4/mlx4.h b/drivers/net/mlx4/mlx4.h
index 56a2e21..34c909d 100644
--- a/drivers/net/mlx4/mlx4.h
+++ b/drivers/net/mlx4/mlx4.h
&lt; at &gt;&lt; at &gt; -385,5 +385,6 &lt; at &gt;&lt; at &gt; void mlx4_init_mac_table(struct mlx4_dev *dev, struct mlx4_mac_table *table);
 void mlx4_init_vlan_table(struct mlx4_dev *dev, struct mlx4_vlan_table *table);
 
 int mlx4_SET_PORT(struct mlx4_dev *dev, u8 port);
+int mlx4_get_port_ib_caps(struct mlx4_dev *dev, u8 port, __be32 *caps);
 
 #endif /* MLX4_H */
diff --git a/drivers/net/mlx4/port.c b/drivers/net/mlx4/port.c
index e2fdab4..0a057e5 100644
--- a/drivers/net/mlx4/port.c
+++ b/drivers/net/mlx4/port.c
&lt; at &gt;&lt; at &gt; -258,6 +258,42 &lt; at &gt;&lt; at &gt; out:
 }
 EXPORT_SYMBOL_GPL(mlx4_unregister_vlan);
 
+int mlx4_get_port_ib_caps(struct mlx4_dev *dev, u8 port, __be32 *caps)
+{
+struct mlx4_cmd_mailbox *inmailbox, *outmailbox;
+u8 *inbuf, *outbuf;
+int err;
+
+inmailbox = mlx4_alloc_cmd_mailbox(dev);
+if (IS_ERR(inmailbox))
+return PTR_ERR(inmailbox);
+
+outmailbox = mlx4_alloc_cmd_mailbox(dev);
+if (IS_ERR(outmailbox)) {
+mlx4_free_cmd_mailbox(dev, inmailbox);
+return PTR_ERR(outmailbox);
+}
+
+inbuf = inmailbox-&gt;buf;
+outbuf = outmailbox-&gt;buf;
+memset(inbuf, 0, 256);
+memset(outbuf, 0, 256);
+inbuf[0] = 1;
+inbuf[1] = 1;
+inbuf[2] = 1;
+inbuf[3] = 1;
+*(__be16 *) (&amp;inbuf[16]) = cpu_to_be16(0x0015);
+*(__be32 *) (&amp;inbuf[20]) = cpu_to_be32(port);
+
+err = mlx4_cmd_box(dev, inmailbox-&gt;dma, outmailbox-&gt;dma, port, 3,
+   MLX4_CMD_MAD_IFC, MLX4_CMD_TIME_CLASS_C);
+if (!err)
+*caps = *(__be32 *) (outbuf + 84);
+mlx4_free_cmd_mailbox(dev, inmailbox);
+mlx4_free_cmd_mailbox(dev, outmailbox);
+return err;
+}
+
 int mlx4_SET_PORT(struct mlx4_dev *dev, u8 port)
 {
 struct mlx4_cmd_mailbox *mailbox;
&lt; at &gt;&lt; at &gt; -273,7 +309,8 &lt; at &gt;&lt; at &gt; int mlx4_SET_PORT(struct mlx4_dev *dev, u8 port)
 ((u8 *) mailbox-&gt;buf)[3] = 6;
 ((__be16 *) mailbox-&gt;buf)[4] = cpu_to_be16(1 &lt;&lt; 15);
 ((__be16 *) mailbox-&gt;buf)[6] = cpu_to_be16(1 &lt;&lt; 15);
-}
+} else
+((__be32 *) mailbox-&gt;buf)[1] = dev-&gt;caps.ib_port_def_cap[port];
 err = mlx4_cmd(dev, mailbox-&gt;dma, port, is_eth, MLX4_CMD_SET_PORT,
        MLX4_CMD_TIME_CLASS_B);
 
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h
index bd9977b..371086f 100644
--- a/include/linux/mlx4/device.h
+++ b/include/linux/mlx4/device.h
&lt; at &gt;&lt; at &gt; -179,6 +179,7 &lt; at &gt;&lt; at &gt; struct mlx4_caps {
 intnum_ports;
 intvl_cap[MLX4_MAX_PORTS + 1];
 intib_mtu_cap[MLX4_MAX_PORTS + 1];
+__be32ib_port_def_cap[MLX4_MAX_PORTS + 1];
 u64def_mac[MLX4_MAX_PORTS + 1];
 inteth_mtu_cap[MLX4_MAX_PORTS + 1];
 intgid_table_len[MLX4_MAX_PORTS + 1];
</description>
    <dc:creator>Roland Dreier</dc:creator>
    <dc:date>2008-12-01T18:16:10</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58856">
    <title>[ofa-general] Agenda for OFED meeting today (Dec 1) on OFED 1.4</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58856</link>
    <description>
This is the Agenda for the OFED meeting today:

1. Bug list review:
1421    blo  raisch&lt; at &gt;de.ibm.com  ipoib/ehca crash when
bouncing network
1413 cri jackm&lt; at &gt;mellanox.co.il rmmod mlx4_ib deadlock - on work
1384 maj eli&lt; at &gt;mellanox.co.il netperf latency small messages
increase 5% - UD mode issue, seems caused by LRO
1386 maj eli&lt; at &gt;mellanox.co.il ofed 1.4 - iperf tcp connected
mode BW large messages dec... - RC mode - not reproduced for now
1395 maj vu&lt; at &gt;mellanox.com kernel panic during SRP HA test
- on work
1419 maj vlad&lt; at &gt;mellanox.co.il Iperf-2.0.4 fails: page
allocation failure. order:5
1423 maj jackm&lt; at &gt;mellanox.co.il RDMA_Write RC small message bw
degradation jitter of 6% - doing more measurements

2. UNH Logo testing update

3. Issue with new  Intel MPI Benchmark (IMB, known as Pallas). 
    In OFED 1.3 we used IMB 3.0 and in OFED 1.4 we upgraded the IMB to
3.1 version. 
    During our performance verification we found 5% latency degradation
with IMB 3.1 multi PingPong benchmark 
    (we compare the result to IMB 3.0 version).
    Do we wish to go back to IMB 3.0?

4. Open discussion

Tziporet

</description>
    <dc:creator>Tziporet Koren</dc:creator>
    <dc:date>2008-12-01T16:21:17</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58855">
    <title>[ofa-general] RESEND: net.ipv4.tcp_timestamps</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58855</link>
    <description>
Does anyone know why this value is being altered by OFED?

"net.ipv4.tcp_timestamps" is being set to 0 during OFED installation.  

Default value of this parameter is set to 1 on standard RHEL/SLES distros which OFED installation script modifies to 0.  Also, when OFED is uninstalled, it does not reset these sysctl parameters to their original values.

This parameter is specifically recommended to be turned ON for High performance network.  This is a TCP option that can be used to calculate the Round Trip Measurement in a better and more accurate way than the retransmission timeout method can.  Accurate value of retransmission timeout should be determined to avoid unnecessary retransmissions and hence to improve TCP performance.  RFC 1323 talks about this TCP extension for High Performance.  

When the parameter net.ipv4.tcp_timestamps=1, then it adds extra 12 bytes into TCP header increasing its size.  This has an obvious effect of decrease in bandwidth as we have some extra data flowing.  Is this the reason why OFED turns it OFF to net.ipv4.tcp_timestamps=0.
</description>
    <dc:creator>John Russo</dc:creator>
    <dc:date>2008-12-01T15:33:27</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58854">
    <title>[ofa-general] net.ipv4.tcp_timestamps</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58854</link>
    <description/>
    <dc:creator>John Russo</dc:creator>
    <dc:date>2008-12-01T15:29:03</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58853">
    <title>Re: [ofa-general] [RMDA CM IPv6 support. PATCHv5 2/2] RDMA CM support</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58853</link>
    <description>IPv6 RDMA CM support

From: Aleksey Senin &lt;alekseys&lt; at &gt;voltaire.com&gt;
Date: Mon, 1 Dec 2008 14:01:10 +0200
Subject: [PATCH] RDMA CM IPv6 support

AF_INET6 case in rdma_bind_addr added
AF_INET6 support in cma_format_hdr function
Use sockaddr_storage structure in cma_bind_any function

Signed-off-by: Aleksey Senin &lt;alekseys&lt; at &gt;voltaire.com&gt;

:100644 100644 d951896... df22c5c... Mdrivers/infiniband/core/cma.c

diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index d951896..df22c5c 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
&lt; at &gt;&lt; at &gt; -1467,10 +1467,10 &lt; at &gt;&lt; at &gt; static void cma_listen_on_all(struct rdma_id_private *id_priv)
 
 static int cma_bind_any(struct rdma_cm_id *id, sa_family_t af)
 {
-struct sockaddr_in addr_in;
+struct sockaddr_storage addr_in;
 
 memset(&amp;addr_in, 0, sizeof addr_in);
-addr_in.sin_family = af;
+addr_in.ss_family = af;
 return rdma_bind_addr(id, (struct sockaddr *) &amp;addr_in);
 }
 
&lt; at &gt;&lt; at &gt; -2073,7 +2073,7 &lt; at &gt;&lt; at &gt; int rdma_bind_addr(struct rdma_cm_id *id, struct sockaddr *addr)
 struct rdma_id_private *id_priv;
 int ret;
 
-if (addr-&gt;sa_family != AF_INET)
+if (addr-&gt;sa_family != AF_INET &amp;&amp; addr-&gt;sa_family != AF_INET6)
 return -EAFNOSUPPORT;
 
 id_priv = container_of(id, struct rdma_id_private, id);
&lt; at &gt;&lt; at &gt; -2113,32 +2113,61 &lt; at &gt;&lt; at &gt; EXPORT_SYMBOL(rdma_bind_addr);
 static int cma_format_hdr(void *hdr, enum rdma_port_space ps,
   struct rdma_route *route)
 {
-struct sockaddr_in *src4, *dst4;
 struct cma_hdr *cma_hdr;
 struct sdp_hh *sdp_hdr;
 
-src4 = (struct sockaddr_in *) &amp;route-&gt;addr.src_addr;
-dst4 = (struct sockaddr_in *) &amp;route-&gt;addr.dst_addr;
-
-switch (ps) {
-case RDMA_PS_SDP:
-sdp_hdr = hdr;
-if (sdp_get_majv(sdp_hdr-&gt;sdp_version) != SDP_MAJ_VERSION)
-return -EINVAL;
-sdp_set_ip_ver(sdp_hdr, 4);
-sdp_hdr-&gt;src_addr.ip4.addr = src4-&gt;sin_addr.s_addr;
-sdp_hdr-&gt;dst_addr.ip4.addr = dst4-&gt;sin_addr.s_addr;
-sdp_hdr-&gt;port = src4-&gt;sin_port;
-break;
-default:
-cma_hdr = hdr;
-cma_hdr-&gt;cma_version = CMA_VERSION;
-cma_set_ip_ver(cma_hdr, 4);
-cma_hdr-&gt;src_addr.ip4.addr = src4-&gt;sin_addr.s_addr;
-cma_hdr-&gt;dst_addr.ip4.addr = dst4-&gt;sin_addr.s_addr;
-cma_hdr-&gt;port = src4-&gt;sin_port;
-break;
+if (route-&gt;addr.src_addr.ss_family == AF_INET) {
+struct sockaddr_in *src4, *dst4;
+
+src4 = (struct sockaddr_in *) &amp;route-&gt;addr.src_addr;
+dst4 = (struct sockaddr_in *) &amp;route-&gt;addr.dst_addr;
+
+switch (ps) {
+case RDMA_PS_SDP:
+sdp_hdr = hdr;
+if (sdp_get_majv(sdp_hdr-&gt;sdp_version) != SDP_MAJ_VERSION)
+return -EINVAL;
+sdp_set_ip_ver(sdp_hdr, 4);
+sdp_hdr-&gt;src_addr.ip4.addr = src4-&gt;sin_addr.s_addr;
+sdp_hdr-&gt;dst_addr.ip4.addr = dst4-&gt;sin_addr.s_addr;
+sdp_hdr-&gt;port = src4-&gt;sin_port;
+break;
+default:
+cma_hdr = hdr;
+cma_hdr-&gt;cma_version = CMA_VERSION;
+cma_set_ip_ver(cma_hdr, 4);
+cma_hdr-&gt;src_addr.ip4.addr = src4-&gt;sin_addr.s_addr;
+cma_hdr-&gt;dst_addr.ip4.addr = dst4-&gt;sin_addr.s_addr;
+cma_hdr-&gt;port = src4-&gt;sin_port;
+break;
+}
+} else {
+struct sockaddr_in6 *src6, *dst6;
+
+src6 = (struct sockaddr_in6 *) &amp;route-&gt;addr.src_addr;
+dst6 = (struct sockaddr_in6 *) &amp;route-&gt;addr.dst_addr;
+
+switch (ps) {
+case RDMA_PS_SDP:
+sdp_hdr = hdr;
+if (sdp_get_majv(sdp_hdr-&gt;sdp_version) != SDP_MAJ_VERSION)
+return -EINVAL;
+sdp_set_ip_ver(sdp_hdr, 6);
+sdp_hdr-&gt;src_addr.ip6 = src6-&gt;sin6_addr;
+sdp_hdr-&gt;dst_addr.ip6 = dst6-&gt;sin6_addr;
+sdp_hdr-&gt;port = src6-&gt;sin6_port;
+break;
+default:
+cma_hdr = hdr;
+cma_hdr-&gt;cma_version = CMA_VERSION;
+cma_set_ip_ver(cma_hdr, 6);
+cma_hdr-&gt;src_addr.ip6 = src6-&gt;sin6_addr;
+cma_hdr-&gt;dst_addr.ip6 = dst6-&gt;sin6_addr;
+cma_hdr-&gt;port = src6-&gt;sin6_port;
+break;
+}
 }
+
 return 0;
 }
 
</description>
    <dc:creator>Aleksey Senin</dc:creator>
    <dc:date>2008-12-01T13:23:26</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58852">
    <title>[ofa-general] [RMDA CM IPv6 support. PATCHv5 1/2]IPv6 IB addrresolution</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58852</link>
    <description>Set from two patches for support IPv6 protocol in RMDA CM


Changes:
Use two patches instead of six.

This patch adds IPv6 support for IB address resolution.


From: Aleksey Senin &lt;alekseys&lt; at &gt;voltaire.com&gt;
Date: Mon, 1 Dec 2008 13:55:01 +0200
Subject: [PATCH] IB addr IPv6 support

Support for network discovery in addr_send_arp function.
Local IPv6 address resolution.
Added remote IPv6 address resolusion for RDMA CM.
Function addr_resolve_remote used as wrapper for two other functions:
addr4_resolve_remote ( original addr_resolve_remote )
addr6_resolve_remote ( new function )

Signed-off-by: Aleksey Senin &lt;alekseys&lt; at &gt;voltaire.com&gt;

:100644 100644 f95d21f... d9170c6... Mdrivers/infiniband/core/addr.c

diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
index f95d21f..d9170c6 100644
--- a/drivers/infiniband/core/addr.c
+++ b/drivers/infiniband/core/addr.c
&lt; at &gt;&lt; at &gt; -43,6 +43,7 &lt; at &gt;&lt; at &gt;
 #include &lt;net/netevent.h&gt;
 #include &lt;net/addrconf.h&gt;
 #include &lt;rdma/ib_addr.h&gt;
+#include &lt;net/ip6_route.h&gt;
 
 MODULE_AUTHOR("Sean Hefty");
 MODULE_DESCRIPTION("IB Address Translation");
&lt; at &gt;&lt; at &gt; -172,27 +173,42 &lt; at &gt;&lt; at &gt; static void queue_req(struct addr_req *req)
 mutex_unlock(&amp;lock);
 }
 
-static void addr_send_arp(struct sockaddr_in *dst_in)
+static void addr_send_arp(struct sockaddr *dst_in)
 {
 struct rtable *rt;
 struct flowi fl;
-__be32 dst_ip = dst_in-&gt;sin_addr.s_addr;
+struct dst_entry *dst;
 
 memset(&amp;fl, 0, sizeof fl);
-fl.nl_u.ip4_u.daddr = dst_ip;
-if (ip_route_output_key(&amp;init_net, &amp;rt, &amp;fl))
-return;
+if (dst_in-&gt;sa_family == AF_INET)  {
+fl.nl_u.ip4_u.daddr =
+((struct sockaddr_in *)dst_in)-&gt;sin_addr.s_addr;
 
-neigh_event_send(rt-&gt;u.dst.neighbour, NULL);
-ip_rt_put(rt);
+if (ip_route_output_key(&amp;init_net, &amp;rt, &amp;fl))
+return;
+
+neigh_event_send(rt-&gt;u.dst.neighbour, NULL);
+ip_rt_put(rt);
+
+} else {
+fl.nl_u.ip6_u.daddr =
+((struct sockaddr_in6 *)dst_in)-&gt;sin6_addr;
+
+dst = ip6_route_output(&amp;init_net, NULL, &amp;fl);
+if (!dst)
+return;
+
+neigh_event_send(dst-&gt;neighbour, NULL);
+dst_release(dst);
+}
 }
 
-static int addr_resolve_remote(struct sockaddr *src_in,
-       struct sockaddr *dst_in,
+static int addr4_resolve_remote(struct sockaddr_in *src_in,
+       struct sockaddr_in *dst_in,
        struct rdma_dev_addr *addr)
 {
-__be32 src_ip = ((struct sockaddr_in *)src_in)-&gt;sin_addr.s_addr;
-__be32 dst_ip = ((struct sockaddr_in *)dst_in)-&gt;sin_addr.s_addr;
+__be32 src_ip = src_in-&gt;sin_addr.s_addr;
+__be32 dst_ip = dst_in-&gt;sin_addr.s_addr;
 struct flowi fl;
 struct rtable *rt;
 struct neighbour *neigh;
&lt; at &gt;&lt; at &gt; -223,8 +239,8 &lt; at &gt;&lt; at &gt; static int addr_resolve_remote(struct sockaddr *src_in,
 }
 
 if (!src_ip) {
-src_in-&gt;sa_family = dst_in-&gt;sa_family;
-((struct sockaddr_in *)src_in)-&gt;sin_addr.s_addr = rt-&gt;rt_src;
+src_in-&gt;sin_family = dst_in-&gt;sin_family;
+src_in-&gt;sin_addr.s_addr = rt-&gt;rt_src;
 }
 
 ret = rdma_copy_addr(addr, neigh-&gt;dev, neigh-&gt;ha);
&lt; at &gt;&lt; at &gt; -236,6 +252,47 &lt; at &gt;&lt; at &gt; out:
 return ret;
 }
 
+static int addr6_resolve_remote(struct sockaddr_in6 *src_in,
+       struct sockaddr_in6 *dst_in,
+       struct rdma_dev_addr *addr)
+{
+struct flowi fl;
+struct neighbour *neigh;
+struct dst_entry *dst;
+int ret = -ENODATA;
+
+memset(&amp;fl, 0, sizeof fl);
+fl.nl_u.ip6_u.daddr = dst_in-&gt;sin6_addr;
+fl.nl_u.ip6_u.saddr = src_in-&gt;sin6_addr;
+
+dst = ip6_route_output(&amp;init_net, NULL, &amp;fl);
+if (!dst)
+return ret;
+
+if (dst-&gt;dev-&gt;flags &amp; IFF_NOARP) {
+ret = rdma_copy_addr(addr, dst-&gt;dev, NULL);
+} else {
+neigh = dst-&gt;neighbour;
+if (neigh &amp;&amp; (neigh-&gt;nud_state &amp; NUD_VALID))
+ret = rdma_copy_addr(addr, neigh-&gt;dev, neigh-&gt;ha);
+}
+
+dst_release(dst);
+return ret;
+}
+
+static int addr_resolve_remote(struct sockaddr *src_in,
+struct sockaddr *dst_in,
+struct rdma_dev_addr *addr)
+{
+if (src_in-&gt;sa_family == AF_INET) {
+return addr4_resolve_remote((struct sockaddr_in *)src_in,
+(struct sockaddr_in *)dst_in, addr);
+} else
+return addr6_resolve_remote((struct sockaddr_in6 *)src_in,
+(struct sockaddr_in6 *)dst_in, addr);
+}
+
 static void process_req(struct work_struct *work)
 {
 struct addr_req *req, *temp_req;
&lt; at &gt;&lt; at &gt; -279,29 +336,58 &lt; at &gt;&lt; at &gt; static int addr_resolve_local(struct sockaddr *src_in,
       struct rdma_dev_addr *addr)
 {
 struct net_device *dev;
-__be32 src_ip = ((struct sockaddr_in *)src_in)-&gt;sin_addr.s_addr;
-__be32 dst_ip = ((struct sockaddr_in *)dst_in)-&gt;sin_addr.s_addr;
-int ret;
+int ret = -EADDRNOTAVAIL;
 
-dev = ip_dev_find(&amp;init_net, dst_ip);
-if (!dev)
-return -EADDRNOTAVAIL;
+if (dst_in-&gt;sa_family == AF_INET) {
+__be32 src_ip = ((struct sockaddr_in *)src_in)-&gt;sin_addr.s_addr;
+__be32 dst_ip = ((struct sockaddr_in *)dst_in)-&gt;sin_addr.s_addr;
+
+dev = ip_dev_find(&amp;init_net, dst_ip);
+if (!dev)
+return -EADDRNOTAVAIL;
 
-if (ipv4_is_zeronet(src_ip)) {
-src_in-&gt;sa_family = dst_in-&gt;sa_family;
-((struct sockaddr_in *)src_in)-&gt;sin_addr.s_addr = dst_ip;
-ret = rdma_copy_addr(addr, dev, dev-&gt;dev_addr);
-} else if (ipv4_is_loopback(src_ip)) {
-ret = rdma_translate_ip(dst_in, addr);
-if (!ret)
-memcpy(addr-&gt;dst_dev_addr, dev-&gt;dev_addr, MAX_ADDR_LEN);
+if (ipv4_is_zeronet(src_ip)) {
+src_in-&gt;sa_family = dst_in-&gt;sa_family;
+((struct sockaddr_in *)src_in)-&gt;sin_addr.s_addr = dst_ip;
+ret = rdma_copy_addr(addr, dev, dev-&gt;dev_addr);
+} else if (ipv4_is_loopback(src_ip)) {
+ret = rdma_translate_ip(dst_in, addr);
+if (!ret)
+memcpy(addr-&gt;dst_dev_addr, dev-&gt;dev_addr, MAX_ADDR_LEN);
+} else {
+ret = rdma_translate_ip(src_in, addr);
+if (!ret)
+memcpy(addr-&gt;dst_dev_addr, dev-&gt;dev_addr, MAX_ADDR_LEN);
+}
+dev_put(dev);
 } else {
-ret = rdma_translate_ip(src_in, addr);
-if (!ret)
-memcpy(addr-&gt;dst_dev_addr, dev-&gt;dev_addr, MAX_ADDR_LEN);
+struct in6_addr *a = &amp;((struct sockaddr_in6 *)dst_in)-&gt;sin6_addr;
+
+for_each_netdev(&amp;init_net, dev)
+if (ipv6_chk_addr(&amp;init_net, &amp;((struct sockaddr_in6 *) addr)-&gt;sin6_addr, dev, 1))
+break;
+
+if (!dev)
+return -EADDRNOTAVAIL;
+
+a = &amp;((struct sockaddr_in6 *)src_in)-&gt;sin6_addr;
+
+if (ipv6_addr_any(a)) {
+src_in-&gt;sa_family = dst_in-&gt;sa_family;
+((struct sockaddr_in6 *)src_in)-&gt;sin6_addr =
+((struct sockaddr_in6 *)dst_in)-&gt;sin6_addr;
+ret = rdma_copy_addr(addr, dev, dev-&gt;dev_addr);
+} else if (ipv6_addr_loopback(a)) {
+ret = rdma_translate_ip(dst_in, addr);
+if (!ret)
+memcpy(addr-&gt;dst_dev_addr, dev-&gt;dev_addr, MAX_ADDR_LEN);
+} else  {
+ret = rdma_translate_ip(src_in, addr);
+if (!ret)
+memcpy(addr-&gt;dst_dev_addr, dev-&gt;dev_addr, MAX_ADDR_LEN);
+}
 }
 
-dev_put(dev);
 return ret;
 }
 
&lt; at &gt;&lt; at &gt; -344,7 +430,7 &lt; at &gt;&lt; at &gt; int rdma_resolve_ip(struct rdma_addr_client *client,
 case -ENODATA:
 req-&gt;timeout = msecs_to_jiffies(timeout_ms) + jiffies;
 queue_req(req);
-addr_send_arp((struct sockaddr_in *)dst_in);
+addr_send_arp(dst_in);
 break;
 default:
 ret = req-&gt;status;
</description>
    <dc:creator>Aleksey Senin</dc:creator>
    <dc:date>2008-12-01T13:16:44</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58851">
    <title>[ofa-general] [PATCH] mlx4_ib: Fix MTT leakage in resize_cq</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58851</link>
    <description>mlx4_ib: Fix MTT leakage in resize_cq.

MTTs associated with the old CQE buffer were not deallocated
(i.e., returned to the free pool).  As a result, the MTT free pool
was eventually completely emptied (for users of resize_cq).

Once the resize_cq command returns successfully from FW, FW no longer
accesses the old CQE buffer, so it is safe to deallocate the MTT entries
used by the old CQE buffer.

Finally, if the resize_cq command fails, the MTTs allocated for the new
CQEs buffer also need to be de-allocated.

Signed-off-by: Jack Morgenstein &lt;jackm&lt; at &gt;dev.mellanox.co.il&gt;

---

Roland,

Resize_cq is already in kernel 2.6.27, so I think this fix should go into a "latest stable"
kernel version (say, 2.6.27.8).  For heavy resize_cq users, such as MPI, this fix is
significant.

There is no need to call mlx4_mtt_cleanup separately for userspace and kernel-space paths --
this way the call is made in only one place. Actually, we cannot call mlx4_mtt_cleanup inside
a spinlock anyway, because it may sleep (it indirectly invokes mlx4_UNMAP_ICM).
There is also no need to protect the mlx4_mtt_cleanup call against parallel access (spinlock),
since the cleanup only is relevant to FW access to the buffer (MTT entries); the buffer itself
is still available (or not!) to the driver.

Finally, I save the mtt for cleanup because the switchover to the new buffer
may have already occurred (in mlx4_ib_poll_one) when the resize_cq call returns (in which
case cq-&gt;buf.mtt has already been overwritten with the new CQE buffer info).

diff --git a/drivers/infiniband/hw/mlx4/cq.c b/drivers/infiniband/hw/mlx4/cq.c
index d0866a3..20d6833 100644
--- a/drivers/infiniband/hw/mlx4/cq.c
+++ b/drivers/infiniband/hw/mlx4/cq.c
&lt; at &gt;&lt; at &gt; -343,6 +343,7 &lt; at &gt;&lt; at &gt; int mlx4_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
 {
 struct mlx4_ib_dev *dev = to_mdev(ibcq-&gt;device);
 struct mlx4_ib_cq *cq = to_mcq(ibcq);
+struct mlx4_mtt mtt;
 int outst_cqe;
 int err;
 
&lt; at &gt;&lt; at &gt; -376,10 +377,12 &lt; at &gt;&lt; at &gt; int mlx4_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
 goto out;
 }
 
+mtt = cq-&gt;buf.mtt;
 err = mlx4_cq_resize(dev-&gt;dev, &amp;cq-&gt;mcq, entries, &amp;cq-&gt;resize_buf-&gt;buf.mtt);
 if (err)
 goto err_buf;
 
+mlx4_mtt_cleanup(dev-&gt;dev, &amp;mtt);
 if (ibcq-&gt;uobject) {
 cq-&gt;buf      = cq-&gt;resize_buf-&gt;buf;
 cq-&gt;ibcq.cqe = cq-&gt;resize_buf-&gt;cqe;
&lt; at &gt;&lt; at &gt; -406,6 +409,7 &lt; at &gt;&lt; at &gt; int mlx4_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
 goto out;
 
 err_buf:
+mlx4_mtt_cleanup(dev-&gt;dev, &amp;cq-&gt;resize_buf-&gt;buf.mtt);
 if (!ibcq-&gt;uobject)
 mlx4_ib_free_cq_buf(dev, &amp;cq-&gt;resize_buf-&gt;buf,
     cq-&gt;resize_buf-&gt;cqe);
diff --git a/drivers/infiniband/hw/mlx4/mad.c b/drivers/infiniband/hw/mlx4/mad.c
diff --git a/drivers/infiniband/hw/mthca/mthca_mad.c b/drivers/infiniband/hw/mthca/mthca_mad.c
</description>
    <dc:creator>Jack Morgenstein</dc:creator>
    <dc:date>2008-12-01T12:32:38</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58850">
    <title>[ofa-general] ofa_1_4_kernel 20081201-0200 daily build status</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58850</link>
    <description>This email was generated automatically, please do not reply


git_url: git://git.openfabrics.org/ofed_1_4/linux-2.6.git
git_branch: ofed_kernel

Common build parameters: 

Passed:
Passed on i686 with linux-2.6.16
Passed on i686 with linux-2.6.17
Passed on i686 with linux-2.6.19
Passed on i686 with linux-2.6.18
Passed on i686 with linux-2.6.24
Passed on i686 with linux-2.6.22
Passed on i686 with linux-2.6.21.1
Passed on i686 with linux-2.6.26
Passed on i686 with linux-2.6.27
Passed on x86_64 with linux-2.6.16
Passed on x86_64 with linux-2.6.16.21-0.8-smp
Passed on x86_64 with linux-2.6.16.43-0.3-smp
Passed on x86_64 with linux-2.6.18
Passed on x86_64 with linux-2.6.17
Passed on x86_64 with linux-2.6.16.60-0.21-smp
Passed on x86_64 with linux-2.6.18-1.2798.fc6
Passed on x86_64 with linux-2.6.18-8.el5
Passed on x86_64 with linux-2.6.18-53.el5
Passed on x86_64 with linux-2.6.20
Passed on x86_64 with linux-2.6.19
Passed on x86_64 with linux-2.6.18-93.el5
Passed on x86_64 with linux-2.6.22
Passed on x86_64 with linux-2.6.21.1
Passed on x86_64 with linux-2.6.22.5-31-default
Passed on x86_64 with linux-2.6.25
Passed on x86_64 with linux-2.6.24
Passed on x86_64 with linux-2.6.26
Passed on x86_64 with linux-2.6.9-55.ELsmp
Passed on x86_64 with linux-2.6.9-42.ELsmp
Passed on x86_64 with linux-2.6.27
Passed on x86_64 with linux-2.6.9-67.ELsmp
Passed on x86_64 with linux-2.6.9-78.ELsmp
Passed on ia64 with linux-2.6.16
Passed on ia64 with linux-2.6.17
Passed on ia64 with linux-2.6.16.21-0.8-default
Passed on ia64 with linux-2.6.18
Passed on ia64 with linux-2.6.19
Passed on ia64 with linux-2.6.21.1
Passed on ia64 with linux-2.6.22
Passed on ia64 with linux-2.6.23
Passed on ia64 with linux-2.6.24
Passed on ia64 with linux-2.6.25
Passed on ia64 with linux-2.6.26
Passed on ppc64 with linux-2.6.16
Passed on ppc64 with linux-2.6.17
Passed on ppc64 with linux-2.6.18
Passed on ppc64 with linux-2.6.19
Passed on ppc64 with linux-2.6.18-8.el5

Failed:
</description>
    <dc:creator>Vladimir Sokolovsky (Mellanox</dc:creator>
    <dc:date>2008-12-01T11:20:34</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58849">
    <title>Re: [ofa-general] opensm support for toroidal meshes</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58849</link>
    <description>Hi all,

I just thought I should share some simulation results with you. I just
did some simulations to test Bob's suggested changes, and I see that the
number VLs required for both 2d and 3d tori is either _reduced_ or
_equal_ to that of the existing implementation. Moreover, the port
reordering seems to work very well on tori that is not cabled regularly
with regards to port numbering. As state by Bob it makes LASH route them
as if they where regularly cabled, which is the most optimal for LASH.

Below are some numbers for the VLs required for various 2d and 3d tori.
Be aware that the number of VLs required would be different if the torus
has a different size along each dimension.

Tori  Current  Patch
4x4      2      2
5x5      3      3
6x6      4      3
7x7      3      3
8x8      6      4
9x9      4      4
10x10    9      6
11x11    5      5
12x12    9      4
13x13    7      7
14x14   12      8
15x15   10     10

4x4x4    5      5
5x5x5    5      4
6x6x6   10      6
7x7x7   10     10
8x8x8   12      9
9x9x9   14     14

Regards,
Sven-Arne

On ma., 2008-11-10 at 15:47 -0600, Robert Pearson wrote: 

</description>
    <dc:creator>Sven-Arne Reinemo</dc:creator>
    <dc:date>2008-12-01T08:43:02</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58848">
    <title>RE: [ofa-general] [RMDA CM IPv6 support. PATCHv4 1/6]AF_INET6support for rdma_bind_addr</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58848</link>
    <description>
The patch set taken collectively looks good to me.  I think it makes sense to
view the series as 2 patches, one for ib_addr (patches 4-6), and one for rdma_cm
(patches 1-3).  The ib_addr patch should come first.

- Sean

</description>
    <dc:creator>Sean Hefty</dc:creator>
    <dc:date>2008-12-01T07:41:37</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58847">
    <title>[ofa-general] GitWeb really slow</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58847</link>
    <description>Hi,

This is not necessary the best place to post it but I was wondering why 
is ofed's gitweb so slow on the main page?
It takes only a few seconds to display all the repository on kernel.org 
(and there's a lot more) but it takes nearly a minute to display the 
OFED git main page...

I know it's probably not the most critical issue you have to work on but 
I connect quite often on this page and it starts to be really bugging 
me. And I'm probably not the only one ;)

Thanks in advance


Nicolas Morey-Chaisemartin
</description>
    <dc:creator>Nicolas Morey Chaisemartin</dc:creator>
    <dc:date>2008-12-01T07:11:31</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58846">
    <title>Re: [ofa-general] receiving wrong data after trying to allocationa too large memory chunk</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58846</link>
    <description>I apologize for my dyslectic subject.  This should be better.  We would 
very much like to know if anybody else can reproduce the results?  If 
you need more info please contact us.

Regards,
Asmund (dyslectic programmer)


Asmund Ostvold wrote:

</description>
    <dc:creator>Asmund Ostvold</dc:creator>
    <dc:date>2008-12-01T07:01:09</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58845">
    <title>[ofa-general] Re: {PATCH] [2] opensm: per mesh data</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58845</link>
    <description>
lash_cleanup() is called at start of LASH processor, so mesh will keep
allocated data between routing calculation cycles. But as far as I can
see it is not used there. Also osm_mesh_cleanup() is not called on lash
deletion and we have a memory leak.

Maybe osm_mesh_cleanup() should be static function (mesh_cleanup()) and
be called somewhere at end of osm_do_mesh_analysis()?

Sasha
</description>
    <dc:creator>Sasha Khapyorsky</dc:creator>
    <dc:date>2008-11-30T23:54:14</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.linux.drivers.openib/58844">
    <title>[ofa-general] Re: [PATCH][10] opensm: hook mesh code into lash(updated)</title>
    <link>http://permalink.gmane.org/gmane.linux.drivers.openib/58844</link>
    <description>
I think it should be fixed in related patch.


Nice finding.


Would snprintf() be more suitable here in order to prevent potential
overflow? (This is a nit - dimension value is limited now in mesh_info
structure).


This 'if (sw1 == sw2)' is related for non mesh case too, right?

Sasha

</description>
    <dc:creator>Sasha Khapyorsky</dc:creator>
    <dc:date>2008-11-30T21:34:02</dc:date>
  </item>
  <textinput about="http://search.gmane.org/?group=$group=gmane.linux.drivers.openib">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.linux.drivers.openib</link>
  </textinput>
</rdf:RDF>
