<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html xmlns="http://www.w3.org/TR/REC-html40" 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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="ProgId" content="Word.Document">
<meta name="GENERATOR" content="MSHTML 8.00.6001.19190">
<meta name="Originator" content="Microsoft Word 14">
<link rel="File-List" href="cid:filelist.xml@01CD0358.F97481E0"><!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:Zoom>120</w:Zoom>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<w:OverrideTableStyleHps/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true" DefSemiHidden="true" DefQFormat="false" DefPriority="99" LatentStyleCount="267">
<w:LsdException Locked="false" Priority="0" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" Priority="39" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" Name="toc 9"/>
<w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" Priority="10" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" Priority="11" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" Priority="22" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" Priority="59" SemiHidden="false" UnhideWhenUsed="false" Name="Table Grid"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
</w:LatentStyles>
</xml><![endif]--><style>@font-face {
font-family: Wingdings;
}
@font-face {
font-family: Wingdings;
}
@font-face {
font-family: Calibri;
}
@font-face {
font-family: Tahoma;
}
@page WordSection1 {size: 8.5in 11.0in; margin: 1.0in 1.0in 1.0in 1.0in; mso-header-margin: .5in; mso-footer-margin: .5in; mso-paper-source: 0; }
P.MsoNormal {
MARGIN: 0in 0in 0pt; FONT-FAMILY: "Calibri","sans-serif"; FONT-SIZE: 11pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: "Times New Roman"; mso-style-unhide: no; mso-style-qformat: yes; mso-style-parent: ""; mso-pagination: widow-orphan; mso-fareast-font-family: Calibri
}
LI.MsoNormal {
MARGIN: 0in 0in 0pt; FONT-FAMILY: "Calibri","sans-serif"; FONT-SIZE: 11pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: "Times New Roman"; mso-style-unhide: no; mso-style-qformat: yes; mso-style-parent: ""; mso-pagination: widow-orphan; mso-fareast-font-family: Calibri
}
DIV.MsoNormal {
MARGIN: 0in 0in 0pt; FONT-FAMILY: "Calibri","sans-serif"; FONT-SIZE: 11pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: "Times New Roman"; mso-style-unhide: no; mso-style-qformat: yes; mso-style-parent: ""; mso-pagination: widow-orphan; mso-fareast-font-family: Calibri
}
A:link {
COLOR: blue; TEXT-DECORATION: underline; mso-style-noshow: yes; mso-style-priority: 99; text-underline: single
}
SPAN.MsoHyperlink {
COLOR: blue; TEXT-DECORATION: underline; mso-style-noshow: yes; mso-style-priority: 99; text-underline: single
}
A:visited {
COLOR: purple; TEXT-DECORATION: underline; mso-style-noshow: yes; mso-style-priority: 99; text-underline: single
}
SPAN.MsoHyperlinkFollowed {
COLOR: purple; TEXT-DECORATION: underline; mso-style-noshow: yes; mso-style-priority: 99; text-underline: single
}
P.MsoListParagraph {
MARGIN: 0in 0in 0pt 0.5in; FONT-FAMILY: "Calibri","sans-serif"; FONT-SIZE: 11pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: "Times New Roman"; mso-style-unhide: no; mso-style-qformat: yes; mso-pagination: widow-orphan; mso-fareast-font-family: Calibri; mso-style-priority: 34
}
LI.MsoListParagraph {
MARGIN: 0in 0in 0pt 0.5in; FONT-FAMILY: "Calibri","sans-serif"; FONT-SIZE: 11pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: "Times New Roman"; mso-style-unhide: no; mso-style-qformat: yes; mso-pagination: widow-orphan; mso-fareast-font-family: Calibri; mso-style-priority: 34
}
DIV.MsoListParagraph {
MARGIN: 0in 0in 0pt 0.5in; FONT-FAMILY: "Calibri","sans-serif"; FONT-SIZE: 11pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: "Times New Roman"; mso-style-unhide: no; mso-style-qformat: yes; mso-pagination: widow-orphan; mso-fareast-font-family: Calibri; mso-style-priority: 34
}
SPAN.EmailStyle17 {
FONT-STYLE: normal; FONT-FAMILY: "Calibri","sans-serif"; COLOR: windowtext; FONT-WEIGHT: normal; TEXT-DECORATION: none; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-style-unhide: no; mso-style-noshow: yes; text-underline: none; mso-style-type: personal-compose; mso-ansi-font-size: 10.0pt; mso-bidi-font-size: 10.0pt; text-line-through: none
}
SPAN.SpellE {
mso-style-name: ""; mso-spl-e: yes
}
.MsoChpDefault {
FONT-FAMILY: "Calibri","sans-serif"; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: "Times New Roman"; mso-fareast-font-family: Calibri; mso-style-type: export-only; mso-default-props: yes
}
DIV.WordSection1 {
page: WordSection1
}
OL {
MARGIN-BOTTOM: 0in
}
UL {
MARGIN-BOTTOM: 0in
}
</style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin:0in;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-hansi-font-family:Calibri;
mso-bidi-font-family:"Times New Roman";}
</style><![endif]--><!--[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 style="tab-interval: .5in" lang="EN-US" link="blue" vlink="purple">
<div dir="ltr" align="left"><span class="569154117-16032012"><font color="#0000ff" size="2" face="Arial">Hi Paul,</font></span></div>
<div dir="ltr" align="left"><span class="569154117-16032012"><font color="#0000ff" size="2" face="Arial"></font></span> </div>
<div dir="ltr" align="left"><span class="569154117-16032012"><font color="#0000ff" size="2" face="Arial">I have a question regarding the Learning Mode. When you finish the learning and find out the mappings between cores and vectors, do we need to delete the
created Completion Queues and re-create them? When the driver creates the Completion Queues before learning, it specifies the associated vector for each Completion Queue with some assumptions in mappings between Completion Queues and vectors. After the learning,
the associations between Completion Queues and vectors need to be corrected via deleting the queues and re-creating them. Correct me if I am wrong.</font></span></div>
<div dir="ltr" align="left"><span class="569154117-16032012"><font color="#0000ff" size="2" face="Arial"></font></span> </div>
<div dir="ltr" align="left"><span class="569154117-16032012"><font color="#0000ff" size="2" face="Arial">Thanks,<br>
Alex</font></span></div>
<br>
<div dir="ltr" lang="en-us" class="OutlookMessageHeader" align="left">
<hr tabindex="-1">
<font size="2" face="Tahoma"><b>From:</b> nvmewin-bounces@lists.openfabrics.org [mailto:nvmewin-bounces@lists.openfabrics.org]
<b>On Behalf Of </b>Luse, Paul E<br>
<b>Sent:</b> Friday, March 16, 2012 9:42 AM<br>
<b>To:</b> nvmewin@lists.openfabrics.org<br>
<b>Subject:</b> [nvmewin] ***UNCHECKED*** Learning Mode Patch for Review<br>
<b>Importance:</b> High<br>
</font><br>
</div>
<div></div>
<div class="WordSection1">
<p class="MsoNormal"><i style="mso-bidi-font-style: normal"><font size="2" face="Calibri"><span style="FONT-STYLE: italic; FONT-SIZE: 10pt; mso-bidi-font-style: normal; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Note
that I merged Alex’s patch in here as it’s still pending with Ray but is only a half-dozen lines of code so rather than have Ray create to tags and do 2 merges I just rolled them together so Ray can just process one patch.<span style="mso-spacerun: yes">
</span>Normally wouldn’t recommend this but the pending patch is so small it just makes sense.<o:p></o:p></span></font></i></p>
<p class="MsoNormal"><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"><o:p> </o:p></span></font></p>
<p class="MsoNormal"><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Password is ofanvme123.<span style="mso-spacerun: yes">
</span>I can schedule a call to walk through any of this if anyone would like.<o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"><o:p> </o:p></span></font></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal"><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; FONT-WEIGHT: bold; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-bidi-font-weight: normal">Learning
Mode:</span></font></b><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"><span style="mso-spacerun: yes">
</span>Pretty easy, its only enabled if we’re in an optimal <span class="SpellE">
config</span> <span class="SpellE">wrt</span> cores/queues/vectors.<span style="mso-spacerun: yes">
</span>Assume we have N processors, it works like this…. On startup the first N IOs will be sent to queue # 1..N sequentially.<span style="mso-spacerun: yes">
</span>Each queue is created with a matching MSI ID so in this manner we assure to hit every queue and every message ID by incrementing the queue # for the first N IOs regardless of the submitting core.<span style="mso-spacerun: yes">
</span>On the completion side we simply look at the core that we completed on and update the table for the completing core such that the correct queues are used the next time an IO submits to this core.<o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"><o:p> </o:p></span></font></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal"><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; FONT-WEIGHT: bold; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-bidi-font-weight: normal">Testing:
</span></font></b><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">(in all cases I confirmed functionality<b style="mso-bidi-font-weight: normal"><span style="FONT-WEIGHT: bold; mso-bidi-font-weight: normal">
</span></b>and via <span class="SpellE">iometer</span> and<b style="mso-bidi-font-weight: normal"><span style="FONT-WEIGHT: bold; mso-bidi-font-weight: normal">
</span></b><span class="SpellE">xperf</span> I confirmed core load balancing)<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo5" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore">-<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Chatham (DT with 8 cores):<span style="mso-spacerun: yes">
</span>Win8 Server public beta, 2008R2<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo5" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore">-<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">QEMU (configured for 2 cores): Win7-64<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo5" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore">-<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Tools:<span style="mso-spacerun: yes">
</span>The standard stuff:<span style="mso-spacerun: yes"> </span>format, stress,
<span class="SpellE">iometer</span>, SCSI compliance, shutdown/restart<o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"><o:p> </o:p></span></font></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal"><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; FONT-WEIGHT: bold; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-bidi-font-weight: normal">Changes:<o:p></o:p></span></font></b></p>
<p class="MsoNormal"><span class="SpellE"><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">nvmeStd.h</span></font></span><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">:
<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; mso-list: l4 level1 lfo1" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore">-<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Comment changes as needed<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; mso-list: l4 level1 lfo1" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore">-<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Removed the
<span class="SpellE">logcalmode</span> element from the <span class="SpellE">msgTable</span> as
<span class="SpellE">its</span> no longer used<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; mso-list: l4 level1 lfo1" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore">-<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Removed DBG directive from
<span class="SpellE">procNum</span> element, <span class="SpellE">its</span> now required for learning mode<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; mso-list: l4 level1 lfo1" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore">-<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Removed proto for
<span class="SpellE">NVMeMsixMapCores</span>, not used anymore (combined MSI and MSIX routines, more later)<o:p></o:p></span></font></p>
<p class="MsoListParagraph"><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"><o:p> </o:p></span></font></p>
<p style="MARGIN-LEFT: 0in" class="MsoListParagraph"><span class="SpellE"><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">nvmeIo.c</span></font></span><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">:<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo3" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore">-<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Removed DBG directive from
<span class="SpellE">procNum</span> element, <span class="SpellE">its</span> now required for learning mode<o:p></o:p></span></font></p>
<p class="MsoListParagraph"><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"><o:p> </o:p></span></font></p>
<p style="MARGIN-LEFT: 0in" class="MsoListParagraph"><span class="SpellE"><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">nvmeInit.c</span></font></span><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"><o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo3" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore">-<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Removed
<span class="SpellE">NVMeSwap</span>(),<span class="SpellE">NVMeQuickSort</span>(),<span class="SpellE">NVMeMsixMapCores</span>() as they’re no longer used<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo3" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore">-<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Changes to
<span class="SpellE">NVMeMsiMapCores</span>():<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; MARGIN-LEFT: 1in; mso-list: l2 level2 lfo3" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Courier New"><span style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Courier New'"><span style="mso-list: Ignore">o<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Set the initial core table
<span class="SpellE">MsgID</span> to the <span class="SpellE">CplQ</span> number, this is needed so that we can determine the
<span class="SpellE">CplQ</span> from the <span class="SpellE">MsgId</span> during learning mode while in the DPC/ISR<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; MARGIN-LEFT: 1in; mso-list: l2 level2 lfo3" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Courier New"><span style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Courier New'"><span style="mso-list: Ignore">o<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">The other changes are just code simplifications
<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo3" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore">-<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Changed
<span class="SpellE">NVMeCompleteResMapTbl</span>() to use <span class="SpellE">NVMeMsiMapCores</span>() for either MSI or MSIX<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo3" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore">-<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Changed NVMeMapCore2Queue():<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; MARGIN-LEFT: 1in; mso-list: l2 level2 lfo3" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Courier New"><span style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Courier New'"><span style="mso-list: Ignore">o<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">We now check if we’re in learning mode, if not then we simply look up the
queue <span class="SpellE">num</span> from the core table<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; MARGIN-LEFT: 1in; mso-list: l2 level2 lfo3" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Courier New"><span style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Courier New'"><span style="mso-list: Ignore">o<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">If we’re in learning mode (based on a simple count of how many cores we’ve
learned <span class="SpellE">vs</span> total available cores), then we use the core number that we’re on (that we’re learning) + 1, the +1 is because all queue numbers are core+1 by our convention<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo3" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore">-<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Change in
<span class="SpellE">NVMeAllocIoQueues</span>() to effectively disable learning mode if we only have 1 queue (it makes no sense and actually causes problems for learning mode if we don’t do this).<span style="mso-spacerun: yes">
</span>We disable it by pretending that we’ve already learned all the cores<o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"><o:p> </o:p></span></font></p>
<p class="MsoNormal"><span class="SpellE"><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">nvmeStd.c</span></font></span><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">:<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo4" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore">-<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">In
<span class="SpellE">NVMePassiveInitialize</span>(), disable learning mode is we’re sharing one MSI over multiple queues, same reasons as when we
<span class="SpellE">hae</span> one queue<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo4" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore">-<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">In
<span class="SpellE">NVMeInitialize</span>():<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; MARGIN-LEFT: 1in; mso-list: l0 level2 lfo4" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Courier New"><span style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Courier New'"><span style="mso-list: Ignore">o<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Enable DPC
<span class="SpellE">perf</span> opt per Msft recommendation to steer <span class="SpellE">
stoport</span> completion DPCs back to the submitting core<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo4" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore">-<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">In
<span class="SpellE">NVMeStartIo</span>() – bug fix unrelated to learning mode but I found it while debugging learning mode (via BSOD).<span style="mso-spacerun: yes">
</span>You can’t return FALSE from this function per MSDN docs.<span style="mso-spacerun: yes">
</span>Always return TRUE<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo4" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore">-<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">In
<span class="SpellE">IoCompletionDpcRoutine</span>() and same changes in the ISR when its enabled for completions instead:<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; MARGIN-LEFT: 1in; mso-list: l0 level2 lfo4" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Courier New"><span style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Courier New'"><span style="mso-list: Ignore">o<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Merged Alex’s
<span class="SpellE">bugfixes</span> in with my changes<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; MARGIN-LEFT: 1in; mso-list: l0 level2 lfo4" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Courier New"><span style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Courier New'"><span style="mso-list: Ignore">o<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Removed the DBG related code for checking core affiliation<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; MARGIN-LEFT: 1in; mso-list: l0 level2 lfo4" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Courier New"><span style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Courier New'"><span style="mso-list: Ignore">o<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Where we decide which queues to check, I set a Boolean to determine if we’re
learning or not to FALSE if we’re in shared mode because we disable learning mode during
<span class="SpellE">init</span> if that’s the case<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; MARGIN-LEFT: 1in; mso-list: l0 level2 lfo4" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Courier New"><span style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Courier New'"><span style="mso-list: Ignore">o<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">If we’re not shared, the learning Boolean is set based on how many cores
we’ve learned and whether the <span class="SpellE">MsgId</span> is >0 as <span class="SpellE">
MsgId</span> 0 is admin and we exclude that from learning mode<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; MARGIN-LEFT: 1in; mso-list: l0 level2 lfo4" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Courier New"><span style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Courier New'"><span style="mso-list: Ignore">o<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">If we’re not learning then, we only search the queue specified in the MMT<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; MARGIN-LEFT: 1in; mso-list: l0 level2 lfo4" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Courier New"><span style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Courier New'"><span style="mso-list: Ignore">o<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">If we are learning, we know the queue # is the same as the
<span class="SpellE">MsdId</span> because we <span class="SpellE">init’d</span> it that way<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; MARGIN-LEFT: 1in; mso-list: l0 level2 lfo4" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Courier New"><span style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Courier New'"><span style="mso-list: Ignore">o<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">The ‘learning’ happens in a new
<span class="SpellE">coniditonal</span> just after we determine we have an <span class="SpellE">
srbExt</span>.<span style="mso-spacerun: yes"> </span>It works as follows:<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; MARGIN-LEFT: 1.5in; mso-list: l0 level3 lfo4" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Wingdings"><span style="FONT-FAMILY: Wingdings; FONT-SIZE: 10pt; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore">§<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Grab the
<span class="SpellE">startIO</span> lock as we’re sharing the core table with <span class="SpellE">
startIO</span> and during learning mode we’re not yet assured that start/complete are on the same core.<span style="mso-spacerun: yes">
</span>Note the lock is only taken on IOs during learning mode (the first few IOs)<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; MARGIN-LEFT: 1.5in; mso-list: l0 level3 lfo4" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Wingdings"><span style="FONT-FAMILY: Wingdings; FONT-SIZE: 10pt; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore">§<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Lookup the CT entry for the core that we’re completing on and set its queue
numbers to queue number that was associated with the IO that just completed.<span style="mso-spacerun: yes">
</span>This assures that the next lookup in the table for this core # will complete on this, the same, core.<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; MARGIN-LEFT: 1.5in; mso-list: l0 level3 lfo4" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Wingdings"><span style="FONT-FAMILY: Wingdings; FONT-SIZE: 10pt; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore">§<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Increment our learning counter which will direct the next IO to the next
core<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo4" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore">-<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri">Unrelated changes to
<span class="SpellE">NVMeProcessIoctl</span>(): A few changes were made here as the routine assumed every IOCTL we’d get would be a PT IOCTL making it difficult for venders to add additional private IOCTLs.<span style="mso-spacerun: yes">
</span>Just moved things around a bit as we had to add one to our product specific code.<span style="mso-spacerun: yes">
</span>No other changes here other than placing IOCTL specific code in the correct case block<o:p></o:p></span></font></p>
<p style="TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo4" class="MsoListParagraph">
<![if !supportLists]><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><span style="mso-list: Ignore">-<font size="1" face="Times New Roman"><span style="FONT: 7pt 'Times New Roman'">
</span></font></span></span></font><![endif]><font size="2"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"><o:p> </o:p></span></font></p>
<p class="MsoNormal"><font size="2" face="Calibri"><span style="FONT-SIZE: 10pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri"><o:p> </o:p></span></font></p>
<p class="MsoNormal"><font size="2" face="Tahoma"><span style="FONT-FAMILY: 'Tahoma','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes">____________________________________</span></font><font size="3" face="Arial"><span style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"><o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="2" face="Tahoma"><span style="FONT-FAMILY: 'Tahoma','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes">Paul Luse<br>
Sr. Staff Engineer<br>
PCG Server Software Engineering <br>
Desk: 480.554.3688, Mobile: 480.334.4630</span></font><font size="3" face="Arial"><span style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"><o:p></o:p></span></font></p>
<p class="MsoNormal"><font size="2" face="Calibri"><span style="FONT-SIZE: 11pt"><o:p> </o:p></span></font></p>
</div>
</body>
</html>