<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
span.EmailStyle18
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
 /* List Definitions */
 @list l0
        {mso-list-id:1522864423;
        mso-list-type:hybrid;
        mso-list-template-ids:-1985993516 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-text:"%1\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level2
        {mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1
        {mso-list-id:1731614313;
        mso-list-type:hybrid;
        mso-list-template-ids:-874981430 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l1:level1
        {mso-level-text:"%1\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level2
        {mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=WordSection1>

<p class=MsoNormal>The following “patch” is a collection of
“fixes” that I have created in order to have a basic functionality
of RoCE working on windows.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>As you will probably see from reading this patch, this is
obviously not something that we can checkin, but rather this is a list of
places that we need to change in order to get roce to work.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>With the changes below, I have the following working:<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l1 level1 lfo2'><![if !supportLists]><span
style='mso-list:Ignore'>1)<span style='font:7.0pt "Times New Roman"'>     
</span></span><![endif]><span dir=LTR></span>ND (version 1 – ibal)
working.<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l1 level1 lfo2'><![if !supportLists]><span
style='mso-list:Ignore'>2)<span style='font:7.0pt "Times New Roman"'>     
</span></span><![endif]><span dir=LTR></span>Ib_send_bw working. (RC + UD)<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l1 level1 lfo2'><![if !supportLists]><span
style='mso-list:Ignore'>3)<span style='font:7.0pt "Times New Roman"'>     
</span></span><![endif]><span dir=LTR></span>A basic winverbes test working.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>From the functionality perspective, I still need to have all
the nd versions work (nd over winverbies, ND 2), RDMA CM working, more
winverbes program working, RDMA-CM working, multicast, …<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>As far as I can see, adding more functionality should be
relatively the easy part. The real problems that it seems that I’ll have
are more related to having small fixes to many small factors:<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo4'><![if !supportLists]><span
style='mso-list:Ignore'>1)<span style='font:7.0pt "Times New Roman"'>     
</span></span><![endif]><span dir=LTR></span>Having both ports working.<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo4'><![if !supportLists]><span
style='mso-list:Ignore'>2)<span style='font:7.0pt "Times New Roman"'>     
</span></span><![endif]><span dir=LTR></span>Having eth, ib drivers go up and
down with different order. This has problems with the caching of gids by the
mlx4_bus driver.<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo4'><![if !supportLists]><span
style='mso-list:Ignore'>3)<span style='font:7.0pt "Times New Roman"'>     
</span></span><![endif]><span dir=LTR></span>Fixing the mtu issues (Ethernet
usually works with mtu=1500, while RoCE works better with mtu=2k.<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo4'><![if !supportLists]><span
style='mso-list:Ignore'>4)<span style='font:7.0pt "Times New Roman"'>     
</span></span><![endif]><span dir=LTR></span>Performance tuning.<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo4'><![if !supportLists]><span
style='mso-list:Ignore'>5)<span style='font:7.0pt "Times New Roman"'>     
</span></span><![endif]><span dir=LTR></span>Add support for vlans,<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo4'><![if !supportLists]><span
style='mso-list:Ignore'>6)<span style='font:7.0pt "Times New Roman"'>     
</span></span><![endif]><span dir=LTR></span>Don’t handle qp0.<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo4'><![if !supportLists]><span
style='mso-list:Ignore'>7)<span style='font:7.0pt "Times New Roman"'>     
</span></span><![endif]><span dir=LTR></span>UD support on user mode.<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo4'><![if !supportLists]><span
style='mso-list:Ignore'>8)<span style='font:7.0pt "Times New Roman"'>     
</span></span><![endif]><span dir=LTR></span>Setup issues.<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo4'><![if !supportLists]><span
style='mso-list:Ignore'>9)<span style='font:7.0pt "Times New Roman"'>     
</span></span><![endif]><span dir=LTR></span>UI issues.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>Please note that the patch below assumes that you have the
hw driver that I have submitted to ofw last week. Since it seems that most
people did not receive it, please let me know if you need the latest mlx4_bus driver.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>Thanks<o:p></o:p></p>

<p class=MsoNormal>Tzachi<o:p></o:p></p>

<p class=MsoListParagraph><o:p> </o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- hw/mlx4/kernel/bus/core/cache.c    (revision
6962)<o:p></o:p></p>

<p class=MsoNormal>+++ hw/mlx4/kernel/bus/core/cache.c (working copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -289,6 +290,18 @@<o:p></o:p></p>

<p class=MsoNormal>                                }<o:p></o:p></p>

<p class=MsoNormal>                }<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>+             MLX4_PRINT(TRACE_LEVEL_WARNING,
MLX4_DBG_DRV,("First gid that was read is 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x
0x%x 0x%x",<o:p></o:p></p>

<p class=MsoNormal>+                                             gid_cache->table1->raw[8],<o:p></o:p></p>

<p class=MsoNormal>+                                             gid_cache->table1->raw[9],<o:p></o:p></p>

<p class=MsoNormal>+                                             gid_cache->table1->raw[10],<o:p></o:p></p>

<p class=MsoNormal>+                                             gid_cache->table1->raw[11],<o:p></o:p></p>

<p class=MsoNormal>+                                             gid_cache->table1->raw[12],<o:p></o:p></p>

<p class=MsoNormal>+                                             gid_cache->table1->raw[13],<o:p></o:p></p>

<p class=MsoNormal>+                                             gid_cache->table1->raw[14],<o:p></o:p></p>

<p class=MsoNormal>+                                             gid_cache->table1->raw[15]<o:p></o:p></p>

<p class=MsoNormal>+                             ));<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>                write_lock_irq(&device->cache.lock);<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>                old_pkey_cache
= device->cache.pkey_cache[port - start_port(device)];<o:p></o:p></p>

<p class=MsoNormal>Index: hw/mlx4/kernel/bus/drv/drv.c<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- hw/mlx4/kernel/bus/drv/drv.c           (revision
6962)<o:p></o:p></p>

<p class=MsoNormal>+++ hw/mlx4/kernel/bus/drv/drv.c        (working
copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -262,16 +262,19 @@<o:p></o:p></p>

<p class=MsoNormal>                number_of_ib_ports
= mlx4_count_ib_ports(mdev);<o:p></o:p></p>

<p class=MsoNormal>                ASSERT(number_of_ib_ports
>=0 && number_of_ib_ports <=2);<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-#if 0<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>                //For
now we it's either IB or ETH, and we always create LLE if it's ETH<o:p></o:p></p>

<p class=MsoNormal>-              if((number_of_ib_ports
> 0) && (mdev->caps.port_type[1] == MLX4_PORT_TYPE_IB) ) {<o:p></o:p></p>

<p class=MsoNormal>-                              status
= __create_child(Device, BUS_HARDWARE_IDS, BUS_HARDWARE_DESCRIPTION, 0 );<o:p></o:p></p>

<p class=MsoNormal>+//         if((number_of_ib_ports
> 0) && (mdev->caps.port_type[1] == MLX4_PORT_TYPE_IB) ) {<o:p></o:p></p>

<p class=MsoNormal>+                             status
= __create_child(Device, BUS_HARDWARE_IDS, BUS_HARDWARE_IDS, BUS_HARDWARE_DESCRIPTION,
0 );<o:p></o:p></p>

<p class=MsoNormal>                                if
(!NT_SUCCESS(status)) {<o:p></o:p></p>

<p class=MsoNormal>                                                 MLX4_PRINT_EV(TRACE_LEVEL_ERROR,
MLX4_DBG_DRV, ("__create_child (ib)failed with 0x%x\n", status));<o:p></o:p></p>

<p class=MsoNormal>+                                             
//??????? error<o:p></o:p></p>

<p class=MsoNormal>+                             }
else {<o:p></o:p></p>

<p class=MsoNormal>+                                             ib_created
= TRUE;<o:p></o:p></p>

<p class=MsoNormal>                                }<o:p></o:p></p>

<p class=MsoNormal>-              }<o:p></o:p></p>

