<?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://comments.gmane.org/gmane.linux.drivers.openib/58875"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.drivers.openib/58874"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.drivers.openib/58872"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.drivers.openib/58869"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.drivers.openib/58867"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.drivers.openib/58866"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.drivers.openib/58865"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.drivers.openib/58863"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.drivers.openib/58859"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.drivers.openib/58857"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.drivers.openib/58856"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.drivers.openib/58855"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.drivers.openib/58854"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.drivers.openib/58852"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.drivers.openib/58851"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.drivers.openib/58850"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.drivers.openib/58847"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.drivers.openib/58835"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.drivers.openib/58834"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.drivers.openib/58822"/>
      </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://comments.gmane.org/gmane.linux.drivers.openib/58875">
    <title>[ofa-general] [ipoib][patch] support default_pkey module option</title>
    <link>http://comments.gmane.org/gmane.linux.drivers.openib/58875</link>
    <description>Hi all,

As far as I can tell, the only way to create an ipoib interface w/ a
non-default pkey is to:

1) goto /sys/class/net/ibX/
2) echo $MY_NEW_PKEY &gt; create_child
3) then bring up ibX.MY_NEW_PKEY interface
3a) assuming I don't want the original ib0, bring it down (although
leaving it up, I guess may not harm anything)

It seems somewhat cumbersome for an administrator to script this all up
if they only want 1 ipoib interface w/ a non-default pkey.  The attached
patch creates a module option called "default_pkey" to allow ipoib to
default to a different pkey.  If nothing is input, it still uses the
pkey at index 0.

Al

</description>
    <dc:creator>Al Chu</dc:creator>
    <dc:date>2008-12-02T18:07:19</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.drivers.openib/58874">
    <title>[ofa-general] [PATCH] uverbs: return ENOSYS for unimplementedcommands (not EINVAL)</title>
    <link>http://comments.gmane.org/gmane.linux.drivers.openib/58874</link>
    <description>uverbs: return ENOSYS for unimplemented commands (not EINVAL)

In the original commit (883a99c7024c5763d6d4f22d9239c133893e8d74)
(Add a mask of device methods allowed for userspace), 
the driver returned EINVAL for unimplemented commands.

This creates a problem that there is no way to differentiate between
an unimplemented command and an implemented one which is incorrectly
invoked (which also returns EINVAL).

The fix is to have unimplemented commands return ENOSYS.

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

---

Roland,
We've got a bit of a salad here (d--ned if we do, d--ned if we don't).

In userspace, we have low-level libraries put NULL in the virtual function
table for unimplemented verbs. libibverbs then returns NULL for those
unimplemented verbs which expect a pointer return (e.g., ibv_create_srq)
(also a problem since this does not differentiate between a missing verb and
an incorrectly-invoked one),
and ENOSYS for verbs which expect an int returned (e.g., resize_cq).

This is not consistent with what was done in the kernel for unimplemented verbs
(where EINVAL is returned).

Additionally, what was done in the kernel (returning EINVAL) is problematic
in that it makes it impossible to differentiate an unimplemented verb from one
which simply had errors in the calling parameters.

IMHO, the correct fix is to have unimplemented kernel verbs return ENOSYS.
**(MPI already checks for ENOSYS when deciding whether or not to use resize-cq)**.

I'm not sure, though, how to handle returns from older kernels -- should all user
apps check for either ENOSYS or EINVAL?  What about cases where the verb actually
is implemented, but incorrectly called -- in older kernels this is already a problem.
What about apps which checked for ENOSYS (consistent with userspace usage), and
then run with a new low-level library over an older kernel, and suddenly start getting
EINVAL returns (for resize_cq, there is no "activation" bit anywhere which gets passed
from kernel to the user-level)?

Ouch!

Any ideas?

Index: infiniband/drivers/infiniband/core/uverbs_main.c
===================================================================
--- infiniband.orig/drivers/infiniband/core/uverbs_main.c
+++ infiniband/drivers/infiniband/core/uverbs_main.c
&lt; at &gt;&lt; at &gt; -584,10 +584,12 &lt; at &gt;&lt; at &gt; static ssize_t ib_uverbs_write(struct fi
 
 if (hdr.command &lt; 0||
     hdr.command &gt;= ARRAY_SIZE(uverbs_cmd_table) ||
-    !uverbs_cmd_table[hdr.command]||
-    !(file-&gt;device-&gt;ib_dev-&gt;uverbs_cmd_mask &amp; (1ull &lt;&lt; hdr.command)))
+    !uverbs_cmd_table[hdr.command])
 return -EINVAL;
 
