<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)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cordia New";
        panose-1:2 11 3 4 2 2 2 2 2 4;}
@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;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 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
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
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.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
p.msochpdefault, li.msochpdefault, div.msochpdefault
        {mso-style-name:msochpdefault;
        mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:10.0pt;
        font-family:"Times New Roman","serif";}
span.emailstyle17
        {mso-style-name:emailstyle17;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.emailstyle18
        {mso-style-name:emailstyle18;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.balloontextchar0
        {mso-style-name:balloontextchar;
        font-family:"Tahoma","sans-serif";}
span.emailstyle21
        {mso-style-name:emailstyle21;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle28
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle29
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle30
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle31
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle32
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle33
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle34
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle35
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle36
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle37
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle38
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle39
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle40
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle41
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle42
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle43
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle44
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle45
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle46
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle47
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle50
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.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:2110468913;
        mso-list-type:hybrid;
        mso-list-template-ids:1166843862 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {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;}
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"><span style="color:#1F497D">Hi Dharani,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Please note, definitely not all of this feedback is related to the reset patch but you are just the lucky one who got the entire feedback “snapshot” – again, I’m not sure how the team will want to evaluate the
 various pieces of input. I’d appreciate feedback on the feedback from the team!<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">thanks </span><span style="font-family:Wingdings;color:#1F497D">J</span><span style="color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Judy<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Dharani Kotte [mailto:Dharani.Kotte@sandisk.com]
<br>
<b>Sent:</b> Monday, April 21, 2014 12:17 PM<br>
<b>To:</b> Judy Brock-SSI; nvmewin@openfabrics.org<br>
<b>Cc:</b> Foster, Carolyn D; Alex Chang<br>
<b>Subject:</b> RE: [nvmewin] ***UNCHECKED*** FW: Re-send Sandisk Patch For Reset Fixes<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Hi Judy,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">It is long email let me take a look at the code and get back to you.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thank you for bringing it up.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Dharani.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Judy Brock-SSI [<a href="mailto:judy.brock@ssi.samsung.com">mailto:judy.brock@ssi.samsung.com</a>]
<br>
<b>Sent:</b> Monday, April 21, 2014 12:04 PM<br>
<b>To:</b> <a href="mailto:nvmewin@openfabrics.org">nvmewin@openfabrics.org</a><br>
<b>Cc:</b> Foster, Carolyn D; Dharani Kotte; Alex Chang<br>
<b>Subject:</b> RE: [nvmewin] ***UNCHECKED*** FW: Re-send Sandisk Patch For Reset Fixes<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif";color:black">Hi Carolyn and Dharani et al,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><i><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif";color:#1F497D">[Carolyn wrote] Line 2219: StorPortSynchronizeAccess – I don’t understand why this is needed.  The SynchronizeReset function
 looks very much like the recovery DPC routine, which should already be synchronized with Start IO and the interrupt DPC.<o:p></o:p></span></i></p>
<p class="MsoNormal" style="margin-left:.5in"><i><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif";color:#1F497D">[Dharani wrote] Line 2219: StorPortSynchronizeAccess, This is the request from Samsung suggested by Judy. Below is the reference
 mail.<o:p></o:p></span></i></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">The reason it was needed is because when the reference email was sent (7/18/2013), the OFA driver had a flag called COMPLETE_IN_DPC which controlled whether completions
 were handled in ISR context directly vs handled later in  DPC context.  So there was a true ISR context to contend with which the HwResetBus routine had to be synchronized with.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">One way to do that is to use StorPortSynchronizeAccess as the legacy LSI miniport does, another way is to acquire/release the StorPortInterruptLock ourselves in our HwResetBus
 routine as the storport AHCI  miniport does, for example. One way or another, we needed to synchronize with our HwInterrupt routine at that time. We have since eliminated the COMPLETE_IN_DPC  flag along with the path which did completions in the ISR directly
 (see <a href="http://lists.openfabrics.org/pipermail/nvmewin/2013-July/000608.html">
http://lists.openfabrics.org/pipermail/nvmewin/2013-July/000608.html</a>  ) so Carolyn is correct -  NVMeResetBus is currently synchronized with StartIo and the Interrupt DPC already.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">However, that does not mean the original recovery DPC routine could be scheduled as it originally wasfrom NVMeResetBus since there is still a need to not schedule a DPC
 from within that routine – by definition, all work must be completed before returning.  Below please find some additional feedback on the restructured reset logic.
<span style="color:black">I apologize for not having provided it in the originally requested timeframe. I hope it can discussed and dealt with as the team decides is most convenient.
</span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">1.<b> NVMeResetBus routine does not need to use StorPortSynchronizeAccess
</b>to synchronize with the ISR<b> </b>because we no longer do completions directly in ISR context as we did at the time I wrote my original recommendations for revising the HwBusReset routine.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">See
<a href="http://lists.openfabrics.org/pipermail/nvmewin/2013-July/000608.html">http://lists.openfabrics.org/pipermail/nvmewin/2013-July/000608.html</a> in which we decided to remove the COMPLETE_IN_DPC flag which allowed the driver to switch between completions
 in ISR context vs completions in DPC context.  However, there is still a need to not schedule a DPC from NVMeResetBus as was the case prior to the reset patch effort. All work must be completed before returning from the call to NVMeResetBus.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">2. Even if called directly, the current logic in the
<b>NVMeSynchronizeReset()</b> routine has the same problem as the original code had in that
<b>it will not wait for all necessary work to be done before returning</b>. After resetting the controller and completing all outstanding requests, it starts the re-initialize state machine with a call to NVMeRunningStartAttempt(). However,upon return from
 that call, there is no logic in place to wait for the initialization state machine to run to completion. We just fall straight through, allow IOs to resume, and return.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">There needs to be logic, similar to that in NVMePassiveInitialize, which waits for pAE->DriverState.NextDriverState to become either NVMeStartComplete or NVMeStartFailed
 in a while loop which calls NVMeStallExecution between checks, up to some maximum amount of time.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">3. The
<b>Recovery DPC </b>routine has the same problem NVMeSynchronizeReset – there is <b>
no logic in place to wait for the initialization state machine to run to completion</b> after the call to NVMeRunningStartAttempt() which starts it off.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">4.
<b>NVMeWaitForCtrlRDY should have a return value that can be checked to see if it was successful or not.</b> Right now, everywhere it is called the code forges ahead regardless of whether the RDY bit is in the desired state or not. Specifically, the following
 changes should be made (highlighted,line nums based on most-recently circulated Intel patch):<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">In NvmeStd.h:<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif";background:yellow;mso-highlight:yellow">BOOLEAN</span><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""> NVMeWaitForCtrlRDY(<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">    __in PNVME_DEVICE_EXTENSION pAE,<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">    __in ULONG expectedValue<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">In NvmeStd.c:<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">Line 1978:<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif";background:yellow;mso-highlight:yellow">BOOLEAN</span><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""> NVMeWaitForCtrlRDY(<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">    __in PNVME_DEVICE_EXTENSION pAE,<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">    __in ULONG expectedValue<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">{  
<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">    NVMe_CONTROLLER_STATUS CSTS = {0};<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">    ULONG time = 0;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">     CSTS.AsUlong =<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">         StorPortReadRegisterUlong(pAE,<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">                                   &pAE->pCtrlRegister->CSTS.AsUlong);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">     while (CSTS.RDY != expectedValue) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">        NVMeCrashDelay(STORPORT_TIMER_CB_us, pAE->ntldrDump);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">       time += STORPORT_TIMER_CB_us;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">        if (time > pAE->uSecCrtlTimeout) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">            return
<span style="background:yellow;mso-highlight:yellow">FALSE</span>;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">        }<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">        CSTS.AsUlong =<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">            StorPortReadRegisterUlong(pAE,<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">                                      &pAE->pCtrlRegister->CSTS.AsUlong);<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">     };<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">    return
<span style="background:yellow;mso-highlight:yellow">TRUE</span>;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">}<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">Line 651:<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif";background:yellow;mso-highlight:yellow">if(NVMeWaitForCtrlRDY(pAE, 1) == FALSE) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif";background:yellow;mso-highlight:yellow">StorPortDebugPrint(INFO,<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif";background:yellow;mso-highlight:yellow">       "NVMeInitialize: EN bit set to 1 but RDY bit set to 0\n");<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif";background:yellow;mso-highlight:yellow">return FALSE;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif";background:yellow;mso-highlight:yellow">}</span><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">Line 661:<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">i<span style="background:yellow;mso-highlight:yellow">f(NVMeWaitForCtrlRDY(pAE, 0) == FALSE) {<o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif";background:yellow;mso-highlight:yellow">StorPortDebugPrint(INFO,<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif";background:yellow;mso-highlight:yellow">    "NVMeInitialize: EN bit set to 0 but RDY bit won’t clear- still 1\n");<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif";background:yellow;mso-highlight:yellow">return FALSE;</span><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">                               etc.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">5.
<b>NVMeCompleteCmd should have a return value that can be checked to see if it was successful or not.
</b>Right now, everywhere it is called the code forges ahead regardless of whether the RDY bit is in the desired state or not. NVMeResetController is called from several places in the driver. One of the routines which it is called from is NVMeCompleteCmd:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">VOID NVMeCompleteCmd{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">. . .<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:.5in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">if ((pCmdEntry->Pending == FALSE) || (pCmdEntry->Context == NULL)) {<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in;text-indent:.5in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">/*<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in;text-indent:.5in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">* Something bad happened so reset the adapter and hope for the best<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">                                   */<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:.5in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">                  NVMeResetController(pAE, NULL);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">                                    return;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:.5in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">Since NVMeCompleteCmd has no return value,
<b>this fatal error return is never detected</b> in any of the places that the function is called from (quite a few) - the logic just proceeds on as if everything is fine. In some cases NVMeCompleteCmd can be called over and over (if it is called from DetectPendingCmds
 or IoCompletionDpcRoutine for example) which may in turn cause repeated calls to NVMeResetController.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">6.
<b>There is redundancy in the new routine NVMeWaitForCtrlRDY() and the routine NVMeWaitOnReady()</b>. Although the new routine is missing a return value (see item #1), we don’t need both – we can get rid of the old routine.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">7. In NvmeStd.c, line 646:<o:p></o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">Except for the first sentence, this comment is not accurate,should be removed:
<o:p></o:p></span></b></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">/*<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">* Before we transition to 0, make sure the ctrl is actually RDY<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><s><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">* NOTE:  Some HW implementations may not require this wait and  if not then it could be removed as waiting at this IRQL is  not recommended. 
 The spec is not clear on whether we <o:p></o:p></span></s></p>
<p class="MsoNormal" style="margin-left:.5in"><s><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">* need  to wait for RDY to transition EN back to 0 or not.</span></s><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">*/<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">NVM Express 1.0e and beyond includes the following statement in the definition of the EN bit(emphasis added): “<span style="color:#1F497D">Setting this field from a ‘0’
 to a ‘1’ when CSTS.RDY is a ‘1,’ or setting this field from a '1' to a '0' when CSTS.RDY is a '0,' has undefined results.</span>”<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">8. The routine
<b>NVMeResetAdapter()</b> sets CC.EN to 0 without ever checking to make sure that CSTS.RDY is set to ‘1’ first. This check has to be included in this routine. Since it is not, there are many paths in the driver where there is no prior check for this condition:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">                  a) NVMeInitAdminQueues -> NVMeEnableAdapter -> NVMeResetAdapter<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:.5in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">b) NVMeNormalShutdown -> NVMeResetAdapter<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:.5in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">c) NVMeAdapterControlPowerDown -> NVMeResetAdapter<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:.5in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">d) NVMeSynchronizeReset -> NVMeResetAdapter<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">9. In the
<b>RecoveryDpcRoutine()</b>:<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:.5in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">a) the code does not need to set CC.EN to ‘0’ and then wait for CSTS.RDY to become 0 because right after it does so, it calls NVMeResetAdapter
 which does the exact same thing.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:.5in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">b) is there an actual requirement for the following code?:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">                                   /* 10 msec "settle" delay post reset */<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">                                    NVMeStallExecution(pAE, 10000);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:.5in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">c) is it really safe and/or required to always acquire/release the StartIo lock?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">10. This is not feedback related Reset logic per-se but do we really need the NVMeCallArbiter() function at this point? I think we could replace all occurences of
<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:.5in"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">NVMeCallArbiter(pAE);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">with<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">                 if (pAE->ntldrDump == FALSE) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">                                   StorPortNotification(RequestTimerCall,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">                                                   pAE,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">                        NVMeRunning,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">                                                      pAE->DriverState.CheckbackInterval);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">                  }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cordia New","sans-serif"">Judy</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">
<a href="mailto:nvmewin-bounces@lists.openfabrics.org">nvmewin-bounces@lists.openfabrics.org</a> [<a href="mailto:nvmewin-bounces@lists.openfabrics.org">mailto:nvmewin-bounces@lists.openfabrics.org</a>]
<b>On Behalf Of </b>Dharani Kotte<br>
<b>Sent:</b> Tuesday, February 25, 2014 4:28 AM<br>
<b>To:</b> Foster, Carolyn D; Alex Chang; <a href="mailto:nvmewin@lists.openfabrics.org">
nvmewin@lists.openfabrics.org</a><br>
<b>Subject:</b> Re: [nvmewin] ***UNCHECKED*** FW: Re-send Sandisk Patch For Reset Fixes<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Hi Carolyn,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Line 1384: I can take care of this item.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Line 2219: StorPortSynchronizeAccess, This is the request from Samsung suggested by Judy. Below is the reference mail.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:.25in"><span style="color:#00B050">In our testing, we create a situation where we put the NVMe driver under heavy I/O load with Iometer and then cause the device to stop responding.  This results in I/O request timeouts
 which eventually causes the driver to be called at it’s HwStorResetBus entry point (NVMeResetBus).  I have some feedback on the current architecture of that routine:<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.25in"><span style="color:#00B050"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="color:#00B050"><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#00B050">Among other things, NMeResetBus schedules a DPC to complete any pending commands. This creates a situation where upon return from this entry point, there are still cmds outstanding which don’t get completed
 till the DPC runs.  According to the WDK, this doesn’t appear to be legal - all outstanding cmds have to be completed by the HwStorResetBus routine before it returns:<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.25in"><span style="color:#00B050"><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><b><span style="font-size:10.0pt;color:#00B050">HwResetBus</span></b><span style="font-size:10.0pt;color:#00B050">
<o:p></o:p></span></p>
<p style="mso-margin-top-alt:0in;margin-right:0in;margin-bottom:0in;margin-left:1.0in;margin-bottom:.0001pt">
<span style="font-size:10.0pt;color:#00B050">Pointer to the miniport driver's </span>
<span style="color:#00B050"><a href="ms-help://MS.WDK.v10.7600.091201/Storage_r/hh/Storage_r/stormini_b3051379-4caa-4502-9492-a21672cfbf0d.xml.htm"><i><span style="font-size:10.0pt;color:#00B050;background:#3399FF">HwStorResetBus</span></i></a></span><span style="font-size:10.0pt;color:#00B050">
 routine, which is a required entry point for all miniport drivers. <span style="background:yellow;mso-highlight:yellow">
This member has the same meaning for the Storport version of the HW_INITIALIZATION_DATA structure as it does for the SCSI Port version of the structure</span>. For more information, see the
<i>HwResetBus</i> member of HW_INITIALIZATION_DATA (SCSI)</span><span style="color:#00B050"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.25in"><span style="color:#00B050">and<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><i><span style="color:#00B050">HwScsiResetBus</span></i><span style="color:#00B050">
<span style="background:yellow;mso-highlight:yellow">must complete any outstanding requests</span> by calling
<b>ScsiPortCompleteRequest</b> with the <b>SrbStatus</b> value SRB_STATUS_BUS_RESET or, for individual SRBs,
<b>ScsiPortNotification</b> with this status value.<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.25in"><span style="color:#00B050">and<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:10.0pt;color:#00B050">The port driver pauses all device IO queues for the adapter and then calls the
<strong><span style="font-family:"Calibri","sans-serif"">HwStorResetBus</span></strong> routine at IRQL DISPATCH_LEVEL after acquiring the StartIo spin lock.
<span style="background:yellow;mso-highlight:yellow">A miniport driver is responsible for completing SRBs received by
</span></span><span style="color:#00B050"><a href="http://msdn.microsoft.com/en-us/library/windows/hardware/ff557423(v=vs.85).aspx"><strong><span style="font-size:10.0pt;font-family:"Calibri","sans-serif";color:#00B050;background:yellow;mso-highlight:yellow;text-decoration:none">HwStorStartIo</span></strong></a></span><span style="font-size:10.0pt;color:#00B050;background:yellow;mso-highlight:yellow">
 for <em><span style="font-family:"Calibri","sans-serif"">PathId</span></em> during this routine and setting their status to SRB_STATUS_BUS_RESET if necessary</span><span style="font-size:10.0pt;color:#00B050"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:1.0in"><span style="font-size:10.0pt;color:#00B050"><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:.25in"><span style="color:#00B050">Since HwStorResetBus must finish its work before returning; it can’t schedule a DPC to do so later on. The logic which schedules a DPC should be removed.<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.25in"><span style="font-size:12.0pt;color:#00B050"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="color:#00B050"><span style="mso-list:Ignore">2.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#00B050">Code should be added to call
<b>StorPortPause() </b>to hold off any new requests<b> </b>till <b>StorPortResume()
</b>is called.<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.25in"><span style="color:#00B050"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="color:#00B050"><span style="mso-list:Ignore">3.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#00B050">Code should be added to call  <b>StorPortSynchronizeAccess</b>() in order to synchronize with HwStorInterrupt. A callback routine in the NVMe driver should also be added for NVMeResetBus to do the synchronized
 work in. HwStorResetBus is already synchronized with HwStorStartIo since the port driver calls it only after acquiring the StartIo spinlock.
<o:p></o:p></span></p>
<p class="MsoListParagraph"><span style="color:#00B050"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="color:#00B050"><span style="mso-list:Ignore">4.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#00B050">We should implement a <b>
driver-internal global (per “adapter”) flag</b> signifying we are busy with reset processing and thus can’t allow new I/O requests to go through to the hardware.
<o:p></o:p></span></p>
<p class="MsoListParagraph"><span style="color:#00B050"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="color:#00B050"><span style="mso-list:Ignore">5.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#00B050">Code should be added to call StorPortResume() when all work is complete.
<o:p></o:p></span></p>
<p class="MsoListParagraph"><span style="color:#00B050"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="color:#00B050"><span style="mso-list:Ignore">6.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#00B050">We should refer to the WDK-supplied LSI parallel SCSI StorPort miniport sample driver for an example of all of the above.<o:p></o:p></span></p>
<p class="MsoListParagraph"><span style="color:#00B050"><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:.25in"><span style="color:#00B050"><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:.25in"><span style="color:#00B050">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.25in"><span style="color:#00B050">Judy<o:p></o:p></span></p>
<p class="MsoNormal"><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">Dharani.<o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">
<a href="mailto:nvmewin-bounces@lists.openfabrics.org">nvmewin-bounces@lists.openfabrics.org</a> [<a href="mailto:nvmewin-bounces@lists.openfabrics.org">mailto:nvmewin-bounces@lists.openfabrics.org</a>]
<b>On Behalf Of </b>Foster, Carolyn D<br>
<b>Sent:</b> Monday, February 24, 2014 3:51 PM<br>
<b>To:</b> Alex Chang; <a href="mailto:nvmewin@lists.openfabrics.org">nvmewin@lists.openfabrics.org</a><br>
<b>Subject:</b> Re: [nvmewin] ***UNCHECKED*** FW: Re-send Sandisk Patch For Reset Fixes<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Hi Alex and Dharni, <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I have been reviewing the code and performing some tests and I have some concerns about this patch. 
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">In nvmeStd.c:<o:p></o:p></p>
<p class="MsoNormal">Line 1384: NVMeProcessAbortLunReset – This change will now send abort commands for all pending requests when a RESET_LOGICAL_UNIT request comes in, instead of issuing the RecoveryDpc routine.  This change concerns me the most.  During a
 reset there is no need to send individual abort requests for outstanding commands.  When the LUN reset comes in, we will set CC.EN to 0 and the spec clearly states that “the controller shall not process commands nor post completion queue entries to the completion
 queue.”  This reset behavior has been accounted for in the driver, by design.  In the LUN reset case, we should continue to issue the recovery DPC routine, which will complete all outstanding commands.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">What should happen here is that the new processAbortLun function should be moved under the SRB_FUNCTION_ABORT_COMMAND only.  Then the procesAbortLunReset function should only send one abort and not abort all outstanding commands.<span style="color:#1F497D"> 
</span><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Also, during testing, I hit a D1 BSOD when I tried to step through the code.  I ran IO and forced a timeout by using the debugger to skip over the line of code that rings the submission queue doorbell.  The IO should be timed out by storport,
 which will then send a reset lun.  <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Line 2219: StorPortSynchronizeAccess – I don’t understand why this is needed.  The SynchronizeReset function looks very much like the recovery DPC routine, which should already be synchronized with Start IO and the interrupt DPC.<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">Carolyn    <o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">
<a href="mailto:nvmewin-bounces@lists.openfabrics.org">nvmewin-bounces@lists.openfabrics.org</a> [<a href="mailto:nvmewin-bounces@lists.openfabrics.org">mailto:nvmewin-bounces@lists.openfabrics.org</a>]
<b>On Behalf Of </b>Alex Chang<br>
<b>Sent:</b> Wednesday, February 19, 2014 10:06 AM<br>
<b>To:</b> <a href="mailto:nvmewin@lists.openfabrics.org">nvmewin@lists.openfabrics.org</a><br>
<b>Subject:</b> [nvmewin] ***UNCHECKED*** FW: Re-send Sandisk Patch For Reset Fixes<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Thank you, Dharani.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Hi all,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Please review/test the attached reset fix patch from Sandisk and provide your feedbacks.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thank you very much,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Alex<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Dharani Kotte [<a href="mailto:Dharani.Kotte@sandisk.com">mailto:Dharani.Kotte@sandisk.com</a>]
<br>
<b>Sent:</b> Wednesday, February 19, 2014 9:00 AM<br>
<b>To:</b> Alex Chang<br>
<b>Subject:</b> [WARNING - ENCRYPTED ATTACHMENT NOT VIRUS SCANNED] RE: [nvmewin] Re-send Sandisk Patch For Reset Fixes<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<pre>Content-Type: text/plain; charset=UTF-8<o:p></o:p></pre>
<pre>Content-Transfer-Encoding: 8bit<o:p></o:p></pre>
<pre>Date: %%SENT_DATE%%<o:p></o:p></pre>
<pre>Subject: Suspect Message Quarantined <o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre><o:p> </o:p></pre>
<pre><o:p> </o:p></pre>
<pre>WARNING: The virus scanner was unable to scan an attachment in an email message sent to you.  This attachment could possibly contain viruses or other malicious programs.  The attachment could not be scanned for the following reasons:<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>%%DESC%%<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>The full message and the attachment have been stored in the quarantine.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>The identifier for this message is '%%QID%%'.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Access the quarantine at: <o:p></o:p></pre>
<pre><a href="https://puremessage.pmc-sierra.bc.ca:28443/">https://puremessage.pmc-sierra.bc.ca:28443/</a><o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>For more information on PMC's Anti-Spam system:<o:p></o:p></pre>
<pre><a href="http://pmc-intranet/wiki/index.php/Outlook:Anti-Spam_FAQ">http://pmc-intranet/wiki/index.php/Outlook:Anti-Spam_FAQ</a><o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>IT Services<o:p></o:p></pre>
<pre>PureMessage Admin <o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<p class="MsoNormal"><span style="color:#1F497D">Hi Alex,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">The attached is the patch source for review. I have tested the I/O running over night.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Areas need to be focused for test this patch:
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">1. Test abort/LUN resets.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">2. Test chip reset.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">3. Test the format command.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">4.Test Firmware download command.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Password is “sndk1234”<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Dharani.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Alex Chang [<a href="mailto:Alex.Chang@pmcs.com">mailto:Alex.Chang@pmcs.com</a>]
<br>
<b>Sent:</b> Tuesday, February 18, 2014 12:15 PM<br>
<b>To:</b> Dharani Kotte<br>
<b>Subject:</b> RE: [nvmewin] Re-send Sandisk Patch For Reset Fixes<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Great!<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Alex<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Dharani Kotte [<a href="mailto:Dharani.Kotte@sandisk.com">mailto:Dharani.Kotte@sandisk.com</a>]
<br>
<b>Sent:</b> Tuesday, February 18, 2014 12:14 PM<br>
<b>To:</b> Alex Chang<br>
<b>Subject:</b> RE: [nvmewin] Re-send Sandisk Patch For Reset Fixes<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Just testing after merging the code it I should be able to  send it tomorrow morning.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks,<br>
Dharani.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Alex Chang [<a href="mailto:Alex.Chang@pmcs.com">mailto:Alex.Chang@pmcs.com</a>]
<br>
<b>Sent:</b> Tuesday, February 18, 2014 12:13 PM<br>
<b>To:</b> Dharani Kotte<br>
<b>Subject:</b> RE: [nvmewin] Re-send Sandisk Patch For Reset Fixes<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Hi Dharani,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Just a friendly reminder, could you please send out your patch as soon as it’s ready?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Many thanks,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Alex<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Dharani Kotte [<a href="mailto:Dharani.Kotte@sandisk.com">mailto:Dharani.Kotte@sandisk.com</a>]
<br>
<b>Sent:</b> Friday, February 14, 2014 10:18 AM<br>
<b>To:</b> Alex Chang; <a href="mailto:nvmewin@lists.openfabrics.org">nvmewin@lists.openfabrics.org</a><br>
<b>Subject:</b> RE: [nvmewin] Re-send Sandisk Patch For Reset Fixes<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Sure Alex.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Dharani.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">
<a href="mailto:nvmewin-bounces@lists.openfabrics.org">nvmewin-bounces@lists.openfabrics.org</a> [<a href="mailto:nvmewin-bounces@lists.openfabrics.org">mailto:nvmewin-bounces@lists.openfabrics.org</a>]
<b>On Behalf Of </b>Alex Chang<br>
<b>Sent:</b> Friday, February 14, 2014 10:17 AM<br>
<b>To:</b> <a href="mailto:nvmewin@lists.openfabrics.org">nvmewin@lists.openfabrics.org</a><br>
<b>Subject:</b> [nvmewin] Re-send Sandisk Patch For Reset Fixes<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Good morning, Dharani,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">As you may know, both Intel and Huawei patches had been added into OFA source base. Now, you may re-base your changes and send a patch out for review/test. Thank you very much for contributing the fixes.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Regards,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Alex<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Dharani Kotte [<a href="mailto:Dharani.Kotte@sandisk.com">mailto:Dharani.Kotte@sandisk.com</a>]
<br>
<b>Sent:</b> Wednesday, January 15, 2014 2:08 PM<br>
<b>To:</b> Alex Chang; Kwok Kong; Akshay Mathur<br>
<b>Cc:</b> Dave Landsman<br>
<b>Subject:</b> [WARNING - ENCRYPTED ATTACHMENT NOT VIRUS SCANNED] RE: Would you please help to resolve a few OFA NVMe driver problems ?<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<pre>Content-Type: text/plain; charset=UTF-8<o:p></o:p></pre>
<pre>Content-Transfer-Encoding: 8bit<o:p></o:p></pre>
<pre>Date: %%SENT_DATE%%<o:p></o:p></pre>
<pre>Subject: Suspect Message Quarantined <o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre><o:p> </o:p></pre>
<pre><o:p> </o:p></pre>
<pre>WARNING: The virus scanner was unable to scan an attachment in an email message sent to you.  This attachment could possibly contain viruses or other malicious programs.  The attachment could not be scanned for the following reasons:<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>%%DESC%%<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>The full message and the attachment have been stored in the quarantine.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>The identifier for this message is '%%QID%%'.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Access the quarantine at: <o:p></o:p></pre>
<pre><a href="https://puremessage.pmc-sierra.bc.ca:28443/">https://puremessage.pmc-sierra.bc.ca:28443/</a><o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>For more information on PMC's Anti-Spam system:<o:p></o:p></pre>
<pre><a href="http://pmc-intranet/wiki/index.php/Outlook:Anti-Spam_FAQ">http://pmc-intranet/wiki/index.php/Outlook:Anti-Spam_FAQ</a><o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>IT Services<o:p></o:p></pre>
<pre>PureMessage Admin <o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<p class="MsoNormal"><span style="color:#1F497D">Hi Alex,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">The attached is the source for the preliminary review. I have tested the IO and scsi compliance test. I don’t have a drive which supports abort/lun resets, not sure how to test the format command.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Dharani.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Alex Chang [<a href="mailto:Alex.Chang@pmcs.com">mailto:Alex.Chang@pmcs.com</a>]
<br>
<b>Sent:</b> Friday, December 20, 2013 11:54 AM<br>
<b>To:</b> Dharani Kotte; Kwok Kong; Akshay Mathur<br>
<b>Cc:</b> Dave Landsman<br>
<b>Subject:</b> RE: Would you please help to resolve a few OFA NVMe driver problems ?<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Happy Holidays to you all.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Alex<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Dharani Kotte [<a href="mailto:Dharani.Kotte@sandisk.com">mailto:Dharani.Kotte@sandisk.com</a>]
<br>
<b>Sent:</b> Friday, December 20, 2013 11:52 AM<br>
<b>To:</b> Alex Chang; Kwok Kong; Akshay Mathur<br>
<b>Cc:</b> Dave Landsman<br>
<b>Subject:</b> RE: Would you please help to resolve a few OFA NVMe driver problems ?<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Thank you for the explanation. Sure I will take look.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Happy Holidays.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Dharani.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Alex Chang [<a href="mailto:Alex.Chang@pmcs.com">mailto:Alex.Chang@pmcs.com</a>]
<br>
<b>Sent:</b> Friday, December 20, 2013 11:44 AM<br>
<b>To:</b> Kwok Kong; Dharani Kotte; Akshay Mathur<br>
<b>Cc:</b> Dave Landsman<br>
<b>Subject:</b> RE: Would you please help to resolve a few OFA NVMe driver problems ?<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Hi Dharani,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">The controller reset can be issued from either from the host or the driver itself. Currently, the driver seems handling them in the same manner via single entry “NVMeResetController”. In the case of “from the
 host”, the driver needs to separate the cases of SRB_FUNCTION_RESET_... requests from the ioctl request of NVME_RESET_DEVICE in the sense of handling pending IOs. In the case of “the driver itself”, needs to re-exam the related error recovery codes as well.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Judy from Samsung suggested referring the storahci.sys driver sample codes for Windows 7/8 based on reset bus logic examples and detailed recommendations.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thank you,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Alex<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Kwok Kong
<br>
<b>Sent:</b> Friday, December 20, 2013 9:08 AM<br>
<b>To:</b> Dharani Kotte; Akshay Mathur; Alex Chang<br>
<b>Cc:</b> Dave Landsman<br>
<b>Subject:</b> RE: Would you please help to resolve a few OFA NVMe driver problems ?<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Dharani,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Yes, these are the three areas that you are committed to.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Alex,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Please send more details on the “Controller reset does not handle all cases”  to Dharani.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">-Kwok<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Dharani Kotte [<a href="mailto:Dharani.Kotte@sandisk.com">mailto:Dharani.Kotte@sandisk.com</a>]
<br>
<b>Sent:</b> Friday, December 20, 2013 9:02 AM<br>
<b>To:</b> Kwok Kong; Akshay Mathur<br>
<b>Cc:</b> Dave Landsman<br>
<b>Subject:</b> RE: Would you please help to resolve a few OFA NVMe driver problems ?<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Hi Kwok,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">I think the below are the items that we are committing for:<o:p></o:p></span></p>
<p class="MsoNormal">- Not handling CSTS.RDY status (from 1->0 and 0->1) properly on NVMe reset<o:p></o:p></p>
<p class="MsoNormal">- Controller reset does not handle all cases<o:p></o:p></p>
<p class="MsoNormal">- orphaned requests<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Can somebody provide little bit more details on the expectation for the item “Controller reset does not handle all cases”.<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">Dharani.<o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Kwok Kong [<a href="mailto:Kwok.Kong@pmcs.com">mailto:Kwok.Kong@pmcs.com</a>]
<br>
<b>Sent:</b> Thursday, December 19, 2013 6:53 PM<br>
<b>To:</b> Akshay Mathur<br>
<b>Cc:</b> Dharani Kotte; Dave Landsman<br>
<b>Subject:</b> RE: Would you please help to resolve a few OFA NVMe driver problems ?<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Excellent! Your help is much appreciated.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Dharani,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Please let me know if you have any question.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Happy holiday to all of you.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">-Kwok<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Akshay Mathur [<a href="mailto:Akshay.Mathur@sandisk.com">mailto:Akshay.Mathur@sandisk.com</a>]
<br>
<b>Sent:</b> Thursday, December 19, 2013 6:51 PM<br>
<b>To:</b> Kwok Kong<br>
<b>Cc:</b> Dharani Kotte; Dave Landsman<br>
<b>Subject:</b> RE: Would you please help to resolve a few OFA NVMe driver problems ?<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Kwok,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">You are welcome. We are pleased to contribute to the community and appreciate you driving it!<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">We will try our best to complete the implementation by end of January but we may not be able to complete comprehensive testing by that time. This is because of overlaps with few internal business deliverables
 and a company-wide shut-down for next 1.5 weeks.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Anyway, Dharani will be in touch with you as he makes progress.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Akshay<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Kwok Kong [<a href="mailto:Kwok.Kong@pmcs.com">mailto:Kwok.Kong@pmcs.com</a>]
<br>
<b>Sent:</b> Tuesday, December 17, 2013 4:21 PM<br>
<b>To:</b> Akshay Mathur<br>
<b>Cc:</b> Dharani Kotte; Dave Landsman<br>
<b>Subject:</b> RE: Would you please help to resolve a few OFA NVMe driver problems ?<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Akshay,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks for your willingness to contribute to the driver.   I am looking for a patch before end of Jan 2014, the earlier the better.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Please let me know if Sandisk can commit to that.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Your help is much appreciated.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">-Kwok<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Akshay Mathur [<a href="mailto:Akshay.Mathur@sandisk.com">mailto:Akshay.Mathur@sandisk.com</a>]
<br>
<b>Sent:</b> Tuesday, December 17, 2013 4:11 PM<br>
<b>To:</b> Kwok Kong<br>
<b>Cc:</b> Dharani Kotte; Dave Landsman; Akshay Mathur<br>
<b>Subject:</b> RE: Would you please help to resolve a few OFA NVMe driver problems ?<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal"><span style="color:#1F497D">Kowk,</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">I manage the Software and driver development team at SanDisk/ESS.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">We are certainly willing to contribute to fixing the problems listed below but before we can commit, we would like to get clarification on the timeline i.e. by when these fixes are expected to be completed.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks</span><o:p></o:p></p>
<p class="MsoNormal"><b><span style="color:black">Akshay Mathur</span></b><o:p></o:p></p>
<p class="MsoNormal"><b><span style="color:navy">Sr Software Manager, Enterprise Storage Solutions</span></b><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.0pt;color:navy">951 SanDisk Drive, Building #5  |  Milpitas, CA 95035 U.S.A.  |  Direct  +1 408.801.1336  | 
</span><o:p></o:p></p>
<p class="MsoNormal" style="margin-bottom:3.0pt"><span style="font-size:10.0pt;color:navy">Cell +1 856.607.7323  |  Corporate +1 408.801.1000  | 
<a href="mailto:Akshay.Mathur@sandisk.com">Akshay.Mathur@sandisk.com</a></span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:#1F497D"><img border="0" width="150" height="29" id="Picture_x0020_1" src="cid:image001.jpg@01CF5D5C.DC6D9FE0" alt="Description: cid:image001.jpg@01CC358D.60974910"></span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Kwok Kong [<a href="mailto:Kwok.Kong@pmcs.com">mailto:Kwok.Kong@pmcs.com</a>]
<br>
<b>Sent:</b> Wednesday, December 11, 2013 18:00<br>
<b>To:</b> Dave Landsman<br>
<b>Cc:</b> Dharani Kotte<br>
<b>Subject:</b> Would you please help to resolve a few OFA NVMe driver problems ?</span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">Dave and Dharani,<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">There are some issues with the current OFA driver that need to be fixed. PMC is working on resolving some of the problems. Intel has agreed to work on the following two problems:<o:p></o:p></p>
<p class="MsoNormal">- remove #define for CHATHAM2<o:p></o:p></p>
<p class="MsoNormal">- Learning of CPU core to Vector failure handling<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">I am also making request to other companies to work on some of the issues.<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">I wonder if your company can work on the following three problems:<o:p></o:p></p>
<p class="MsoNormal">                - Not handling CSTS.RDY status (from 1->0 and 0->1) properly on NVMe reset<o:p></o:p></p>
<p class="MsoNormal">                - Controller reset does not handle all cases<o:p></o:p></p>
<p class="MsoNormal">                - orphaned requests<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">Please let me know if your company can work on these two issues.<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"> <o:p></o:p></p>
<p class="MsoNormal">-Kwok<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman","serif""><o:p> </o:p></span></p>
<div class="MsoNormal" align="center" style="text-align:center"><span style="font-size:12.0pt;font-family:"Times New Roman","serif"">
<hr size="2" width="100%" align="center">
</span></div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Arial","sans-serif";color:gray"><br>
PLEASE NOTE: The information contained in this electronic mail message is intended only for the use of the designated recipient(s) named above. If the reader of this message is not the intended recipient, you are hereby notified that you have received this
 message in error and that any review, dissemination, distribution, or copying of this message is strictly prohibited. If you have received this communication in error, please notify the sender by telephone or e-mail (as shown above) immediately and destroy
 any and all copies of this message in your possession (whether hard copies or electronically stored copies).<br>
<br>
</span><span style="font-size:12.0pt;font-family:"Times New Roman","serif""><br clear="all">
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman","serif""><br clear="all">
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman","serif""><br clear="all">
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman","serif""><br clear="all">
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman","serif""><br clear="all">
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman","serif""><br clear="all">
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman","serif""><br clear="all">
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman","serif""><br clear="all">
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman","serif""><br clear="all">
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman","serif""><br clear="all">
<o:p></o:p></span></p>
</div>
</body>
</html>