<p class=MsoNormal>-#endif<o:p></o:p></p>

<p class=MsoNormal>+//         }<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>                for
(i = 1; i <= mdev->caps.num_ports; i++) {<o:p></o:p></p>

<p class=MsoNormal>                                if
(mlx4_is_enabled_port(mdev, i)) {<o:p></o:p></p>

<p class=MsoNormal>                                                if(mlx4_is_eth_port(mdev,
i)) {<o:p></o:p></p>

<p class=MsoNormal>@@ -1342,7 +1345,7 @@<o:p></o:p></p>

<p class=MsoNormal> }<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-//#define DONT_START_ON_BOOT<o:p></o:p></p>

<p class=MsoNormal>+#define DONT_START_ON_BOOT<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> NTSTATUS<o:p></o:p></p>

<p class=MsoNormal> EvtDriverDeviceAdd(<o:p></o:p></p>

<p class=MsoNormal>Index: hw/mlx4/kernel/bus/net/main.c<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- hw/mlx4/kernel/bus/net/main.c       (revision
6962)<o:p></o:p></p>

<p class=MsoNormal>+++ hw/mlx4/kernel/bus/net/main.c    (working
copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -2062,6 +2062,8 @@<o:p></o:p></p>

<p class=MsoNormal>                                                                count++;<o:p></o:p></p>

<p class=MsoNormal>                                                }<o:p></o:p></p>

<p class=MsoNormal>                }<o:p></o:p></p>

<p class=MsoNormal>+             if
(count ==0) <o:p></o:p></p>

<p class=MsoNormal>+                             count
=1 ;<o:p></o:p></p>

<p class=MsoNormal>                return
count;<o:p></o:p></p>

<p class=MsoNormal> }<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>Index: hw/mlx4/kernel/bus/net/port.c<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- hw/mlx4/kernel/bus/net/port.c         (revision
6962)<o:p></o:p></p>

<p class=MsoNormal>+++ hw/mlx4/kernel/bus/net/port.c      (working
copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -84,6 +84,7 @@<o:p></o:p></p>

<p class=MsoNormal>                u32
in_mod;<o:p></o:p></p>

<p class=MsoNormal>                int
err;<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>                mailbox
= mlx4_alloc_cmd_mailbox(dev);<o:p></o:p></p>

<p class=MsoNormal>                if
(IS_ERR(mailbox))<o:p></o:p></p>

<p class=MsoNormal>                                return
PTR_ERR(mailbox);<o:p></o:p></p>

<p class=MsoNormal>@@ -124,6 +125,20 @@<o:p></o:p></p>

<p class=MsoNormal>                                tmpgids[0].global.subnet_prefix
= cpu_to_be64(0xfe80000000000000LL);<o:p></o:p></p>

<p class=MsoNormal>                }<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+             MLX4_PRINT(TRACE_LEVEL_WARNING,
MLX4_DBG_DRV,("setting gid is 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x
0x%x",<o:p></o:p></p>

<p class=MsoNormal>+                                             tmpgids[0].raw[8],<o:p></o:p></p>

<p class=MsoNormal>+                                             tmpgids[0].raw[9],<o:p></o:p></p>

<p class=MsoNormal>+                                             tmpgids[0].raw[10],<o:p></o:p></p>

<p class=MsoNormal>+                                             tmpgids[0].raw[11],<o:p></o:p></p>

<p class=MsoNormal>+                                             tmpgids[0].raw[12],<o:p></o:p></p>

<p class=MsoNormal>+                                             tmpgids[0].raw[13],<o:p></o:p></p>

<p class=MsoNormal>+                                             tmpgids[0].raw[14],<o:p></o:p></p>

<p class=MsoNormal>+                                             tmpgids[0].raw[15]<o:p></o:p></p>

<p class=MsoNormal>+                             ));<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+             <o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>                mailbox
= mlx4_alloc_cmd_mailbox(dev);<o:p></o:p></p>

<p class=MsoNormal>                if
(IS_ERR(mailbox)) {<o:p></o:p></p>

<p class=MsoNormal>                                err
= PTR_ERR(mailbox);<o:p></o:p></p>

<p class=MsoNormal>@@ -301,6 +316,21 @@<o:p></o:p></p>

<p class=MsoNormal>                <o:p></o:p></p>

<p class=MsoNormal>                //update
port guid with mac address<o:p></o:p></p>

<p class=MsoNormal>                update_ipv6_gids_win(dev,
port, 0, mac);<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+// TODO: Tzachid 9/12/2009 Need to think of a better way of
how to create the LLE<o:p></o:p></p>

<p class=MsoNormal>+// interface<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+#if 0<o:p></o:p></p>

<p class=MsoNormal>+             if(!InterlockedExchange(&dev->pdev->ib_hca_created,
1))<o:p></o:p></p>

<p class=MsoNormal>+             {<o:p></o:p></p>

<p class=MsoNormal>+                             NTSTATUS
status = STATUS_SUCCESS;<o:p></o:p></p>

<p class=MsoNormal>+                             status
= __create_child(dev->pdev->p_wdf_device, BUS_HARDWARE_IDS,
BUS_HARDWARE_IDS, BUS_HARDWARE_DESCRIPTION, 0 );<o:p></o:p></p>

<p class=MsoNormal>+                             if
(!NT_SUCCESS(status)) {<o:p></o:p></p>

<p class=MsoNormal>+                                             
mlx4_err(dev, "__create_child (ib)failed with 0x%x\n", status);<o:p></o:p></p>

<p class=MsoNormal>+                                             
dev->pdev->ib_hca_created = FALSE;<o:p></o:p></p>

<p class=MsoNormal>+                             }<o:p></o:p></p>

<p class=MsoNormal>+             }<o:p></o:p></p>

<p class=MsoNormal>+#endif                <o:p></o:p></p>

<p class=MsoNormal> out:<o:p></o:p></p>

<p class=MsoNormal>                if
(err && dev->caps.vep_uc_steering) {<o:p></o:p></p>

<p class=MsoNormal>                                mlx4_uc_steer_release(dev,
port, mac, *qpn, reserve);<o:p></o:p></p>

<p class=MsoNormal>@@ -627,6 +657,7 @@<o:p></o:p></p>

<p class=MsoNormal>                                                 case
MLX4_SET_PORT_VLAN_TABLE:<o:p></o:p></p>

<p class=MsoNormal>                                                 case
MLX4_SET_PORT_PRIO_MAP:<o:p></o:p></p>

<p class=MsoNormal>                                                 case
MLX4_SET_PORT_GID_TABLE:<o:p></o:p></p>

<p class=MsoNormal>+                                             
               ASSERT(FALSE);<o:p></o:p></p>

<p class=MsoNormal>                                                                break;<o:p></o:p></p>

<p class=MsoNormal>                                                 default:<o:p></o:p></p>

<p class=MsoNormal>                                                                ASSERT(FALSE);<o:p></o:p></p>

<p class=MsoNormal>Index: hw/mlx4/kernel/eth/mp_common.cpp<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- hw/mlx4/kernel/eth/mp_common.cpp          (revision
6962)<o:p></o:p></p>

<p class=MsoNormal>+++ hw/mlx4/kernel/eth/mp_common.cpp       (working
copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -2071,7 +2071,7 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>     }<o:p></o:p></p>

<p class=MsoNormal>     // Nothing was found<o:p></o:p></p>

<p class=MsoNormal>-<o:p></o:p></p>

<p class=MsoNormal>+    ETH_PRINT(TRACE_LEVEL_ERROR, ETH,
"Received completion event on bogus CQ cqn = 0x%d\n",cqn);<o:p></o:p></p>

<p class=MsoNormal>     return NULL;<o:p></o:p></p>

<p class=MsoNormal> }<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>Index: hw/mlx4/user/hca/mlx4.h<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- hw/mlx4/user/hca/mlx4.h    (revision
6962)<o:p></o:p></p>

<p class=MsoNormal>+++ hw/mlx4/user/hca/mlx4.h (working copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -234,9 +234,49 @@<o:p></o:p></p>

<p class=MsoNormal>                uint8_t                                                 dgid[16];<o:p></o:p></p>

<p class=MsoNormal> };<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>+// inherited<o:p></o:p></p>

<p class=MsoNormal>+typedef uint8_t  u8;<o:p></o:p></p>

<p class=MsoNormal>+typedef uint16_t  u16;<o:p></o:p></p>

<p class=MsoNormal>+typedef uint32_t  u32;<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+typedef uint16_t  __le16;<o:p></o:p></p>

<p class=MsoNormal>+typedef uint16_t  __be16;<o:p></o:p></p>

<p class=MsoNormal>+typedef uint32_t  __le32;<o:p></o:p></p>

<p class=MsoNormal>+typedef uint32_t  __be32;<o:p></o:p></p>

<p class=MsoNormal>+typedef uint64_t  __le64;<o:p></o:p></p>

<p class=MsoNormal>+typedef uint64_t  __be64;<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+struct mlx4_eth_av {<o:p></o:p></p>

<p class=MsoNormal>+             __be32                 port_pd;<o:p></o:p></p>

<p class=MsoNormal>+             u8                           reserved1;<o:p></o:p></p>

<p class=MsoNormal>+             u8                           smac_idx;<o:p></o:p></p>

<p class=MsoNormal>+             u16                         reserved2;<o:p></o:p></p>

<p class=MsoNormal>+             u8                           reserved3;<o:p></o:p></p>

<p class=MsoNormal>+             u8                           gid_index;<o:p></o:p></p>

<p class=MsoNormal>+             u8                           stat_rate;<o:p></o:p></p>

<p class=MsoNormal>+             u8                           hop_limit;<o:p></o:p></p>

<p class=MsoNormal>+             __be32                 sl_tclass_flowlabel;<o:p></o:p></p>

<p class=MsoNormal>+             u8                           dgid[16];<o:p></o:p></p>

<p class=MsoNormal>+             u32                         reserved4[2];<o:p></o:p></p>

<p class=MsoNormal>+             __be16                 vlan;<o:p></o:p></p>

<p class=MsoNormal>+             u8                           mac_0_1[2];<o:p></o:p></p>

<p class=MsoNormal>+             u8                           mac_2_5[4];<o:p></o:p></p>

<p class=MsoNormal>+};<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+union mlx4_ext_av {<o:p></o:p></p>

<p class=MsoNormal>+             struct
mlx4_av                  ib;<o:p></o:p></p>

<p class=MsoNormal>+             struct
mlx4_eth_av         eth;<o:p></o:p></p>

<p class=MsoNormal>+};<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal> struct mlx4_ah {<o:p></o:p></p>

<p class=MsoNormal>                struct
ibv_ah                                      ibv_ah;<o:p></o:p></p>

<p class=MsoNormal>-              struct
mlx4_av                                  av;<o:p></o:p></p>

<p class=MsoNormal>+//         struct
mlx4_av                                  av;<o:p></o:p></p>

<p class=MsoNormal>+             union
mlx4_ext_av   av;<o:p></o:p></p>

<p class=MsoNormal>+//???  u8                                           gsi_demux_lb;<o:p></o:p></p>

<p class=MsoNormal> };<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> #ifdef XRC_SUPPORT<o:p></o:p></p>

<p class=MsoNormal>Index: hw/mlx4/user/hca/qp.c<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- hw/mlx4/user/hca/qp.c         (revision
6962)<o:p></o:p></p>

<p class=MsoNormal>+++ hw/mlx4/user/hca/qp.c      (working
copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -154,6 +154,33 @@<o:p></o:p></p>

<p class=MsoNormal>                memcpy(dseg->av,
&to_mah((struct ibv_ah *)wr->dgrm.ud.h_av)->av, sizeof (struct mlx4_av));<o:p></o:p></p>

<p class=MsoNormal>                dseg->dqpn
= wr->dgrm.ud.remote_qp;<o:p></o:p></p>

<p class=MsoNormal>                dseg->qkey
= wr->dgrm.ud.remote_qkey;<o:p></o:p></p>

<p class=MsoNormal>+             dseg->vlan
= to_mah((struct ib_ah *)wr->dgrm.ud.h_av)->av.eth.vlan;<o:p></o:p></p>

<p class=MsoNormal>+             memcpy(dseg->mac_0_1,
to_mah((struct ib_ah *)wr->dgrm.ud.h_av)->av.eth.mac_0_1, 6);<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+#if 0<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+//??????           00-02-C9-03-9D-18<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+             dseg->mac_0_1[0]
= 0;<o:p></o:p></p>

<p class=MsoNormal>+             dseg->mac_0_1[1]
= 2;<o:p></o:p></p>

<p class=MsoNormal>+             dseg->mac_2_5[0]
= 0xc9;<o:p></o:p></p>

<p class=MsoNormal>+             dseg->mac_2_5[1]
= 0x03;<o:p></o:p></p>

<p class=MsoNormal>+             dseg->mac_2_5[2]
= 0x9d;<o:p></o:p></p>

<p class=MsoNormal>+             dseg->mac_2_5[3]
= 0x18;<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+#endif<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+//00-02-C9-08-EB-10<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+dseg->mac_0_1[0] = 0;<o:p></o:p></p>

<p class=MsoNormal>+dseg->mac_0_1[1] = 2;<o:p></o:p></p>

<p class=MsoNormal>+dseg->mac_2_5[0] = 0xc9;<o:p></o:p></p>

<p class=MsoNormal>+dseg->mac_2_5[1] = 0x08;<o:p></o:p></p>

<p class=MsoNormal>+dseg->mac_2_5[2] = 0xeb;<o:p></o:p></p>

<p class=MsoNormal>+dseg->mac_2_5[3] = 0x10;<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal> }<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> static void __set_data_seg(struct mlx4_wqe_data_seg
*dseg, ib_local_ds_t *ds)<o:p></o:p></p>

<p class=MsoNormal>Index: hw/mlx4/user/hca/verbs.c<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- hw/mlx4/user/hca/verbs.c   (revision 6962)<o:p></o:p></p>

<p class=MsoNormal>+++ hw/mlx4/user/hca/verbs.c                (working
copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -1107,23 +1107,24 @@<o:p></o:p></p>

<p class=MsoNormal> static void<o:p></o:p></p>

<p class=MsoNormal> __set_av_params(struct mlx4_ah *ah, struct ibv_pd *pd,
struct ibv_ah_attr *attr)<o:p></o:p></p>

<p class=MsoNormal> {<o:p></o:p></p>

<p class=MsoNormal>-              ah->av.port_pd
= cl_hton32(to_mpd(pd)->pdn | (attr->port_num << 24));<o:p></o:p></p>

<p class=MsoNormal>-              ah->av.g_slid 
= attr->src_path_bits;<o:p></o:p></p>

<p class=MsoNormal>-              ah->av.dlid   
= cl_hton16(attr->dlid);<o:p></o:p></p>

<p class=MsoNormal>+             printf("being
caled, are we running on ib?\n");<o:p></o:p></p>

<p class=MsoNormal>+             ah->av.ib.port_pd
= cl_hton32(to_mpd(pd)->pdn | (attr->port_num << 24));<o:p></o:p></p>

<p class=MsoNormal>+             ah->av.ib.g_slid 
= attr->src_path_bits;<o:p></o:p></p>

<p class=MsoNormal>+             ah->av.ib.dlid   
= cl_hton16(attr->dlid);<o:p></o:p></p>

<p class=MsoNormal>                if
(attr->static_rate) {<o:p></o:p></p>

<p class=MsoNormal>-                              ah->av.stat_rate
= (uint8_t)(attr->static_rate + MLX4_STAT_RATE_OFFSET);<o:p></o:p></p>

<p class=MsoNormal>+                             ah->av.ib.stat_rate
= (uint8_t)(attr->static_rate + MLX4_STAT_RATE_OFFSET);<o:p></o:p></p>

<p class=MsoNormal>                                /*
XXX check rate cap? */<o:p></o:p></p>

<p class=MsoNormal>                }<o:p></o:p></p>

<p class=MsoNormal>-              ah->av.sl_tclass_flowlabel
= cl_hton32(attr->sl << 28);<o:p></o:p></p>

<p class=MsoNormal>+             ah->av.ib.sl_tclass_flowlabel
= cl_hton32(attr->sl << 28);<o:p></o:p></p>

<p class=MsoNormal>                if
(attr->is_global)<o:p></o:p></p>

<p class=MsoNormal>                {<o:p></o:p></p>

<p class=MsoNormal>-                              ah->av.g_slid
|= 0x80;<o:p></o:p></p>

<p class=MsoNormal>-                              ah->av.gid_index
= attr->grh.sgid_index;<o:p></o:p></p>

<p class=MsoNormal>-                              ah->av.hop_limit
= attr->grh.hop_limit;<o:p></o:p></p>

<p class=MsoNormal>-                              ah->av.sl_tclass_flowlabel
|=<o:p></o:p></p>

<p class=MsoNormal>+                             ah->av.ib.g_slid
|= 0x80;<o:p></o:p></p>

<p class=MsoNormal>+                             ah->av.ib.gid_index
= attr->grh.sgid_index;<o:p></o:p></p>

<p class=MsoNormal>+                             ah->av.ib.hop_limit
= attr->grh.hop_limit;<o:p></o:p></p>

<p class=MsoNormal>+                             ah->av.ib.sl_tclass_flowlabel
|=<o:p></o:p></p>

<p class=MsoNormal>                                                cl_hton32((attr->grh.traffic_class
<< 20) |<o:p></o:p></p>

<p class=MsoNormal>                                                                   
attr->grh.flow_label);<o:p></o:p></p>

<p class=MsoNormal>-                              cl_memcpy(ah->av.dgid,
attr->grh.dgid.raw, 16);<o:p></o:p></p>

<p class=MsoNormal>+                             cl_memcpy(ah->av.ib.dgid,
attr->grh.dgid.raw, 16);<o:p></o:p></p>

<p class=MsoNormal>                }<o:p></o:p></p>

<p class=MsoNormal> }<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>Index: hw/mlx4/user/hca/wqe.h<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- hw/mlx4/user/hca/wqe.h     (revision
6962)<o:p></o:p></p>

<p class=MsoNormal>+++ hw/mlx4/user/hca/wqe.h  (working copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -78,7 +78,9 @@<o:p></o:p></p>

<p class=MsoNormal>                uint32_t                               av[8];<o:p></o:p></p>

<p class=MsoNormal>                uint32_t                               dqpn;<o:p></o:p></p>

<p class=MsoNormal>                uint32_t                               qkey;<o:p></o:p></p>

<p class=MsoNormal>-              uint32_t                               reserved[2];<o:p></o:p></p>

<p class=MsoNormal>+             uint16_t                               vlan;
//__be16 ??????<o:p></o:p></p>

<p class=MsoNormal>+             uint8_t                                 mac_0_1[2];<o:p></o:p></p>

<p class=MsoNormal>+             uint8_t                                 mac_2_5[4];<o:p></o:p></p>

<p class=MsoNormal> };<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> struct mlx4_wqe_data_seg {<o:p></o:p></p>

<p class=MsoNormal>Index: hw/mthca/kernel/hca_data.h<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- hw/mthca/kernel/hca_data.h             (revision
6962)<o:p></o:p></p>

<p class=MsoNormal>+++ hw/mthca/kernel/hca_data.h          (working
copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -170,7 +170,7 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> }             mlnx_cache_t;<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-typedef struct _ib_ca {<o:p></o:p></p>

<p class=MsoNormal>+typedef struct _ib_cay {<o:p></o:p></p>

<p class=MsoNormal>                ENUM_MARK          
mark;<o:p></o:p></p>

<p class=MsoNormal>                KSPIN_LOCK                                      event_list_lock;<o:p></o:p></p>

<p class=MsoNormal>                LIST_ENTRY                                        event_list;<o:p></o:p></p>

<p class=MsoNormal>@@ -212,7 +212,7 @@<o:p></o:p></p>

<p class=MsoNormal>                uint16_t                                               mcast_lid;<o:p></o:p></p>

<p class=MsoNormal> } mlnx_mcast_t;<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-typedef struct _mlnx_hca_t {<o:p></o:p></p>

<p class=MsoNormal>+typedef struct _mlnx_hca_tx {<o:p></o:p></p>

<p class=MsoNormal>                cl_list_item_t    list_item;                                             //
to include in the HCA chain<o:p></o:p></p>

<p class=MsoNormal>                net64_t                                                guid;                                                                      //
HCA node Guid<o:p></o:p></p>

<p class=MsoNormal>                struct
mthca_dev *mdev;                            //
VP Driver device<o:p></o:p></p>

<p class=MsoNormal>Index: hw/mthca/user/mlnx_ual_data.h<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- hw/mthca/user/mlnx_ual_data.h      (revision
6962)<o:p></o:p></p>

<p class=MsoNormal>+++ hw/mthca/user/mlnx_ual_data.h   (working copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -38,7 +38,7 @@<o:p></o:p></p>

<p class=MsoNormal> typedef uint8_t IB_gid_t[16]; /* GID (aka IPv6) H-to-L
(big) (network) endianess */<o:p></o:p></p>

<p class=MsoNormal> typedef uint32_t IB_ts_t;<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-typedef struct _ib_ca<o:p></o:p></p>

<p class=MsoNormal>+typedef struct _ib_cax<o:p></o:p></p>

<p class=MsoNormal> {<o:p></o:p></p>

<p class=MsoNormal>                struct
ibv_context *ibv_ctx;<o:p></o:p></p>

<p class=MsoNormal> } mlnx_ual_hobul_t;<o:p></o:p></p>

<p class=MsoNormal>Index: inc/user/iba/ibat.h<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- inc/user/iba/ibat.h    (revision 6962)<o:p></o:p></p>

<p class=MsoNormal>+++ inc/user/iba/ibat.h (working copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -45,6 +45,9 @@<o:p></o:p></p>

<p class=MsoNormal> namespace IBAT<o:p></o:p></p>

<p class=MsoNormal> {<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>+HRESULT Init();<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal> HRESULT<o:p></o:p></p>

<p class=MsoNormal> Resolve(<o:p></o:p></p>

<p class=MsoNormal>     __in const struct sockaddr*
pSrcAddr,<o:p></o:p></p>

<p class=MsoNormal>Index: tests/ndtests/ndrping/ndrping.cpp<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- tests/ndtests/ndrping/ndrping.cpp   (revision
6962)<o:p></o:p></p>

<p class=MsoNormal>+++ tests/ndtests/ndrping/ndrping.cpp                (working
copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -612,8 +612,8 @@<o:p></o:p></p>

<p class=MsoNormal>         QueueDepth,<o:p></o:p></p>

<p class=MsoNormal>         1,<o:p></o:p></p>

<p class=MsoNormal>         nSge,<o:p></o:p></p>

<p class=MsoNormal>-        0,<o:p></o:p></p>

<p class=MsoNormal>-        0,<o:p></o:p></p>

<p class=MsoNormal>+        16,<o:p></o:p></p>

<p class=MsoNormal>+        16,<o:p></o:p></p>

<p class=MsoNormal>         NULL,<o:p></o:p></p>

<p class=MsoNormal>        
&pEndpoint<o:p></o:p></p>

<p class=MsoNormal>         );<o:p></o:p></p>

<p class=MsoNormal>Index: tools/perftests/user/send_bw/send_bw.c<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- tools/perftests/user/send_bw/send_bw.c   (revision
6962)<o:p></o:p></p>

<p class=MsoNormal>+++ tools/perftests/user/send_bw/send_bw.c                (working
copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -422,7 +422,9 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>                                if(user_parm->use_grh){<o:p></o:p></p>

<p class=MsoNormal>                                                av_attr.grh_valid
= 1;<o:p></o:p></p>

<p class=MsoNormal>-                                              av_attr.grh.ver_class_flow
= ib_grh_set_ver_class_flow(6, 0 ,0);<o:p></o:p></p>

<p class=MsoNormal>+                                             av_attr.grh.ver_class_flow
= 0; //???????????? what is this<o:p></o:p></p>

<p class=MsoNormal>+                                             av_attr.grh.ver_class_flow
= ib_grh_set_ver_class_flow(<o:p></o:p></p>

<p class=MsoNormal>+                                             6,
0 ,0);//?????? p_path->traffic_class, conn_req_path_get_flow_lbl( p_path )
);<o:p></o:p></p>

<p class=MsoNormal>                                                av_attr.grh.resv1
= 0;<o:p></o:p></p>

<p class=MsoNormal>                                                av_attr.grh.resv2
= 0;<o:p></o:p></p>

<p class=MsoNormal>                                                av_attr.grh.hop_limit
= 1;<o:p></o:p></p>

<p class=MsoNormal>@@ -546,7 +548,7 @@<o:p></o:p></p>

<p class=MsoNormal>                                my_dest[i].psn
= cl_hton32(rand() & 0xffffff);<o:p></o:p></p>

<p class=MsoNormal>                                if
(!my_dest[i].lid) {<o:p></o:p></p>

<p class=MsoNormal>                                                fprintf(stderr,
"Local lid 0x0 detected. Is an SM running?\n");<o:p></o:p></p>

<p class=MsoNormal>-                                              return
1;<o:p></o:p></p>

<p class=MsoNormal>+//??                                     return
1;<o:p></o:p></p>

<p class=MsoNormal>                                }<o:p></o:p></p>

<p class=MsoNormal>                                my_dest[i].qpn
= ctx->qp_attr[i].num;<o:p></o:p></p>

<p class=MsoNormal>                                /*
TBD this should be changed inot VA and different key to each qp */<o:p></o:p></p>

<p class=MsoNormal>Index: ulp/libibverbs/examples/pingpong.c<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- ulp/libibverbs/examples/pingpong.c                (revision
6962)<o:p></o:p></p>

<p class=MsoNormal>+++ ulp/libibverbs/examples/pingpong.c             (working
copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -50,3 +50,25 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>                return
attr.lid;<o:p></o:p></p>

<p class=MsoNormal> }<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+void str2gid(char *grh, union ibv_gid *gid)<o:p></o:p></p>

<p class=MsoNormal>+{<o:p></o:p></p>

<p class=MsoNormal>+             char
tmp;<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+             tmp
= grh[8];<o:p></o:p></p>

<p class=MsoNormal>+             grh[8]
= 0;<o:p></o:p></p>

<p class=MsoNormal>+             (*((ULONG*)&gid->raw[0]))
= htonl(strtoul(grh, NULL, 16));<o:p></o:p></p>

<p class=MsoNormal>+             grh[8]
= tmp;<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+             tmp
= grh[16];<o:p></o:p></p>

<p class=MsoNormal>+             grh[16]
= 0;<o:p></o:p></p>

<p class=MsoNormal>+             (*((ULONG*)&gid->raw[4]))
= htonl(strtoul(grh + 8, NULL, 16));<o:p></o:p></p>

<p class=MsoNormal>+             grh[16]
= tmp;<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+             tmp
= grh[24];<o:p></o:p></p>

<p class=MsoNormal>+             grh[24]
= 0;<o:p></o:p></p>

<p class=MsoNormal>+             (*((ULONG*)&gid->raw[8]))
= htonl(strtoul(grh + 16, NULL, 16));<o:p></o:p></p>

<p class=MsoNormal>+             grh[24]
= tmp;<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+             (*((ULONG*)&gid->raw[12]))
= htonl(strtoul(grh + 24, NULL, 16));<o:p></o:p></p>

<p class=MsoNormal>+}<o:p></o:p></p>

<p class=MsoNormal>Index: ulp/libibverbs/examples/pingpong.h<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- ulp/libibverbs/examples/pingpong.h               (revision
6962)<o:p></o:p></p>

<p class=MsoNormal>+++ ulp/libibverbs/examples/pingpong.h            (working
copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -34,5 +34,6 @@<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> enum ibv_mtu pp_mtu_to_enum(int mtu);<o:p></o:p></p>

<p class=MsoNormal> uint16_t pp_get_local_lid(struct ibv_context *context,
int port);<o:p></o:p></p>

<p class=MsoNormal>+void str2gid(char *grh, union ibv_gid *gid);<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> #endif /* IBV_PINGPONG_H */<o:p></o:p></p>

<p class=MsoNormal>Index: ulp/libibverbs/examples/rc_pingpong/rc_pingpong.c<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- ulp/libibverbs/examples/rc_pingpong/rc_pingpong.c              (revision
6962)<o:p></o:p></p>

<p class=MsoNormal>+++ ulp/libibverbs/examples/rc_pingpong/rc_pingpong.c           (working
copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -44,6 +44,8 @@<o:p></o:p></p>

<p class=MsoNormal>                PINGPONG_SEND_WRID
= 2,<o:p></o:p></p>

<p class=MsoNormal> };<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>+char                            
        *grh = NULL;<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal> struct pingpong_context {<o:p></o:p></p>

<p class=MsoNormal>                struct
ibv_context                           *context;<o:p></o:p></p>

<p class=MsoNormal>                struct
ibv_comp_channel             *channel;<o:p></o:p></p>

<p class=MsoNormal>@@ -55,6 +57,8 @@<o:p></o:p></p>

<p class=MsoNormal>                int                                                                                           size;<o:p></o:p></p>

<p class=MsoNormal>                int                                                                                           rx_depth;<o:p></o:p></p>

<p class=MsoNormal>                int                                                                                           pending;<o:p></o:p></p>

<p class=MsoNormal>+             struct
ibv_port_attr     portinfo;<o:p></o:p></p>

<p class=MsoNormal>+             union
ibv_gid                     
dgid;<o:p></o:p></p>

<p class=MsoNormal> };<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal> struct pingpong_dest {<o:p></o:p></p>

<p class=MsoNormal>@@ -69,6 +73,7 @@<o:p></o:p></p>

<p class=MsoNormal> {<o:p></o:p></p>

<p class=MsoNormal>                struct
ibv_qp_attr attr;<o:p></o:p></p>

<p class=MsoNormal>                <o:p></o:p></p>

<p class=MsoNormal>+             attr.port_num          
= (uint8_t)port;<o:p></o:p></p>

<p class=MsoNormal>                attr.qp_state                                     =
IBV_QPS_RTR;<o:p></o:p></p>

<p class=MsoNormal>                attr.path_mtu                                   =
mtu;<o:p></o:p></p>

<p class=MsoNormal>                attr.dest_qp_num                          =
dest->qpn;<o:p></o:p></p>

<p class=MsoNormal>@@ -81,6 +86,15 @@<o:p></o:p></p>

<p class=MsoNormal>                attr.ah_attr.src_path_bits           =
0;<o:p></o:p></p>

<p class=MsoNormal>                attr.ah_attr.port_num                  =
(uint8_t) port;<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>+             if(grh)<o:p></o:p></p>

<p class=MsoNormal>+             {<o:p></o:p></p>

<p class=MsoNormal>+                             str2gid(grh,
&ctx->dgid);<o:p></o:p></p>

<p class=MsoNormal>+                             attr.ah_attr.is_global
= 1;<o:p></o:p></p>

<p class=MsoNormal>+                             attr.ah_attr.grh.hop_limit
= 1;<o:p></o:p></p>

<p class=MsoNormal>+                             attr.ah_attr.grh.dgid
= ctx->dgid;<o:p></o:p></p>

<p class=MsoNormal>+                             attr.ah_attr.grh.sgid_index
= 0;<o:p></o:p></p>

<p class=MsoNormal>+             }<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>                if
(ibv_modify_qp(ctx->qp, &attr,<o:p></o:p></p>

<p class=MsoNormal>                                                 
IBV_QP_STATE             
|<o:p></o:p></p>

<p class=MsoNormal>                                                 
IBV_QP_AV                
|<o:p></o:p></p>

<p class=MsoNormal>@@ -499,7 +513,7 @@<o:p></o:p></p>

<p class=MsoNormal>                while
(1) {<o:p></o:p></p>

<p class=MsoNormal>                                int
c;<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>-                              c
= getopt(argc, argv, "h:p:d:i:s:m:r:n:l:e");<o:p></o:p></p>

<p class=MsoNormal>+        c = getopt(argc,
argv, "h:p:d:i:s:m:r:n:l:g:e");<o:p></o:p></p>

<p class=MsoNormal>                                if
(c == -1)<o:p></o:p></p>

<p class=MsoNormal>                                                break;<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>@@ -555,6 +569,10 @@<o:p></o:p></p>

<p class=MsoNormal>                                                servername
= _strdup(optarg);<o:p></o:p></p>

<p class=MsoNormal>                                                break;<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>+                             case
'g':<o:p></o:p></p>

<p class=MsoNormal>+                                             grh
= _strdup(optarg);<o:p></o:p></p>

<p class=MsoNormal>+                                             break;<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>                                default:<o:p></o:p></p>

<p class=MsoNormal>                                                usage(argv[0]);<o:p></o:p></p>

<p class=MsoNormal>                                                return
1;<o:p></o:p></p>

<p class=MsoNormal>@@ -606,7 +624,7 @@<o:p></o:p></p>

<p class=MsoNormal>                my_dest.psn
= rand() & 0xffffff;<o:p></o:p></p>

<p class=MsoNormal>                if
(!my_dest.lid) {<o:p></o:p></p>

<p class=MsoNormal>                                fprintf(stderr,
"Couldn't get local LID\n");<o:p></o:p></p>

<p class=MsoNormal>-                              return
1;<o:p></o:p></p>

<p class=MsoNormal>+                             //return
1;<o:p></o:p></p>

<p class=MsoNormal>                }<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>                printf(" 
local address:  LID 0x%04x, QPN 0x%06x, PSN 0x%06x\n",<o:p></o:p></p>

<p class=MsoNormal>Index: ulp/nd/user/NdConnector.cpp<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- ulp/nd/user/NdConnector.cpp           (revision
6962)<o:p></o:p></p>

<p class=MsoNormal>+++ ulp/nd/user/NdConnector.cpp        (working
copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -247,6 +247,20 @@<o:p></o:p></p>

<p class=MsoNormal>     return hr;<o:p></o:p></p>

<p class=MsoNormal> }<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>+    ib_gid_t SwapGid(UINT64 In1, UINT64 In2)
{<o:p></o:p></p>

<p class=MsoNormal>+        ib_gid_t Ret;<o:p></o:p></p>

<p class=MsoNormal>+        int i;<o:p></o:p></p>

<p class=MsoNormal>+        UCHAR *pIn1 =
(UCHAR *)&In1;<o:p></o:p></p>

<p class=MsoNormal>+        UCHAR *pIn2 =
(UCHAR *)&In2;        <o:p></o:p></p>

<p class=MsoNormal>+        for (i=0; i <
8; i++) {<o:p></o:p></p>

<p class=MsoNormal>+           
Ret.raw[15-i] = pIn2[i];<o:p></o:p></p>

<p class=MsoNormal>+           
Ret.raw[7-i] = pIn1[i];<o:p></o:p></p>

<p class=MsoNormal>+        }<o:p></o:p></p>

<p class=MsoNormal>+        return Ret;<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+    }<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal> //<o:p></o:p></p>

<p class=MsoNormal> // Connects an endpoint to the specified destinaton
address.<o:p></o:p></p>

<p class=MsoNormal> //<o:p></o:p></p>

<p class=MsoNormal>@@ -269,6 +283,7 @@<o:p></o:p></p>

<p class=MsoNormal>     __inout OVERLAPPED* pOverlapped<o:p></o:p></p>

<p class=MsoNormal>     )<o:p></o:p></p>

<p class=MsoNormal> {<o:p></o:p></p>

<p class=MsoNormal>+    HRESULT hr;<o:p></o:p></p>

<p class=MsoNormal>     ND_ENTER( ND_DBG_NDI );<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>     if( AddressLength <
sizeof(struct sockaddr) )<o:p></o:p></p>

<p class=MsoNormal>@@ -309,7 +324,9 @@<o:p></o:p></p>

<p class=MsoNormal>     ioctl.pdata.src_port =
_byteswap_ushort( m_LocalPort );<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>     // Resolve the GIDs.<o:p></o:p></p>

<p class=MsoNormal>-   HRESULT hr = IBAT::Resolve(<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+#if 0<o:p></o:p></p>

<p class=MsoNormal>+   hr = IBAT::Resolve(<o:p></o:p></p>

<p class=MsoNormal>        
&m_pParent->m_Addr.unspec,<o:p></o:p></p>

<p class=MsoNormal>         pAddress,<o:p></o:p></p>

<p class=MsoNormal>        
(IBAT_PATH_BLOB*)&ioctl.path<o:p></o:p></p>

<p class=MsoNormal>@@ -336,7 +353,71 @@<o:p></o:p></p>

<p class=MsoNormal>         }<o:p></o:p></p>

<p class=MsoNormal>         return hr;<o:p></o:p></p>

<p class=MsoNormal>     }<o:p></o:p></p>

<p class=MsoNormal>+#else<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+#if 0<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+    ioctl.path.dgid =
SwapGid(0xfe80000000000000,0x0202c9fffe039d18);<o:p></o:p></p>

<p class=MsoNormal>+//    ioctl.path.sgid =
SwapGid(0xfe80000000000000,0x0002c90300039cf1); //???? ethernet<o:p></o:p></p>

<p class=MsoNormal>+    ioctl.path.sgid =
SwapGid(0xfe80000000000000,0x0202c9fffe039cf0);<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+//               
                                 0002:c903:0003:9cf1<o:p></o:p></p>

<p class=MsoNormal>+//    ioctl.path.sgid =
SwapGid(0xfe80000000000000,0x0002c90300039cf1); //???? ibibibib<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+#endif<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+       
ioctl.path.service_id = 0;<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+        ioctl.path.dgid
= SwapGid(0xfe80000000000000,0x0202c9fffe08eb10);<o:p></o:p></p>

<p class=MsoNormal>+    //    ioctl.path.sgid =
SwapGid(0xfe80000000000000,0x0002c90300039cf1); //???? ethernet<o:p></o:p></p>

<p class=MsoNormal>+        ioctl.path.sgid
= SwapGid(0xfe80000000000000,0x0202c9fffe08cb10);<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+    <o:p></o:p></p>

<p class=MsoNormal>+    ioctl.path.dlid = 0;//????????????????5;
// full the cm, not anymore ?????<o:p></o:p></p>

<p class=MsoNormal>+    ioctl.path.slid = 0;//0x200;  
//////// ibibibibibi<o:p></o:p></p>

<p class=MsoNormal>+    ioctl.path.hop_flow_raw = 2;<o:p></o:p></p>

<p class=MsoNormal>+    ioctl.path.tclass = 0;<o:p></o:p></p>

<p class=MsoNormal>+    ioctl.path.num_path = 0;<o:p></o:p></p>

<p class=MsoNormal>+    ioctl.path.pkey = 0;<o:p></o:p></p>

<p class=MsoNormal>+    ioctl.path.qos_class_sl = 0;<o:p></o:p></p>

<p class=MsoNormal>+    ioctl.path.mtu =
IB_MTU_LEN_1024;    <o:p></o:p></p>

<p class=MsoNormal>+    ioctl.path.rate = 
IB_PATH_RECORD_RATE_10_GBS;;<o:p></o:p></p>

<p class=MsoNormal>+    ioctl.path.pkt_life = 0;<o:p></o:p></p>

<p class=MsoNormal>+    ioctl.path.preference = 0;<o:p></o:p></p>

<p class=MsoNormal>+    for(int j=0;j<6;j++) {<o:p></o:p></p>

<p class=MsoNormal>+       
ioctl.path.resv2[j] = 0;<o:p></o:p></p>

<p class=MsoNormal>+    }<o:p></o:p></p>

<p class=MsoNormal>+    ioctl.transport = RDMA_TRANSPORT_RDMAOE;<o:p></o:p></p>

<p class=MsoNormal>+        <o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+/*<o:p></o:p></p>

<p class=MsoNormal>+             ib_net64_t                                                          service_id;<o:p></o:p></p>

<p class=MsoNormal>+             ib_gid_t                                                               dgid;<o:p></o:p></p>

<p class=MsoNormal>+             ib_gid_t                                                               sgid;<o:p></o:p></p>

<p class=MsoNormal>+             ib_net16_t                                                          dlid;<o:p></o:p></p>

<p class=MsoNormal>+             ib_net16_t                                                          slid;<o:p></o:p></p>

<p class=MsoNormal>+             ib_net32_t                                                          hop_flow_raw;<o:p></o:p></p>

<p class=MsoNormal>+             uint8_t                                                                 tclass;<o:p></o:p></p>

<p class=MsoNormal>+             uint8_t                                                                 num_path;<o:p></o:p></p>

<p class=MsoNormal>+             ib_net16_t                                                          pkey;<o:p></o:p></p>

<p class=MsoNormal>+             ib_net16_t                                                          qos_class_sl;<o:p></o:p></p>

<p class=MsoNormal>+             uint8_t                                                                 mtu;<o:p></o:p></p>

<p class=MsoNormal>+             uint8_t                                                                 rate;<o:p></o:p></p>

<p class=MsoNormal>+             uint8_t                                                                 pkt_life;<o:p></o:p></p>

<p class=MsoNormal>+             uint8_t                                                                 preference;<o:p></o:p></p>

<p class=MsoNormal>+             uint16_t                                                               resv1;<o:p></o:p></p>

<p class=MsoNormal>+             uint32_t                                                               resv2;<o:p></o:p></p>

<p class=MsoNormal>+*/<o:p></o:p></p>

<p class=MsoNormal>+#endif<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>     switch( ((struct
sockaddr_in*)pAddress)->sin_family )<o:p></o:p></p>

<p class=MsoNormal>     {<o:p></o:p></p>

<p class=MsoNormal>     case AF_INET:<o:p></o:p></p>

<p class=MsoNormal>Index: ulp/nd/user/NdProv.cpp<o:p></o:p></p>

<p class=MsoNormal>===================================================================<o:p></o:p></p>

<p class=MsoNormal>--- ulp/nd/user/NdProv.cpp       (revision
6962)<o:p></o:p></p>

<p class=MsoNormal>+++ ulp/nd/user/NdProv.cpp    (working copy)<o:p></o:p></p>

<p class=MsoNormal>@@ -253,6 +253,18 @@<o:p></o:p></p>

<p class=MsoNormal>         return
S_OK;<o:p></o:p></p>

<p class=MsoNormal>     }<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>+    UINT64 SwapGuid(UINT64 In) {<o:p></o:p></p>

<p class=MsoNormal>+        UINT64 Ret = 0;<o:p></o:p></p>

<p class=MsoNormal>+        UCHAR *pIn =
(UCHAR *)&In;<o:p></o:p></p>

<p class=MsoNormal>+        UCHAR *pRet =
(UCHAR *)&Ret;<o:p></o:p></p>

<p class=MsoNormal>+        int i;<o:p></o:p></p>

<p class=MsoNormal>+        for (i=0; i <
8; i++) {<o:p></o:p></p>

<p class=MsoNormal>+           
pRet[7-i] = pIn[i];<o:p></o:p></p>

<p class=MsoNormal>+        }<o:p></o:p></p>

<p class=MsoNormal>+        return Ret;<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>+    }<o:p></o:p></p>

<p class=MsoNormal>+<o:p></o:p></p>

<p class=MsoNormal>     HRESULT CProvider::OpenAdapter(<o:p></o:p></p>

<p class=MsoNormal>            
__in_bcount(AddressLength) const struct sockaddr* pAddress,<o:p></o:p></p>

<p class=MsoNormal>            
__in SIZE_T AddressLength,<o:p></o:p></p>

<p class=MsoNormal>@@ -295,8 +307,10 @@<o:p></o:p></p>

<p class=MsoNormal>         HANDLE
hIbatDev = CreateFileW( IBAT_WIN32_NAME,<o:p></o:p></p>

<p class=MsoNormal>            
MAXIMUM_ALLOWED, 0, NULL,<o:p></o:p></p>

<p class=MsoNormal>            
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );<o:p></o:p></p>

<p class=MsoNormal>-        if( hIbatDev ==
INVALID_HANDLE_VALUE )<o:p></o:p></p>

<p class=MsoNormal>+        if( hIbatDev ==
INVALID_HANDLE_VALUE ) {<o:p></o:p></p>

<p class=MsoNormal>+           
ND_PRINT( TRACE_LEVEL_ERROR, ND_DBG_ERR ,("Opening IBAT failed, is openib
running?\n "));<o:p></o:p></p>

<p class=MsoNormal>            
return ND_NO_MEMORY;<o:p></o:p></p>

<p class=MsoNormal>+        }<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>        
IBAT_PORT_RECORD out;<o:p></o:p></p>

<p class=MsoNormal>         DWORD size;<o:p></o:p></p>

<p class=MsoNormal>@@ -304,8 +318,22 @@<o:p></o:p></p>

<p class=MsoNormal>            
&in, sizeof(in), &out, sizeof(out), &size, NULL );<o:p></o:p></p>

<p class=MsoNormal>         <o:p></o:p></p>

<p class=MsoNormal>        
CloseHandle( hIbatDev );<o:p></o:p></p>

<p class=MsoNormal>-        if( !fSuccess ||
size == 0 )<o:p></o:p></p>

<p class=MsoNormal>-           
return ND_INVALID_ADDRESS;<o:p></o:p></p>

<p class=MsoNormal>+        if( !fSuccess ||
size == 0 ) {<o:p></o:p></p>

<p class=MsoNormal>+           
char temp[100];<o:p></o:p></p>

<p class=MsoNormal>+           
gethostname(temp,100);<o:p></o:p></p>

<p class=MsoNormal>+           
if(!strcmp(temp,"sw328")) {<o:p></o:p></p>

<p class=MsoNormal>+               
out.CaGuid =   SwapGuid(0x0002c9030008eb10);  <o:p></o:p></p>

<p class=MsoNormal>+               
out.PortGuid = SwapGuid(0x0202c9fffe08eb10);<o:p></o:p></p>

<p class=MsoNormal>+               
out.PortNum = 1;<o:p></o:p></p>

<p class=MsoNormal>+               
out.PKey =
IB_DEFAULT_PKEY;               
<o:p></o:p></p>

<p class=MsoNormal>+           
} else {<o:p></o:p></p>

<p class=MsoNormal>+               
out.CaGuid =   SwapGuid(0x0002c9030008eb20);<o:p></o:p></p>

<p class=MsoNormal>+                out.PortGuid
= SwapGuid(0x0202c9fffe08cb10);<o:p></o:p></p>

<p class=MsoNormal>+               
out.PortNum = 1;<o:p></o:p></p>

<p class=MsoNormal>+               
out.PKey = IB_DEFAULT_PKEY;<o:p></o:p></p>

<p class=MsoNormal>+           
}<o:p></o:p></p>

<p class=MsoNormal>+//           
return ND_INVALID_ADDRESS;<o:p></o:p></p>

<p class=MsoNormal>+        }<o:p></o:p></p>

<p class=MsoNormal> <o:p></o:p></p>

<p class=MsoNormal>         return
CAdapter::Create( this, pAddress, &out, ppAdapter );<o:p></o:p></p>

<p class=MsoNormal>     }<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

</div>

</body>

</html>