+if (!(file-&gt;device-&gt;ib_dev-&gt;uverbs_cmd_mask &amp; (1ull &lt;&lt; hdr.command)))
+return -ENOSYS;
+
 if (!file-&gt;ucontext &amp;&amp;
     hdr.command != IB_USER_VERBS_CMD_GET_CONTEXT)
 return -EINVAL;
</description>
    <dc:creator>Jack Morgenstein</dc:creator>
    <dc:date>2008-12-02T17:43:44</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.drivers.openib/58872">
    <title>[ofa-general] OFED Dec 1,2008 meeting minutes on OFED 1.4 release status</title>
    <link>http://comments.gmane.org/gmane.linux.drivers.openib/58872</link>
    <description>OFED Dec 1, 2008 meeting minutes on OFED 1.4 release status
===============================================

Meeting minutes on the web:
http://www.openfabrics.org/txt/documentation/linux/EWG_meeting_minutes/

Meeting Summary:
==============
- OFED 1.4 release:  GA on Dec 9 (delayed in one day to be after the
OFED release meeting)
- UNH Logo testing: Rupert will ask them to start with the SW testing,
so we can get a report by middle of this week


Details:
=======

1. Bug list review:
1421    blo  raisch&lt; at &gt;de.ibm.com  ipoib/ehca crash when
bouncing network - fixed
1413 cri jackm&lt; at &gt;mellanox.co.il rmmod mlx4_ib deadlock - very
rare case - reduced to normal
1384 maj eli&lt; at &gt;mellanox.co.il netperf latency small messages
increase 5% - UD mode issue - under investigation
1386 maj eli&lt; at &gt;mellanox.co.il ofed 1.4 - iperf tcp connected
mode BW large messages dec... - under investigation
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
- Have not run a lot of tests on RC5
- Should do it this week with RC6
- Need to send the results of the SW part in the middle of this week so
we will know we are OK for the GA release next week

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?
    Will wait for decision according to reply of Intel IMB owner


Tziporet

</description>
    <dc:creator>Tziporet Koren</dc:creator>
    <dc:date>2008-12-02T15:29:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.drivers.openib/58869">
    <title>[ofa-general] [PATCH] cma_zero_addr</title>
    <link>http://comments.gmane.org/gmane.linux.drivers.openib/58869</link>
    <description>This is not really bug fix, but more cosmetic change. There is
ipv6_addr_any function in the kernel, so I propose to use it instead of
the same code duplicated in cma_zero_addr.


From: Aleksey Senin &lt;alekseys&lt; at &gt;voltaire.com&gt;
Date: Tue, 2 Dec 2008 14:52:27 +0200
Subject: [PATCH] cma_zero_addr optimized

Using builtin kernel function to check zero address

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

:100644 100644 f69dda4... 17864d6... Mdrivers/infiniband/core/cma.c

diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index f69dda4..17864d6 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
&lt; at &gt;&lt; at &gt; -623,16 +623,12 &lt; at &gt;&lt; at &gt; EXPORT_SYMBOL(rdma_init_qp_attr);
 
 static inline int cma_zero_addr(struct sockaddr *addr)
 {
-struct in6_addr *ip6;
-
 if (addr-&gt;sa_family == AF_INET)
 return ipv4_is_zeronet(
 ((struct sockaddr_in *)addr)-&gt;sin_addr.s_addr);
-else {
-ip6 = &amp;((struct sockaddr_in6 *) addr)-&gt;sin6_addr;
-return (ip6-&gt;s6_addr32[0] | ip6-&gt;s6_addr32[1] |
-ip6-&gt;s6_addr32[2] | ip6-&gt;s6_addr32[3]) == 0;
-}
+else
+return ipv6_addr_any(
+&amp;((struct sockaddr_in6 *)addr)-&gt;sin6_addr);
 }
 
 static inline int cma_loopback_addr(struct sockaddr *addr)
