Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=aeba84a9251968a51fc6faae846518aac4e77565
Commit:     aeba84a9251968a51fc6faae846518aac4e77565
Parent:     46f1b3d7aff99ef4c1e729e023b9c8ee51de5973
Author:     Sean Hefty <[EMAIL PROTECTED]>
AuthorDate: Thu Apr 5 11:49:21 2007 -0700
Committer:  Roland Dreier <[EMAIL PROTECTED]>
CommitDate: Tue Apr 24 16:31:12 2007 -0700

    IB/umad: Implement GRH handling for sent/received MADs
    
    We need to set the SGID index for routed MADs and pass received
    GRH information to userspace when a MAD is received.
    
    Signed-off-by: Sean Hefty <[EMAIL PROTECTED]>
---
 drivers/infiniband/core/user_mad.c |   18 ++++++++++++------
 1 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/drivers/infiniband/core/user_mad.c 
b/drivers/infiniband/core/user_mad.c
index 2ce3eea..8199b83 100644
--- a/drivers/infiniband/core/user_mad.c
+++ b/drivers/infiniband/core/user_mad.c
@@ -231,12 +231,17 @@ static void recv_handler(struct ib_mad_agent *agent,
        packet->mad.hdr.path_bits = mad_recv_wc->wc->dlid_path_bits;
        packet->mad.hdr.grh_present = !!(mad_recv_wc->wc->wc_flags & IB_WC_GRH);
        if (packet->mad.hdr.grh_present) {
-               /* XXX parse GRH */
-               packet->mad.hdr.gid_index       = 0;
-               packet->mad.hdr.hop_limit       = 0;
-               packet->mad.hdr.traffic_class   = 0;
-               memset(packet->mad.hdr.gid, 0, 16);
-               packet->mad.hdr.flow_label      = 0;
+               struct ib_ah_attr ah_attr;
+
+               ib_init_ah_from_wc(agent->device, agent->port_num,
+                                  mad_recv_wc->wc, mad_recv_wc->recv_buf.grh,
+                                  &ah_attr);
+
+               packet->mad.hdr.gid_index = ah_attr.grh.sgid_index;
+               packet->mad.hdr.hop_limit = ah_attr.grh.hop_limit;
+               packet->mad.hdr.traffic_class = ah_attr.grh.traffic_class;
+               memcpy(packet->mad.hdr.gid, &ah_attr.grh.dgid, 16);
+               packet->mad.hdr.flow_label = 
cpu_to_be32(ah_attr.grh.flow_label);
        }
 
        if (queue_packet(file, agent, packet))
@@ -473,6 +478,7 @@ static ssize_t ib_umad_write(struct file *filp, const char 
__user *buf,
        if (packet->mad.hdr.grh_present) {
                ah_attr.ah_flags = IB_AH_GRH;
                memcpy(ah_attr.grh.dgid.raw, packet->mad.hdr.gid, 16);
+               ah_attr.grh.sgid_index     = packet->mad.hdr.gid_index;
                ah_attr.grh.flow_label     = 
be32_to_cpu(packet->mad.hdr.flow_label);
                ah_attr.grh.hop_limit      = packet->mad.hdr.hop_limit;
                ah_attr.grh.traffic_class  = packet->mad.hdr.traffic_class;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to