[ofw] RE: IBAT allow simultaneous device access

Fab Tillier ftillier at microsoft.com
Mon Aug 17 16:01:59 PDT 2009


> Fab Tillier wrote:
> >> Fab & community,
> >>   Are you good with this patch to allow simultaneous IBAT device
> >> access from user mode?
> >
> > Looks very reasonable to me, I'm surprised we've never run into this
> > issue before...
>
> OK, thanks; will commit.
> Case addressed is some (>2) MPI ranks @ a single node all attempting to
> access the IBAT device.
> We were seeing E_PENDING being returned.

The current code should not have returned E_PENDING.  If you look at the code, if the CreateFile failed, it would return HRESULT_FROM_WIN32( GetLastError() ) - GetLastError() would not have returned ERROR_IO_PENDING in this case, but some other error related to sharing.

Note however that E_PENDING can be returned if the ARP entry is in the process of being resolved.  Issuing a new request would abort the currently in-process one, so returning E_PENDING lets the caller implement the right retry logic (sleep and retry, punt to a higher level, etc.)

The ND provider handles E_PENDING internally and reports that as a timeout to be retried (asynchronously).

Point being, you'll need to handle E_PENDING in DAPL for the genuine in-progress case (NlnsIncomplete case for GetIpNetEntry2.)

-Fab

>
> >
> > -Fab
> >
> >>
> >> Thanks,
> >>
> >> Stan.
> >>
> >>
> >> --- C:/Documents and Settings/scsmith/Local Settings/Temp/ibat.cpp-
> >> revBASE.svn000.tmp.cpp       Mon Aug 17 14:33:47 2009
> >> +++ C:/Documents and Settings/scsmith/My Documents/openIB-
> >> windows/SVN/gen1/branches/WOF2-1/core/ibat/user/ibat.cpp      Mon
> >> Aug 17 14:01:18 2009 @@ -98,7 +98,7 @@
> >>          return E_INVALIDARG;
> >>
> >>      H hIbatDev = CreateFileW( IBAT_WIN32_NAME,
> >> -        MAXIMUM_ALLOWED, 0, NULL,
> >> +        MAXIMUM_ALLOWED,(FILE_SHARE_READ|FILE_SHARE_WRITE), NULL,
> >>          OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
> >>      if( hIbatDev == INVALID_HANDLE_VALUE )
> >>          return HRESULT_FROM_WIN32( GetLastError() ); @@ -306,7
> >>          +306,7 @@ return E_NOTIMPL;
> >>
> >>      H hIbatDev = CreateFileW( IBAT_WIN32_NAME,
> >> -        MAXIMUM_ALLOWED, 0, NULL,
> >> +        MAXIMUM_ALLOWED,(FILE_SHARE_READ|FILE_SHARE_WRITE), NULL,
> >>          OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
> >>      if( hIbatDev == INVALID_HANDLE_VALUE )
> >>          return HRESULT_FROM_WIN32( GetLastError() );




More information about the ofw mailing list