</description>
    <dc:creator>Aleksey Senin</dc:creator>
    <dc:date>2008-12-02T12:58:00</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.drivers.openib/58867">
    <title>[ofa-general] [PATCHv6 RDMA CM IPv6 1/2] IB address changes</title>
    <link>http://comments.gmane.org/gmane.linux.drivers.openib/58867</link>
    <description>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

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

diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
index f95d21f..bc1a97b 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;
 
-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;
 
-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);
+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);
+} 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-02T12:44:51</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.drivers.openib/58866">
    <title>[ofa-general] [PATCH] SDP: Fix to limit max buffer size in sdp_resize_buffers on IA64</title>
    <link>http://comments.gmane.org/gmane.linux.drivers.openib/58866</link>
    <description>Fix for bug 1311
https://bugs.openfabrics.org/show_bug.cgi?id=1311


Signed-off-by: Nicolas Morey-Chaisemartin 
&lt;nicolas.morey-chaisemartin&lt; at &gt;ext.bull.net&gt;
---
  drivers/infiniband/ulp/sdp/sdp_bcopy.c |    8 ++++++++
  1 files changed, 8 insertions(+), 0 deletions(-)
</description>
    <dc:creator>Nicolas Morey Chaisemartin</dc:creator>
    <dc:date>2008-12-02T11:37:04</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.drivers.openib/58865">
    <title>[ofa-general] ofa_1_4_kernel 20081202-0200 daily build status</title>
    <link>http://comments.gmane.org/gmane.linux.drivers.openib/58865</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.19
Passed on i686 with linux-2.6.17
Passed on i686 with linux-2.6.18
Passed on i686 with linux-2.6.24
Passed on i686 with linux-2.6.21.1
Passed on i686 with linux-2.6.22
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.43-0.3-smp
Passed on x86_64 with linux-2.6.16.21-0.8-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-53.el5
Passed on x86_64 with linux-2.6.18-8.el5
Passed on x86_64 with linux-2.6.19
Passed on x86_64 with linux-2.6.20
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-42.ELsmp
Passed on x86_64 with linux-2.6.9-55.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.19
Passed on ia64 with linux-2.6.21.1
Passed on ia64 with linux-2.6.18
Passed on ia64 with linux-2.6.24
Passed on ia64 with linux-2.6.23
Passed on ia64 with linux-2.6.22
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-02T11:25:37</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.drivers.openib/58863">
    <title>[ofa-general] ***SPAM*** git http url for ofed_1_3/management.git</title>
    <link>http://comments.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://comments.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://comments.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://comments.gmane.org/gmane.linux.drivers.openib/58857">
    <title>[ofa-general] [GIT PULL] please pull infiniband.git</title>
    <link>http://comments.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://comments.gmane.org/gmane.linux.drivers.openib/58856">
    <title>[ofa-general] Agenda for OFED meeting today (Dec 1) on OFED 1.4</title>
    <link>http://comments.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://comments.gmane.org/gmane.linux.drivers.openib/58855">
    <title>[ofa-general] RESEND: net.ipv4.tcp_timestamps</title>
    <link>http://comments.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://comments.gmane.org/gmane.linux.drivers.openib/58854">
    <title>[ofa-general] net.ipv4.tcp_timestamps</title>
    <link>http://comments.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://comments.gmane.org/gmane.linux.drivers.openib/58852">
    <title>[ofa-general] [RMDA CM IPv6 support. PATCHv5 1/2]IPv6 IB addrresolution</title>
    <link>http://comments.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://comments.gmane.org/gmane.linux.drivers.openib/58851">
    <title>[ofa-general] [PATCH] mlx4_ib: Fix MTT leakage in resize_cq</title>
    <link>http://comments.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://comments.gmane.org/gmane.linux.drivers.openib/58850">
    <title>[ofa-general] ofa_1_4_kernel 20081201-0200 daily build status</title>
    <link>http://comments.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://comments.gmane.org/gmane.linux.drivers.openib/58847">
    <title>[ofa-general] GitWeb really slow</title>
    <link>http://comments.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://comments.gmane.org/gmane.linux.drivers.openib/58835">
    <title>[ofa-general] [PATCH][12] opensm: add descriptions to show_usage</title>
    <link>http://comments.gmane.org/gmane.linux.drivers.openib/58835</link>
    <description>Sasha,

This patch adds language to show_usage for the --do_mesh_analysis flag.

Regards,

Bob Pearson

