<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 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@SimSun";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
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:12.0pt;
        font-family:"Times New Roman",serif;}
span.EmailStyle17
        {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:1084494528;
        mso-list-type:hybrid;
        mso-list-template-ids:-1942436792 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-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
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="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Ray,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">I applied this change to an internal desktop machine and did below tests:<o:p></o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo1"><![if !supportLists]><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">boot it to shell
<o:p></o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo1"><![if !supportLists]><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><span style="mso-list:Ignore">2.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">reboot the system to shell.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Eric<o:p></o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Ni, Ray
<br>
<b>Sent:</b> Wednesday, January 15, 2020 3:43 PM<br>
<b>To:</b> devel@edk2.groups.io; Dong, Eric <eric.dong@intel.com><br>
<b>Cc:</b> Laszlo Ersek <lersek@redhat.com><br>
<b>Subject:</b> RE: [edk2-devel] [PATCH] UefiCpuPkg/Library/MpInitLib: Remove BSP index == 0 Assumption.<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:black">Eric,</span><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"><br>
<span style="color:black">What unit test was done for this patch?</span><br>
<br>
<span style="color:purple">> -----Original Message-----</span><br>
<span style="color:purple">> From: <a href="mailto:devel@edk2.groups.io">devel@edk2.groups.io</a> <<a href="mailto:devel@edk2.groups.io">devel@edk2.groups.io</a>> On Behalf Of Dong, Eric</span><br>
<span style="color:purple">> Sent: Wednesday, January 15, 2020 2:07 PM</span><br>
<span style="color:purple">> To: <a href="mailto:devel@edk2.groups.io">devel@edk2.groups.io</a></span><br>
<span style="color:purple">> Cc: Ni, Ray <<a href="mailto:ray.ni@intel.com">ray.ni@intel.com</a>>; Laszlo Ersek <<a href="mailto:lersek@redhat.com">lersek@redhat.com</a>></span><br>
<span style="color:purple">> Subject: [edk2-devel] [PATCH] UefiCpuPkg/Library/MpInitLib: Remove BSP index == 0 Assumption.</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> REF: <a href="https://bugzilla.tianocore.org/show_bug.cgi?id=2392">https://bugzilla.tianocore.org/show_bug.cgi?id=2392</a></span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> Current code implementation assumes BSP index is 0 at the begin.</span><br>
<span style="color:purple">> This code change removes this assumption. It get BSP index from</span><br>
<span style="color:purple">> the saved data structure if it existed.</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> Cc: Ray Ni <<a href="mailto:ray.ni@intel.com">ray.ni@intel.com</a>></span><br>
<span style="color:purple">> Cc: Laszlo Ersek <<a href="mailto:lersek@redhat.com">lersek@redhat.com</a>></span><br>
<span style="color:purple">> Signed-off-by: Eric Dong <<a href="mailto:eric.dong@intel.com">eric.dong@intel.com</a>></span><br>
<span style="color:purple">> ---</span><br>
<span style="color:purple">>  UefiCpuPkg/Library/MpInitLib/MpLib.c | 10 ++++++----</span><br>
<span style="color:purple">>  1 file changed, 6 insertions(+), 4 deletions(-)</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpInitLib/MpLib.c</span><br>
<span style="color:purple">> index 6ec9b172b8..922c87b766 100644</span><br>
<span style="color:purple">> --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c</span><br>
<span style="color:purple">> +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c</span><br>
<span style="color:purple">> @@ -636,7 +636,7 @@ ApWakeupFunction (</span><br>
<span style="color:purple">>        //   to initialize AP in InitConfig path.</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>        // NOTE: IDTR.BASE stored in CpuMpData->CpuData[0].VolatileRegisters points to a different IDT shared by all APs.</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>        //</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> -      RestoreVolatileRegisters (&CpuMpData->CpuData[0].VolatileRegisters, FALSE);</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> +      RestoreVolatileRegisters (&CpuMpData->CpuData[CpuMpData->BspNumber].VolatileRegisters, FALSE);</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>        InitializeApData (CpuMpData, ProcessorNumber, BistData, ApTopOfStack);</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>        ApStartupSignalBuffer = CpuMpData->CpuData[ProcessorNumber].StartupApSignal;</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> @@ -1615,6 +1615,7 @@ MpInitLibInitialize (</span><br>
<span style="color:purple">>    UINTN                    ApResetVectorSize;</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>    UINTN                    BackupBufferAddr;</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>    UINTN                    ApIdtBase;</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> +  UINT64                   BspTopOfStack;</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>    OldCpuMpData = GetCpuMpDataFromGuidedHob ();</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>    if (OldCpuMpData == NULL) {</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> @@ -1677,7 +1678,7 @@ MpInitLibInitialize (</span><br>
<span style="color:purple">>    CpuMpData->BackupBufferSize = ApResetVectorSize;</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>    CpuMpData->WakeupBuffer     = (UINTN) -1;</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>    CpuMpData->CpuCount         = 1;</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> -  CpuMpData->BspNumber        = 0;</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> +  CpuMpData->BspNumber        = OldCpuMpData != NULL ? OldCpuMpData->BspNumber : 0;</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>    CpuMpData->WaitEvent        = NULL;</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>    CpuMpData->SwitchBspFlag    = FALSE;</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>    CpuMpData->CpuData          = (CPU_AP_DATA *) (CpuMpData + 1);</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> @@ -1704,11 +1705,12 @@ MpInitLibInitialize (</span><br>
<span style="color:purple">>    // Don't pass BSP's TR to APs to avoid AP init failure.</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>    //</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>    VolatileRegisters.Tr = 0;</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> -  CopyMem (&CpuMpData->CpuData[0].VolatileRegisters, &VolatileRegisters, sizeof (VolatileRegisters));</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> +  CopyMem (&CpuMpData->CpuData[CpuMpData->BspNumber].VolatileRegisters, &VolatileRegisters, sizeof</span><br>
<span style="color:purple">> (VolatileRegisters));</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>    //</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>    // Set BSP basic information</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>    //</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> -  InitializeApData (CpuMpData, 0, 0, CpuMpData->Buffer + ApStackSize);</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> +  BspTopOfStack = CpuMpData->Buffer + (CpuMpData->BspNumber + 1) * CpuMpData->CpuApStackSize;</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> +  InitializeApData (CpuMpData, CpuMpData->BspNumber, 0, BspTopOfStack);</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>    //</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>    // Save assembly code information</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">>    //</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> --</span><br>
<span style="color:purple">> 2.23.0.windows.1</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> -=-=-=-=-=-=</span><br>
<span style="color:purple">> Groups.io Links: You receive all messages sent to this group.</span><br>
<span style="color:purple">> </span><br>
<span style="color:purple">> View/Reply Online (#53263): <a href="https://edk2.groups.io/g/devel/message/53263">https://edk2.groups.io/g/devel/message/53263</a></span><br>
<span style="color:purple">> Mute This Topic: <a href="https://groups.io/mt/69712223/1712937">https://groups.io/mt/69712223/1712937</a></span><br>
<span style="color:purple">> Group Owner: <a href="mailto:devel+owner@edk2.groups.io">devel+owner@edk2.groups.io</a></span><br>
<span style="color:purple">> Unsubscribe: <a href="https://edk2.groups.io/g/devel/unsub">https://edk2.groups.io/g/devel/unsub</a>  [ray.ni@intel.com]</span><br>
<span style="color:purple">> -=-=-=-=-=-=</span><o:p></o:p></span></p>
</div>
</div>
</body>
</html>

<div width="1" style="color:white;clear:both">_._,_._,_</div>
<hr>
Groups.io Links:<p>


You receive all messages sent to this group.



<p>

<a target="_blank" href="https://edk2.groups.io/g/devel/message/53265">View/Reply Online (#53265)</a> |


  


|


  
    <a target="_blank" href="https://groups.io/mt/69712223/1813853">Mute This Topic</a>
  

| <a href="https://edk2.groups.io/g/devel/post">New Topic</a><br>



<br>

<a href="https://edk2.groups.io/g/devel/editsub/1813853">Your Subscription</a> |
<a href="mailto:devel+owner@edk2.groups.io">Contact Group Owner</a> |

<a href="https://edk2.groups.io/g/devel/unsub">Unsubscribe</a>

 [edk2-devel-archive@redhat.com]<br>
<div width="1" style="color:white;clear:both">_._,_._,_</div>