[ofw] WWG 1-26-10 minutes - WinOF 2.2 release status [PATCH] [IPoIB_NDIS6_CM]
Tzachi Dar
tzachid at mellanox.co.il
Wed Feb 3 13:29:56 PST 2010
Please use TortoiseSvn to apply the patch.
Thanks
Tzachi
> -----Original Message-----
> From: ofw-bounces at lists.openfabrics.org
> [mailto:ofw-bounces at lists.openfabrics.org] On Behalf Of Smith, Stan
> Sent: Wednesday, February 03, 2010 7:21 PM
> To: Alex Naslednikov; ofw at lists.openfabrics.org
> Subject: Re: [ofw] WWG 1-26-10 minutes - WinOF 2.2 release
> status [PATCH] [IPoIB_NDIS6_CM]
>
>
> Patches do not correctly apply against
> trunk\ulp\ipoib_ndis6_cm or branches\WOF2-2\ulp\ipoib_ndis6_cm.
> I tried applying patches by hand and things got UGLY very quickly.
>
> Please supply patches generated against
> trunk\ulp\ipoib_ndis6_cm\ ASAP as today is my last day at
> work until 2/15.
>
> thank you,
>
> Stan.
>
> Alex Naslednikov wrote:
> > Stan,
> > The patch was revisited.
> > For your covnenience, I am resending it again with the new changes.
> > In spite of the fact that the patch was tested with WHQL
> NDIS 6.5 MPE
> > test, I highly recommend to run independent test cycle.
> >
> > Index:
> >
> D:/windows/MLNX_WinOF_trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_adapter.cp
> > p
> ===================================================================
> > ---
> >
> D:/windows/MLNX_WinOF_trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_ad
> apter.cpp
> > (revision 5504) +++
> >
> >
> >
> D:/windows/MLNX_WinOF_trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_adapter.cp
> > p (revision 5529) @@ -392,6 +392,13 @@
> p_adapter->p_ifc->get_err_str(
> > status )) ); return status; } + + + IPOIB_PRINT(
> > TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT, + ("Shutter
> > Init, state = %d\n", p_adapter->ipoib_state) ); + IPOIB_PRINT(
> > TRACE_LEVEL_INFORMATION, IPOIB_DBG_RECV, + ("Shutter
> > Init, state = %d\n", p_adapter->ipoib_state) ); +
> shutter_init(
> > &p_adapter->recv_shutter );
> >
> > IPOIB_EXIT( IPOIB_DBG_INIT );
> > return status;
> > Index:
> > D:/windows/MLNX_WinOF_trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp
> > ===================================================================
> > ---
> > D:/windows/MLNX_WinOF_trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp
> > (revision 5504) +++
> >
> >
> D:/windows/MLNX_WinOF_trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp
> > (revision 5529) @@ -824,7 +824,21 @@ IPOIB_PRINT(
> TRACE_LEVEL_ERROR,
> > IPOIB_DBG_OBJ, ("ref type %d ref_cnt %d\n", ref_init,
> > p_port->obj.ref_cnt) ); #endif - + // The port is started as
> > paused and NDIS calls latter to ipoib_restart. We + // shut the
> > recv_shuter for now and alive it on ipoib_restart. + // +
> > + if ( p_adapter->ipoib_state == IPOIB_INIT) {
> > + IPOIB_PRINT( TRACE_LEVEL_INFORMATION,
> IPOIB_DBG_RECV,
> > + ("Shutter shut, state = %d\n",
> > p_adapter->ipoib_state)); + shutter_shut (
> > &p_adapter->recv_shutter ); + }
> > + else {
> > + IPOIB_PRINT( TRACE_LEVEL_WARNING, IPOIB_DBG_RECV,
> > + ("*****Shutter wasn't shut, state = %d*****\n",
> > p_adapter->ipoib_state)); + }
> > IPOIB_EXIT( IPOIB_DBG_INIT );
> > return IB_SUCCESS;
> > }
> > @@ -1843,45 +1857,28 @@
> > return p_port->p_adapter->params.rq_low_watermark -
> > p_port->recv_mgr.depth; }
> >
> > -void
> > -ipoib_return_net_buffer_list(
> > - IN NDIS_HANDLE
> > adapter_context,
> > - IN NET_BUFFER_LIST
> > *p_net_buffer_lists,
> > - IN ULONG
> > return_flags) +inline ULONG __free_received_NBL (
> > + IN ipoib_port_t *p_port,
> > + IN NET_BUFFER_LIST *p_net_buffer_lists
> > + )
> > {
> > - ipoib_port_t *p_port;
> > +
> > ipoib_recv_desc_t *p_desc;
> > - NET_BUFFER_LIST
> > *cur_net_buffer_list,*next_net_buffer_list;
> > - int32_t shortage;
> > + NET_BUFFER_LIST *cur_net_buffer_list,
> > *next_net_buffer_list; + LONG
> > NBL_cnt = 0; +
> >
> > - PERF_DECLARE( ReturnPacket );
> > - PERF_DECLARE( ReturnPutRecv );
> > - PERF_DECLARE( ReturnRepostRecv );
> > - PERF_DECLARE( ReturnPreparePkt );
> > - PERF_DECLARE( ReturnNdisIndicate );
> > -
> > - IPOIB_ENTER( IPOIB_DBG_RECV );
> > -
> > - UNUSED_PARAM( return_flags );
> > -
> > - p_port = ((ipoib_adapter_t*)adapter_context)->p_port;
> > - CL_ASSERT( p_net_buffer_lists );
> > -
> > - cl_perf_start( ReturnPacket );
> > - cl_spinlock_acquire( &p_port->recv_lock );
> > for (cur_net_buffer_list = p_net_buffer_lists;
> > cur_net_buffer_list != NULL;
> > cur_net_buffer_list = next_net_buffer_list)
> > {
> > + ++NBL_cnt;
> > next_net_buffer_list =
> > NET_BUFFER_LIST_NEXT_NBL(cur_net_buffer_list);
> >
> > /* Get the port and descriptor from the
> > NET_BUFFER_LIST. */ CL_ASSERT(p_port ==
> > IPOIB_PORT_FROM_NBL( cur_net_buffer_list
> )); p_desc =
> > IPOIB_RECV_FROM_NBL( cur_net_buffer_list ); -
> >
> > - //TODO: NDIS60, rewrite this block
> > -
> > #if 0 //TODO CM flow
> > if( p_desc->type == PKT_TYPE_CM_UCAST )
> > {
> > @@ -1916,9 +1913,44 @@
> > __buf_mgr_put_recv( p_port, p_desc,
> > cur_net_buffer_list ); cl_perf_stop(
> > &p_port->p_adapter->perf, ReturnPutRecv ); }
> > + return NBL_cnt;
> > +}
> >
> > +void
> > +ipoib_return_net_buffer_list(
> > + IN NDIS_HANDLE
> > adapter_context, + IN
> > NET_BUFFER_LIST *p_net_buffer_lists, +
> > IN ULONG
> > return_flags) +{ + ipoib_port_t *p_port;
> > + int32_t shortage;
> > + LONG NBL_cnt = 0;
> > +
> > + PERF_DECLARE( ReturnPacket );
> > + PERF_DECLARE( ReturnPutRecv );
> > + PERF_DECLARE( ReturnRepostRecv );
> > + PERF_DECLARE( ReturnPreparePkt );
> > + PERF_DECLARE( ReturnNdisIndicate );
> >
> > + IPOIB_ENTER( IPOIB_DBG_RECV );
> >
> > + UNUSED_PARAM( return_flags );
> > +
> > + p_port = ((ipoib_adapter_t*)adapter_context)->p_port;
> > + CL_ASSERT( p_net_buffer_lists );
> > + if ( !p_port ) {
> > + ASSERT(p_port);
> > + IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR,
> IPOIB_DBG_ERROR,
> > + ("return_NBL callback called when port
> > pointer was already cleared\n") ); + return;
> > + }
> > +
> > + cl_perf_start( ReturnPacket );
> > + cl_spinlock_acquire( &p_port->recv_lock );
> > + NBL_cnt = __free_received_NBL( p_port, p_net_buffer_lists );
> > +
> > + shutter_sub( &p_port->p_adapter->recv_shutter, -NBL_cnt );
> > +
> > /* Repost buffers to HW */
> > cl_perf_start( ReturnRepostRecv );
> > shortage = __recv_mgr_repost( p_port ); @@ -1958,6
> +1990,7 @@
> > cl_qlist_t done_list, bad_list;
> > size_t i;
> > ULONG recv_complete_flags = 0;
> > + BOOLEAN res;
> >
> > PERF_DECLARE( RecvCompBundle );
> > PERF_DECLARE( RecvCb );
> > @@ -2069,13 +2102,40 @@
> >
> > cl_perf_start( RecvNdisIndicate );
> >
> > - NdisMIndicateReceiveNetBufferLists(
> > - p_port->p_adapter->h_adapter,
> > - p_port->recv_mgr.recv_NBL_array[0],
> > - NDIS_DEFAULT_PORT_NUMBER,
> > - NBL_cnt,
> > - recv_complete_flags);
> > + if (shortage <= 0) {
> >
> > + res = shutter_add(
> > &p_port->p_adapter->recv_shutter, NBL_cnt ); +
> > if (res) { +
> > NdisMIndicateReceiveNetBufferLists( +
> > p_port->p_adapter->h_adapter, +
> > p_port->recv_mgr.recv_NBL_array[0], +
> > NDIS_DEFAULT_PORT_NUMBER, +
> > NBL_cnt, +
> recv_complete_flags);
> > + }
> > + else {
> > + __free_received_NBL (p_port,
> > p_port->recv_mgr.recv_NBL_array[0]); + }
> > +
> > + } else {
> > +
> > + // If shortage >0, we already set the status
> > to NDIS_RECEIVE_FLAGS_RESOURCES + // That is,
> > IPoIB driver regain ownership of the NET_BUFFER_LIST structures
> > immediately + res = shutter_add(
> > &p_port->p_adapter->recv_shutter, 1 ); + if
> > (res) { +
> > NdisMIndicateReceiveNetBufferLists( +
> > p_port->p_adapter->h_adapter, +
> > p_port->recv_mgr.recv_NBL_array[0], +
> > NDIS_DEFAULT_PORT_NUMBER, +
> > NBL_cnt, +
> > recv_complete_flags); + shutter_sub(
> > &p_port->p_adapter->recv_shutter, -1 ); + } +
> > + }
> > +
> > +
> > +
> > cl_perf_stop( &p_port->p_adapter->perf,
> > RecvNdisIndicate );
> >
> > /*
> > @@ -3243,14 +3303,8 @@
> > {
> > cl_list_item_t *p_item;
> > ipoib_send_NB_SG *s_buf;
> > - ULONG send_complete_flags = 0;
> > + ULONG send_complete_flags =
> > NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL;
> >
> > - if (KeGetCurrentIrql() == DISPATCH_LEVEL)
> > - {
> > - NDIS_SET_SEND_COMPLETE_FLAG(send_complete_flags,
> > NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL);
> > - }
> > -
> > - cl_spinlock_acquire( &p_port->send_lock );
> > /* Complete any pending packets. */
> > for( p_item = cl_qlist_remove_head(
> > &p_port->send_mgr.pending_list ); p_item !=
> > cl_qlist_end( &p_port->send_mgr.pending_list ); @@ -3260,13 +3314,10
> > @@ ASSERT(s_buf->p_port == p_port);
> > ASSERT(s_buf->p_nbl);
> >
> > -
> > + //TODO
> > //__send_complete_net_buffer(s_buf,
> >
> > NDIS_STATUS_RESET_IN_PROGRESS,send_complete_flags,TRUE);
> > __send_complete_net_buffer(s_buf,
> > NDIS_STATUS_FAILURE,send_complete_flags,TRUE); } - -
> > - cl_spinlock_release( &p_port->send_lock );
> >
> > }
> >
> > @@ -3278,7 +3329,9 @@
> > //Destroy pending list and put all the send buffers back to
> > pool //The list should be already destroyed at this point
> > ASSERT(p_port->send_mgr.pending_list.count == 0);
> > + cl_spinlock_acquire( &p_port->send_lock );
> > __pending_list_destroy(p_port);
> > + cl_spinlock_release( &p_port->send_lock );
> >
> > // Now, destroy the send pool
> > cl_qpool_destroy(&p_port->send_mgr.send_pool);
> > @@ -5299,7 +5352,6 @@
> > //TODO Tzachid: make an assert here to validate your
> > IRQL ASSERT (KeGetCurrentIrql() == DISPATCH_LEVEL);
> > old_irql = DISPATCH_LEVEL;
> > - NDIS_SET_SEND_COMPLETE_FLAG(send_complete_flags,
> > NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL); } else {
> > NDIS_RAISE_IRQL_TO_DISPATCH(&old_irql);
> > //ASSERT (KeGetCurrentIrql() == PASSIVE_LEVEL); //
> > Happens @@ -7158,6 +7210,7 @@
> > * object lock since that is the order taken when reposting.
> > */
> > cl_spinlock_acquire( &p_port->recv_lock );
> > + cl_spinlock_acquire( &p_port->send_lock );
> > cl_obj_lock( &p_port->obj );
> > p_port->state = IB_QPS_ERROR;
> >
> > @@ -7172,6 +7225,7 @@
> > p_port->ib_mgr.h_query = NULL;
> > }
> > cl_obj_unlock( &p_port->obj );
> > + cl_spinlock_release( &p_port->send_lock );
> > cl_spinlock_release( &p_port->recv_lock );
> >
> > KeWaitForSingleObject(
> > @@ -7670,10 +7724,10 @@
> > IPOIB_PRINT_EXIT( TRACE_LEVEL_INFORMATION,
> > IPOIB_DBG_MCAST ,("Invalid state - Aborting.\n") );
> > IPOIB_PRINT_EXIT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT ,("Invalid
> > state - Aborting.\n") );
> >
> > - //cl_spinlock_acquire(&p_port->send_lock);
> > + cl_spinlock_acquire(&p_port->send_lock);
> > //ipoib_port_resume(p_port , FALSE);
> > __pending_list_destroy( p_port );
> > - //cl_spinlock_release(&p_port->send_lock);
> > + cl_spinlock_release(&p_port->send_lock);
> > return;
> > }
> >
> > Index:
> >
> D:/windows/MLNX_WinOF_trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_adapter.h
> > ===================================================================
> > ---
> >
> D:/windows/MLNX_WinOF_trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_adapter.h
> > (revision 5504) +++
> >
> D:/windows/MLNX_WinOF_trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_adapter.h
> > (revision 5529) @@ -47,8 +47,10 @@ #include <ip_packet.h> #include
> > "ip_stats.h" #include "ipoib_stat.h" +#include "shutter.h"
> >
> >
> > +
> > /*
> > * Definitions
> > */
> > @@ -70,6 +72,7 @@
> >
> > typedef enum _ipoib_state
> > {
> > + IPOIB_INIT = -1,
> > IPOIB_PAUSED,
> > IPOIB_PAUSING,
> > IPOIB_RUNNING
> > @@ -238,6 +241,9 @@
> > ULONG n_send_NBL;
> > // number of send NBLs, gotten from NDIS ULONG
> > n_send_NBL_done; // number of send NBLs, completed
> >
> > + //
> > + shutter_t recv_shutter;
> > +
> > } ipoib_adapter_t;
> > /*
> > * FIELDS
> > Index:
> >
> D:/windows/MLNX_WinOF_trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_driver.cpp
> > ===================================================================
> > ---
> >
> D:/windows/MLNX_WinOF_trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_driver.cpp
> > (revision 5504) +++
> >
> >
> >
> D:/windows/MLNX_WinOF_trunk/ulp/ipoib_NDIS6_CM/kernel/ipoib_driver.cpp
> > (revision 5529) @@ -1865,7 +1865,7 @@
> ("ipoib_create_adapter returned
> > status %d.\n", ib_status ) ); return NDIS_STATUS_FAILURE; } -
> > p_adapter->ipoib_state = IPOIB_PAUSED; +
> > p_adapter->ipoib_state = IPOIB_INIT;
> >
> > status = SetAttributes(p_adapter, h_adapter);
> > if (status != NDIS_STATUS_SUCCESS) {
> > @@ -3111,13 +3111,12 @@
> >
> > CL_ASSERT( adapter_context );
> > p_adapter = (ipoib_adapter_t*)adapter_context;
> > - p_port = p_adapter->p_port;
> >
> > cl_obj_lock( &p_adapter->obj );
> > if( p_adapter->ipoib_state == IPOIB_PAUSING ||
> > p_adapter->ipoib_state == IPOIB_PAUSED)
> > {
> > - status = NDIS_STATUS_PAUSED; //NDIS_STATUS_PAUSED;
> > + status = NDIS_STATUS_PAUSED;
> > IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR,
> > ("Got send during PAUSE, complete
> > with error \n") ); cl_obj_unlock( &p_adapter->obj );
> > @@ -3239,9 +3238,21 @@
> > IN NDIS_HANDLE adapter_context,
> > IN NDIS_SHUTDOWN_ACTION shutdown_action)
> > {
> > - IPOIB_ENTER( IPOIB_DBG_INIT );
> > - UNUSED_PARAM( adapter_context );
> > + IPOIB_ENTER( IPOIB_DBG_INIT ) ;
> > UNUSED_PARAM( shutdown_action );
> > +
> > + ipoib_adapter_t *p_adapter = (ipoib_adapter_t *)
> > adapter_context; +
> > + if (shutdown_action == NdisShutdownPowerOff ) {
> > + ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL);
> > + // We need to wait only if this is not a blue screen
> > any way + IPOIB_PRINT( TRACE_LEVEL_INFORMATION,
> > IPOIB_DBG_INIT, + ("Shutter shut, state =
> > %d\n", p_adapter->ipoib_state)); + IPOIB_PRINT(
> > TRACE_LEVEL_INFORMATION, IPOIB_DBG_RECV, +
> > ("Shutter shut, state = %d\n", p_adapter->ipoib_state)); +
> > shutter_shut ( &p_adapter->recv_shutter ); + }
> > +
> > IPOIB_EXIT( IPOIB_DBG_INIT );
> > }
> >
> > @@ -3941,13 +3952,15 @@
> > KeReleaseInStackQueuedSpinLock( &hdl );
> >
> > if (p_adapter->p_port) {
> > - //TODO improve this flow !
> > - //TODO Be sure we stopped all sends and receives
> > cl_spinlock_acquire(
> &p_adapter->p_port->send_lock );
> > ipoib_port_resume(p_adapter->p_port,FALSE);
> > cl_spinlock_release(
> &p_adapter->p_port->send_lock );
> > }
> > -
> > +
> > + IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_RECV,
> > + ("Shutter shut, state = %d\n",
> > p_adapter->ipoib_state)); + shutter_shut (
> > &p_adapter->recv_shutter ); +
> > KeAcquireInStackQueuedSpinLock( &g_ipoib.lock, &hdl );
> > p_adapter->ipoib_state = IPOIB_PAUSED;
> > KeReleaseInStackQueuedSpinLock( &hdl );
> > @@ -3978,6 +3991,16 @@
> > //
> > // Check to see if we need to change any attributes
> > }
> > +
> > + if ( (p_adapter->ipoib_state == IPOIB_PAUSED) ||
> > (p_adapter->ipoib_state == IPOIB_INIT) ) { +
> > IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_RECV, +
> > ("Shutter Alive, ipoib_state = %d\n", p_adapter->ipoib_state)); +
> > shutter_alive( &p_adapter->recv_shutter ); + }
> > + else {
> > + IPOIB_PRINT( TRACE_LEVEL_WARNING, IPOIB_DBG_RECV,
> > + ("*****Shutter Was not \"Alived\", state =
> > %d*****\n", p_adapter->ipoib_state)); + }
> >
> > KeAcquireInStackQueuedSpinLock( &g_ipoib.lock, &hdl );
> > p_adapter->ipoib_state = IPOIB_RUNNING;
> >
> > -----Original Message-----
> > From: Alex Naslednikov
> > Sent: Wednesday, January 27, 2010 6:52 PM
> > To: 'Smith, Stan'; ofw at lists.openfabrics.org
> > Subject: RE: [ofw] WWG 1-26-10 minutes - WinOF 2.2 release status
> >
> > Hi Stan,
> > I started to test my patch with WHQL tests.
> > It seems that the original problem was resolved, but I have several
> > improvements I hope to complete it by tomorrow (28/12/10)
> >
> > -----Original Message-----
> > From: ofw-bounces at lists.openfabrics.org
> > [mailto:ofw-bounces at lists.openfabrics.org] On Behalf Of Smith, Stan
> > Sent: Tuesday, January 26, 2010 8:06 PM
> > To: ofw at lists.openfabrics.org
> > Subject: [ofw] WWG 1-26-10 minutes - WinOF 2.2 release status
> >
> >
> > Windows Working Group - Tuesday 1/26 9:00AM PST
> >
> > Attending:
> >
> > Alex Naslednikov - Mellanox
> > John Russo - Qlogic
> > Rupert Dance - Lamprey Networks
> > Stan Smith - Intel
> >
> > ===============================================
> >
> > WinOF 2.2 Status
> > ----------------
> >
> > Patch 'Release HCA interface when loading of ibal fails' is intended
> > for trunk only as it's a rare occurrence.
> >
> > The IPoIB shutter code addressing IPoIB receiving packets during
> > shutdown will be included in WinOF 2.2 RC3 as soon as the code is
> > pushed into the trunk.
> > Alex will make this a priority as the release of RC3 is waiting on
> > this patch.
> >
> > Sean submitted 2.2 patches for the DAPL provider socket-CM
> & rdma-CM.
> >
> > Stan's testing of RC2 shows no signs of regression.
> >
> > Mellanox will engage in more QA testing once RC3 is released.
> >
> > IPoIB is tested on Svr 2008 R2 as IPoIB WHQL testing is specifically
> > targeted for Svr 2008 R2 only.
> >
> > ===============================================
> >
> > Delineation of OFED version numbers
> > -----------------------------------
> >
> > The WWG (Windows Working Group) has voted to change the OFA Windows
> > SW release nomenclature from WinOF to 'OpenFabrics Enterprise
> > Distribution' in order to leverage and strengthen OFA name branding.
> >
> > In those situations where the operating environment context is
> > ambiguous, the Windows version of OFED will be referred to as 'OFED
> > for Windows'.
> >
> > In aligning with the OFED name the question surfaced about how to
> > delineate OFED release versions and 'if' there should be some
> > consolidation of OFED SW release cycles between the Linux
> and Windows
> > sides of the OFA house.
> >
> > The WWG resolved, with no reserve, that the release cycles and
> > versioning of OFED for Windows remain distinctly separate from the
> > OFED for Linux release cycles and versioning.
> >
> > OpenFabrics Enterprise Distribution for Windows will be formally
> > announced at the Sonoma'10 conference.
> >
> > Changes in the OFED for Windows installer will consist of changing
> > names WinOF --> OFED.
> > The only functional change will be the installation path:
> > %ProgramFiles%\WinOF --> %ProgramFiles%\OFED
> >
> > At the OFA Sonoma workshop the WWG (and anyone else) will meet
> > face-2-face to discuss futures.
> >
> >
> >
> >
> >
> > _______________________________________________
> > ofw mailing list
> > ofw at lists.openfabrics.org
> > http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw
>
> _______________________________________________
> ofw mailing list
> ofw at lists.openfabrics.org
> http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ipoib_shuter.patch
Type: application/octet-stream
Size: 12634 bytes
Desc: ipoib_shuter.patch
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20100203/4b511625/attachment.obj>
More information about the ofw
mailing list