Signed-off-by: Bob Pearson &lt;rpearson&lt; at &gt;systemfabricworks.com&gt;

</description>
    <dc:creator>Robert Pearson</dc:creator>
    <dc:date>2008-11-30T18:51:53</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.drivers.openib/58834">
    <title>[ofa-general] [PATCH][11] opensm: add descriptions to docs and manpage</title>
    <link>http://comments.gmane.org/gmane.linux.drivers.openib/58834</link>
    <description>Sasha,

This patch adds some descriptive language to current_routing.txt and
opensm.8.in.

Regards,

Bob Pearson

Signed-off-by: Bob Pearson &lt;rpearson&lt; at &gt;systemfabricworks.com&gt;
</description>
    <dc:creator>Robert Pearson</dc:creator>
    <dc:date>2008-11-30T18:39:53</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.drivers.openib/58822">
    <title>[ofa-general] ofa_1_4_kernel 20081130-0200 daily build status</title>
    <link>http://comments.gmane.org/gmane.linux.drivers.openib/58822</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.19
Passed on i686 with linux-2.6.17
Passed on i686 with linux-2.6.18
Passed on i686 with linux-2.6.22
Passed on i686 with linux-2.6.21.1
Passed on i686 with linux-2.6.24
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.43-0.3-smp
Passed on x86_64 with linux-2.6.16.21-0.8-smp
Passed on x86_64 with linux-2.6.17
Passed on x86_64 with linux-2.6.18
Passed on x86_64 with linux-2.6.16.60-0.21-smp
Passed on x86_64 with linux-2.6.18-8.el5
Passed on x86_64 with linux-2.6.18-1.2798.fc6
Passed on x86_64 with linux-2.6.18-53.el5
Passed on x86_64 with linux-2.6.19
Passed on x86_64 with linux-2.6.20
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-42.ELsmp
Passed on x86_64 with linux-2.6.9-55.ELsmp
Passed on x86_64 with linux-2.6.27
Passed on x86_64 with linux-2.6.9-78.ELsmp
Passed on x86_64 with linux-2.6.9-67.ELsmp
Passed on ia64 with linux-2.6.17
Passed on ia64 with linux-2.6.16
Passed on ia64 with linux-2.6.16.21-0.8-default
Passed on ia64 with linux-2.6.21.1
Passed on ia64 with linux-2.6.19
Passed on ia64 with linux-2.6.18
Passed on ia64 with linux-2.6.23
Passed on ia64 with linux-2.6.24
Passed on ia64 with linux-2.6.22
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.19
Passed on ppc64 with linux-2.6.18
Passed on ppc64 with linux-2.6.18-8.el5

