<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=US-ASCII">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2654.45">
<TITLE>RE: [Openib-windows] HCA: register_segment confusion</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2>SB</FONT>
</P>

<P><FONT SIZE=2>> -----Original Message-----</FONT>
<BR><FONT SIZE=2>> From: Fab Tillier [<A HREF="mailto:ftillier@silverstorm.com">mailto:ftillier@silverstorm.com</A>]</FONT>
<BR><FONT SIZE=2>> Sent: Wednesday, October 12, 2005 8:25 PM</FONT>
<BR><FONT SIZE=2>> To: 'Leonid Keller'; openib-windows@openib.org</FONT>
<BR><FONT SIZE=2>> Subject: RE: [Openib-windows] HCA: register_segment confusion</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> > From: Leonid Keller [<A HREF="mailto:leonid@mellanox.co.il">mailto:leonid@mellanox.co.il</A>]</FONT>
<BR><FONT SIZE=2>> > Sent: Tuesday, October 11, 2005 1:50 AM</FONT>
<BR><FONT SIZE=2>> > </FONT>
<BR><FONT SIZE=2>> > > ... what the code is trying to do here?</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > This code is trying to produce different and exact return </FONT>
<BR><FONT SIZE=2>> codes in case of</FONT>
<BR><FONT SIZE=2>> > error.</FONT>
<BR><FONT SIZE=2>> > "fake_ro" mechanism is intended to check, whether a failure </FONT>
<BR><FONT SIZE=2>> on IoReadAccess is</FONT>
<BR><FONT SIZE=2>> > caused by access permission violation (then it returns </FONT>
<BR><FONT SIZE=2>> MT_EPERM) or some other</FONT>
<BR><FONT SIZE=2>> > reason (MT_EAGAIN).</FONT>
<BR><FONT SIZE=2>> > Retry mechanism helps differentiate between 2 causes of</FONT>
<BR><FONT SIZE=2>> > STATUS_ACCESS_VIOLATION: wrong access permissions </FONT>
<BR><FONT SIZE=2>> (MT_EPERM) or invalid</FONT>
<BR><FONT SIZE=2>> > virtual address (MT_ENOMEM).</FONT>
<BR><FONT SIZE=2>> > Just FYI: the most popular cause of MT_EAGAIN - the </FONT>
<BR><FONT SIZE=2>> exception 0xc00000a1</FONT>
<BR><FONT SIZE=2>> > ("process memory quote is exceeded"), which happens upon </FONT>
<BR><FONT SIZE=2>> large allocations.</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> Does the user really care what the actual error cause was, </FONT>
<BR><FONT SIZE=2>> beyond the fact that</FONT>
<BR><FONT SIZE=2>> there was an access violation?</FONT>
<BR><FONT SIZE=2>> </FONT>
</P>

<P><FONT SIZE=2>Historically, this code was developed to satisfy our elaborate tests, which generated all possible error situations and checked return codes.</FONT></P>

<P><FONT SIZE=2>I can bring at least one reason for such elaboration in error codes: on getting MT_EAGAIN user can want to repeat this call after some time.</FONT></P>

<P><FONT SIZE=2>In pracice, i doubt that someone will do that, that's why i've removed all this cumbersome stuff.</FONT>
</P>
<BR>

<P><FONT SIZE=2>> > > I started looking at adding support for large registrations ...</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > this code is checked to successfully register 1GB buffers.</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> You're right - I just wasn't following the code flow properly.</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> > > Memory locking should be a whole lot simpler ...</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > As far as Gen2 driver tends to return only several main </FONT>
<BR><FONT SIZE=2>> error codes and i</FONT>
<BR><FONT SIZE=2>> > needed</FONT>
<BR><FONT SIZE=2>> > MOSAL_iobuf_register/deregister services, i've taken these </FONT>
<BR><FONT SIZE=2>> routines to the low</FONT>
<BR><FONT SIZE=2>> > level driver and simplified them by removing both mechanisms.</FONT>
<BR><FONT SIZE=2>> ></FONT>
<BR><FONT SIZE=2>> > I'm going to publish the code of the driver as it is, so </FONT>
<BR><FONT SIZE=2>> you'll see the new</FONT>
<BR><FONT SIZE=2>> > variant and be able to comment on it.</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> Great, thanks!</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> - Fab</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> > > -----Original Message-----</FONT>
<BR><FONT SIZE=2>> > > From: Fab Tillier [<A HREF="mailto:ftillier@silverstorm.com">mailto:ftillier@silverstorm.com</A>]</FONT>
<BR><FONT SIZE=2>> > > Sent: Monday, October 10, 2005 10:50 PM</FONT>
<BR><FONT SIZE=2>> > > To: openib-windows@openib.org</FONT>
<BR><FONT SIZE=2>> > > Subject: [Openib-windows] HCA: register_segment confusion</FONT>
<BR><FONT SIZE=2>> > ></FONT>
<BR><FONT SIZE=2>> > ></FONT>
<BR><FONT SIZE=2>> > > The register_segment function (mosal_iobuf.c@74) is a bit</FONT>
<BR><FONT SIZE=2>> > > confusing to say the</FONT>
<BR><FONT SIZE=2>> > > least.  What's the deal with the "fake_ro" checks, and trying</FONT>
<BR><FONT SIZE=2>> > > to lock the pages</FONT>
<BR><FONT SIZE=2>> > > multiple times in different ways?  Can someone from Mellanox</FONT>
<BR><FONT SIZE=2>> > > help explain what</FONT>
<BR><FONT SIZE=2>> > > the code is trying to do here?  What does the retry flag do?</FONT>
<BR><FONT SIZE=2>> > > What's going on</FONT>
<BR><FONT SIZE=2>> > > with the alternating read/write checks if modify right </FONT>
<BR><FONT SIZE=2>> checks fail?</FONT>
<BR><FONT SIZE=2>> > ></FONT>
<BR><FONT SIZE=2>> > > I started looking at adding support for large registrations,</FONT>
<BR><FONT SIZE=2>> > > and I'm worried</FONT>
<BR><FONT SIZE=2>> > > that if I touch something it'll all fall over.  Memory</FONT>
<BR><FONT SIZE=2>> > > locking should be a whole</FONT>
<BR><FONT SIZE=2>> > > lot simpler than what's going on here, and the comments don't</FONT>
<BR><FONT SIZE=2>> > > really help.</FONT>
<BR><FONT SIZE=2>> > ></FONT>
<BR><FONT SIZE=2>> > > Thanks,</FONT>
<BR><FONT SIZE=2>> > ></FONT>
<BR><FONT SIZE=2>> > > - Fab</FONT>
<BR><FONT SIZE=2>> > ></FONT>
<BR><FONT SIZE=2>> > > _______________________________________________</FONT>
<BR><FONT SIZE=2>> > > openib-windows mailing list</FONT>
<BR><FONT SIZE=2>> > > openib-windows@openib.org</FONT>
<BR><FONT SIZE=2>> > > <A HREF="http://openib.org/mailman/listinfo/openib-windows" TARGET="_blank">http://openib.org/mailman/listinfo/openib-windows</A></FONT>
<BR><FONT SIZE=2>> > ></FONT>
<BR><FONT SIZE=2>> </FONT>
</P>

</BODY>
</HTML>