[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