Failed:
</description>
    <dc:creator>Vladimir Sokolovsky (Mellanox</dc:creator>
    <dc:date>2008-11-30T11:20:52</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.drivers.openib/58821">
    <title>[ofa-general] [PATCH 2 of 2] ib_mthca: Fix dispatchofIB_EVENT_LID_CHANGE</title>
    <link>http://comments.gmane.org/gmane.linux.drivers.openib/58821</link>
    <description>ib_mthca: Fix dispatch of IB_EVENT_LID_CHANGE

When snooping a portinfo MAD, its client_reregister bit is checked. 
If the bit is ON then a CLIENT_REREGISTER event is dispatched, otherwise
a LID_CHANGE event is dispatched. This ignores the cases where the MAD
changes the LID along with an instruction to reregister (so a
necessary LID_CHANGE event won't be dispatched), or the MAD is neither of
these (and an unnecessary LID_CHANGE event is dispatched). 

This patch dispatches an event if the client_reregister bit is set.
In addition, the patch compares the LID in the MAD to the current LID.
If and only if they are not identical, a LID_CHANGE event is dispatched.

From: Moni Shoua &lt;monis&lt; at &gt;voltaire.com&gt;
Signed-off-by: Moni Shoua &lt;monis&lt; at &gt;voltaire.com&gt;
Signed-off-by: Jack Morgenstein &lt;jackm&lt; at &gt;dev.mellanox.co.il&gt;
Signed-off-by: Yossi Etigin &lt;yosefe&lt; at &gt;voltaire.com&gt;

---

Roland,
Here is Moni's patch separated into two patches, one for mlx4_ib and one for ib_mthca.

Jack

Index: infiniband/drivers/infiniband/hw/mthca/mthca_mad.c
===================================================================
--- infiniband.orig/drivers/infiniband/hw/mthca/mthca_mad.c2008-11-04 10:21:02.000000000 +0200
+++ infiniband/drivers/infiniband/hw/mthca/mthca_mad.c2008-11-30 09:48:35.000000000 +0200
&lt; at &gt;&lt; at &gt; -104,7 +104,8 &lt; at &gt;&lt; at &gt; static void update_sm_ah(struct mthca_de
  */
 static void smp_snoop(struct ib_device *ibdev,
       u8 port_num,
-      struct ib_mad *mad)
+      struct ib_mad *mad,
+      u16 prev_lid)
 {
 struct ib_event event;
 
&lt; at &gt;&lt; at &gt; -114,6 +115,7 &lt; at &gt;&lt; at &gt; static void smp_snoop(struct ib_device *
 if (mad-&gt;mad_hdr.attr_id == IB_SMP_ATTR_PORT_INFO) {
 struct ib_port_info *pinfo =
 (struct ib_port_info *) ((struct ib_smp *) mad)-&gt;data;
+u16 lid = be16_to_cpu(pinfo-&gt;lid);
 
 mthca_update_rate(to_mdev(ibdev), port_num);
 update_sm_ah(to_mdev(ibdev), port_num,
&lt; at &gt;&lt; at &gt; -123,12 +125,15 &lt; at &gt;&lt; at &gt; static void smp_snoop(struct ib_device *
 event.device           = ibdev;
 event.element.port_num = port_num;
 
-if (pinfo-&gt;clientrereg_resv_subnetto &amp; 0x80)
+if (pinfo-&gt;clientrereg_resv_subnetto &amp; 0x80) {
 event.event    = IB_EVENT_CLIENT_REREGISTER;
-else
+ib_dispatch_event(&amp;event);
+}
+if (prev_lid != lid) {
 event.event    = IB_EVENT_LID_CHANGE;
+ib_dispatch_event(&amp;event);
+}
 
-ib_dispatch_event(&amp;event);
 }
 
 if (mad-&gt;mad_hdr.attr_id == IB_SMP_ATTR_PKEY_TABLE) {
&lt; at &gt;&lt; at &gt; -196,6 +201,8 &lt; at &gt;&lt; at &gt; int mthca_process_mad(struct ib_device *
 int err;
 u8 status;
 u16 slid = in_wc ? in_wc-&gt;slid : be16_to_cpu(IB_LID_PERMISSIVE);
+u16 prev_lid = 0;
+struct ib_port_attr pattr;
 
 /* Forward locally generated traps to the SM */
 if (in_mad-&gt;mad_hdr.method == IB_MGMT_METHOD_TRAP &amp;&amp;
&lt; at &gt;&lt; at &gt; -233,6 +240,12 &lt; at &gt;&lt; at &gt; int mthca_process_mad(struct ib_device *
 return IB_MAD_RESULT_SUCCESS;
 } else
 return IB_MAD_RESULT_SUCCESS;
+if ((in_mad-&gt;mad_hdr.mgmt_class == IB_MGMT_CLASS_SUBN_LID_ROUTED ||
+     in_mad-&gt;mad_hdr.mgmt_class == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE) &amp;&amp;
+    in_mad-&gt;mad_hdr.method == IB_MGMT_METHOD_SET &amp;&amp;
+    in_mad-&gt;mad_hdr.attr_id == IB_SMP_ATTR_PORT_INFO &amp;&amp;
+    !ib_query_port(ibdev, port_num, &amp;pattr))
+prev_lid = pattr.lid;
 
 err = mthca_MAD_IFC(to_mdev(ibdev),
     mad_flags &amp; IB_MAD_IGNORE_MKEY,
&lt; at &gt;&lt; at &gt; -252,7 +265,7 &lt; at &gt;&lt; at &gt; int mthca_process_mad(struct ib_device *
 }
 
 if (!out_mad-&gt;mad_hdr.status) {
-smp_snoop(ibdev, port_num, in_mad);
+smp_snoop(ibdev, port_num, in_mad, prev_lid);
 node_desc_override(ibdev, out_mad);
 }
 
</description>
    <dc:creator>Jack Morgenstein</dc:creator>
    <dc:date>2008-11-30T08:29:01</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>
