From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mx.groups.io with SMTP id smtpd.web11.2358.1660107968721971219 for ; Tue, 09 Aug 2022 22:06:09 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=L53Lf0sP; spf=pass (domain: intel.com, ip: 192.55.52.120, mailfrom: ray.ni@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1660107968; x=1691643968; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=VHT+S+utwpXv1otGED0ExYVVTLS5qRaKTB4LHSdEl8M=; b=L53Lf0sPQ2ntKv3MEbDR0Sys0FZvBdGips+kXOZqEMUexVeAP1MEu/qE dNEEI69btJY20V6mTMaLqZ8YzJ1tXcmNqkiuJ01e1+qOWTlmf20wq711U 6ZDCQIkeQ6D5rjrr464yKdyKIy2kNp4q++iDYz28YO+9s6Of+nZYHBwij cw0eJN8VukPyl7AnZPYR29jkXYRMy+oAW4RLXb49TEfIdsdWmDo9LoxO0 tXvjoWQNQm8neNYAC7rClubIOClLKg2IfcLn5JtaYuT7YfmdaC/KYfASe d4237/t48WY+zYVF6DKgcCHB8frRO8iPARRnl0Z/B7izVPyOFB9tINVbr g==; X-IronPort-AV: E=McAfee;i="6400,9594,10434"; a="289752297" X-IronPort-AV: E=Sophos;i="5.93,226,1654585200"; d="scan'208";a="289752297" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Aug 2022 22:06:08 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,226,1654585200"; d="scan'208";a="781110855" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by orsmga005.jf.intel.com with ESMTP; 09 Aug 2022 22:06:07 -0700 Received: from orsmsx603.amr.corp.intel.com (10.22.229.16) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Tue, 9 Aug 2022 22:06:07 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28 via Frontend Transport; Tue, 9 Aug 2022 22:06:07 -0700 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (104.47.55.109) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.28; Tue, 9 Aug 2022 22:06:07 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YaUP7sxQnWaDLiqhL4yHXbEWfiBRGCwcjr3miijtAOVmeCenvnFCzZm0dCi9kkVIP22uHBqsPNYEpuWF7Nfw+sNISJfIqYf9RDyAthzLjQL4N+b42EttIKmK3/jrDKpCNu/TvMe9leeL6xMoY30BtfPqGJ7s2LmklovMstwSE4bfIWzeDZX/PtwDqUZsrTamAAEZ1psTR+ctgMMHSIng/rZaGIDM3WpTSLNx7/jSMOEviRwWR55emejKQEgolvPLM+Y7XsAg+Vjz7BzPJbw17F+wbQZyP8Zx0kK2knGkXvqUsy3pLM/t0vdtgsRVU2RLRXrC07zZIiHAQq9kT4IB7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=61yIU5gJJ1dIiYxNO3756TyYUZDuVq81cadwF0voEEw=; b=kQl1ewsHZhG4mgVzNy5qgbcBDvDL3eYcqmodkLjHWlb2wmEWHN0bGc5WoqPwggBnrdNUCaZ+bM9oy3E14gknqSxBQsVs9XH54r7psUT5KOMfoBPIZNLjAxU22TkktpqUfG+daDeENs7R6CsZwj+koK+plmwc0b9qjI8t1IgewQUaWXrHE7jQwcIAcwT1x4AdvS+Ijueh4Lz+8/JkE9xpV7WJPBhJSXE3TGC9YwxGbZYlp8HZJEIiyaPVAg6FdF35y2/VaztEHKtbvkkMNICGkXj18DFXqe3+pe4htWkoWTFEOM9nJAfl0/Sryb+xP01BGp1CUXmAn65oQgYxNfNYZA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from MWHPR11MB1631.namprd11.prod.outlook.com (2603:10b6:301:10::10) by DM5PR11MB0026.namprd11.prod.outlook.com (2603:10b6:4:62::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.14; Wed, 10 Aug 2022 05:06:05 +0000 Received: from MWHPR11MB1631.namprd11.prod.outlook.com ([fe80::991b:97a0:7836:5174]) by MWHPR11MB1631.namprd11.prod.outlook.com ([fe80::991b:97a0:7836:5174%10]) with mapi id 15.20.5504.020; Wed, 10 Aug 2022 05:06:05 +0000 From: "Ni, Ray" To: "Lin, JackX" , "devel@edk2.groups.io" CC: "Chiu, Chasel" , "Dong, Eric" , "Yao, Jiewen" , "Chaganty, Rangasai V" , "Kuo, Donald" , "Kumar, Chandana C" , "Palakshareddy, Lavanya C" , "Palakshareddy, Lavanya C" Subject: Re: [edk2-platforms: PATCH] Modify processor _UID ordering by CPU default fused in MADT Thread-Topic: [edk2-platforms: PATCH] Modify processor _UID ordering by CPU default fused in MADT Thread-Index: AQHYrHHFvLo0txuq4E2xjlu0rLZHF62nlHSw Date: Wed, 10 Aug 2022 05:06:04 +0000 Message-ID: References: <20220810042849.1740-1-jackx.lin@intel.com> In-Reply-To: <20220810042849.1740-1-jackx.lin@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 8267733f-3539-4365-4fb4-08da7a8e0725 x-ms-traffictypediagnostic: DM5PR11MB0026:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: fKGQK18wvg8XWaFHzUofZ8i6tq50SIsmVkS1dK//IKWVItgPy+94oONtZDvXNZ3VNLWePwf+NELXpo1cdoH1V6yiutwSzhqCQILzE0wvIhPsP5DB5xOcoPKVfPHPvrCctRiadFuEOQKCdnZHn4AgaEjehigPfr7RJ6R/xa2FJMoYrJwuL7+lFleLGvPxSZkC+7NxfwpgB9zmvP9S/uaZc2osV5W8Tokh38VB6GpPETZfl+Iu9rMyQCXEVAxBdUIm7CWO/HL9SNtQ/FKPolTpeuLRBGXLbVmdN44QcDYmf5zqjL1TNZAHLgn2PBtyC1xVD6qG5mLCY/VjITRGfhjk1E4c2zbKN8eUCwoe4wkVW65BH+NljISj5mBdbhzkb050LJviOzEgckKfme3PX0SoyTG23F8bDrOZ6hFyQgbdGFVuAIe+JlmYMZUt6E6If6Ry3E/t9GWdae/r2yqVkPLxALoulHtStMRIS900e6Az5iAjPSZph+aRy00ExkZ4qDpHKc8rbIqY9AVO31NjQBLO/BjU6bvc2fgY1oAO2uIZdXsELwj0boWHBjyMloECoKOE2yj4zJIj9b4OKfWwGjS20W6czO1hvA3w/QkxaCvimjO+YfyyEKCtd+zWzRkNZtBEzYCkWtqeMZxNqVtRGr6Dwqd9UT1CbYeezvoYmAGqwLWGyyxp2nOl+dz40oOKbr/lNkyo8UiGfXws72ekH9IcGSqKrt2MVepHFNvyz6iQLdHFqhifiDkBf4ZHv3g4n15kpHhTG2eHg9IuF6zHUKD/COodwoXnMwIWQ7SnBNCrg3Antneh7wKP2wxjBwfhL1My x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR11MB1631.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(366004)(396003)(39860400002)(376002)(346002)(136003)(76116006)(66946007)(66556008)(66476007)(66446008)(64756008)(8676002)(4326008)(5660300002)(316002)(54906003)(55016003)(8936002)(52536014)(30864003)(2906002)(38100700002)(122000001)(33656002)(86362001)(82960400001)(38070700005)(478600001)(26005)(6506007)(7696005)(9686003)(41300700001)(71200400001)(110136005)(19627235002)(83380400001)(53546011)(107886003)(186003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?BmJfhTjfK8qw1goXCrwf82E45wvH7NasglvZn6/0u+WYWkJiRhaIr5ckkPtI?= =?us-ascii?Q?1BUOhxTNcED/4Q9OEdbrXcJkuZFQ19omwxLuZsawlKWQIXb7BsPbXGFPh0M4?= =?us-ascii?Q?UCUKBsK3HvY718TfrgpHYgEDj3lxcbkLGMvML18KUw08JCE+nGPMD+B7eJFZ?= =?us-ascii?Q?Ir4ArTUwmDs5cKhnQLnBcdTS2rzmMFiul16Q8+RTpCqrRUXnARZyc4KJw6WB?= =?us-ascii?Q?4Wi6HL9LrOm5UuQPY4slY1ZvmgBs0zLSPnVophU+iHGUE7LxgjjWsTCURDGC?= =?us-ascii?Q?HE4c6YEkmZTkPQug+Mj5wlxsa9W9l9H+sfHTEUFcDMPyz0D3B+gkEZhzqCja?= =?us-ascii?Q?u/WZorXwLyAYqGHNF2syP75xAZ6yfPLl+dGJ2oXl0yoQjnZw10DJ4eoGEO/K?= =?us-ascii?Q?aSvhZdpXendbGeydLl+NiqMoyee6J4fTVUEzngg2wBYxPPtsWFjedxp4KCO0?= =?us-ascii?Q?Tnfq63YzCeGF2GzWl+g/xVV/pK/B8p3kyACaQbtEUQpHpgLQUO6pAfme1SM/?= =?us-ascii?Q?fXIP7WInHeobw6G3aAermUZ3w7MlEKajLpVGWTa7Vt7xXWNuGBPfLqsPRIlr?= =?us-ascii?Q?a6OdQ0gmb42F3PfxRf6G6gykcU1wb1I+vxMbpeKDMg/WMuF4yX/daC0KPBye?= =?us-ascii?Q?O76E+3vx9XWuKjLAqU2Sl+6l0HsQTUF1UiBj2h5EqwGrgYu8v9uyCov9fReI?= =?us-ascii?Q?AFFBykBCpLvLKjLCMXTB3lqREu6DPUnR5+ZinKYujh+CO8EHSH4aAfFZbZqH?= =?us-ascii?Q?8bP62+BVB1oEDmfeUp06ATBSvumLExS4E6HMFXxjyCGSHmXfXVBWoinTntzE?= =?us-ascii?Q?wN3nQ+r/erlN5XTYFESNJi9YFZvSjpeAkLe7HN29DS6hJo6oE7DKn5Hel0aQ?= =?us-ascii?Q?jO+Jn/41li4X2OlPbqlv9Fb5Cbc6yStFJ6MG0R+JvTRX+MAbo5TennTc1Jjn?= =?us-ascii?Q?ErLRLj9GZgpWHe6VQE0FgcqVvnGJxvGKuirtdhSRfLaBNUkn2boDsm+dEgl0?= =?us-ascii?Q?PwmNz5wg0vzoaYbdyiKyDF6fWQLP16JncNOd+XhXuy0ysWNOuhnCV9gG/1bE?= =?us-ascii?Q?sY48uFhpYUSPr2ehwdtyS+tsDz57buFmKOxnqazf2XbMs7PoekuF8hUMXAAw?= =?us-ascii?Q?WVvj4Y86KFN5sTUuJHPfSvD00vO59hrstGtUkOpmuAf0QwqIoi0c+Sf55G4j?= =?us-ascii?Q?sXsv3DN8Drh5XgLqmiw0/cgUbetGnAr85FQXzNvGxt3f7b8OfFoxUBkve4h9?= =?us-ascii?Q?vXpRKYeZbJssYHD71V4OdttgEGsBHvQUoblnOHBARRNj1f8KWRHBgrbP9eg+?= =?us-ascii?Q?8/0OVSK14fUK82gYeT2q/LXr5Cqkfm721Iqrua362IA3KGIERVBj4edNTzSm?= =?us-ascii?Q?LNrmjL6HC17ceKjhRMwxYFcTH3r6akHq0vtbsnp0W9IVmGYnJKcHrs3TOog6?= =?us-ascii?Q?PJ8rV/rj3ErTl8R9wHpedleqEwLIH+pt8VQyVumspFK1p5n90J7maRs2r5I+?= =?us-ascii?Q?sINXlLeA91vytrNw4OYHyOwTSMBDtcsc727FQ1HUsMf8bZ5jkSOsnQy03TTa?= =?us-ascii?Q?GeMaM6HKTxBDE+5iZ4Y=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR11MB1631.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8267733f-3539-4365-4fb4-08da7a8e0725 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Aug 2022 05:06:04.9551 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: njnv7MbUzEiVNTZFs8+Kcvp2SMx8g89Jo6W+BkUS8/VrPlwyqNUss91u5OKJhHht798LcyJcpHUipGggd8K4Mg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR11MB0026 Return-Path: ray.ni@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Thanks! Reviewed-by: Ray Ni > -----Original Message----- > From: Lin, JackX > Sent: Wednesday, August 10, 2022 12:29 PM > To: devel@edk2.groups.io > Cc: Lin, JackX ; Lin, JackX ; C= hiu, > Chasel ; Dong, Eric ; Yao, > Jiewen ; Ni, Ray ; Chaganty, > Rangasai V ; Kuo, Donald > ; Kumar, Chandana C > ; Palakshareddy; Palakshareddy, Lavanya C > > Subject: [edk2-platforms: PATCH] Modify processor _UID ordering by CPU > default fused in MADT >=20 > BIOS should not reordering cpu processor_uid >=20 > Signed-off-by: JackX Lin > Cc: Chasel Chiu > Cc: Dong Eric > Cc: Jiewen Yao > Cc: Ray Ni > Cc: Rangasai V Chaganty > Cc: Donald Kuo > Cc: Chandana C Kumar > Cc: Palakshareddy, Lavanya C > Cc: JackX Lin > --- > Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c | 183 > ++++++++++++++++++++++++++++++++++++++++------------------------------ > -------------------------------------------------------------------------= --------------------- > ------------------- > 1 file changed, 40 insertions(+), 143 deletions(-) >=20 > diff --git a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > index 5a282e7c18..f134c8a58f 100644 > --- a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > +++ b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > @@ -57,38 +57,9 @@ BOOLEAN mForceX2ApicId; > BOOLEAN mX2ApicEnabled; >=20 > EFI_MP_SERVICES_PROTOCOL *mMpService; > -BOOLEAN mCpuOrderSorted; > -EFI_CPU_ID_ORDER_MAP *mCpuApicIdOrderTable =3D NULL; > UINTN mNumberOfCpus =3D 0; > UINTN mNumberOfEnabledCPUs =3D 0; >=20 > - > -/** > - The function is called by PerformQuickSort to compare int values. > - > - @param[in] Left The pointer to first buffer. > - @param[in] Right The pointer to second buffer. > - > - @return -1 Buffer1 is less than Buffer2. > - @return 1 Buffer1 is greater than Buffer2. > - > -**/ > -INTN > -EFIAPI > -ApicIdCompareFunction ( > - IN CONST VOID *Left, > - IN CONST VOID *Right > - ) > -{ > - UINT32 LeftApicId; > - UINT32 RightApicId; > - > - LeftApicId =3D ((EFI_CPU_ID_ORDER_MAP *) Left)->ApicId; > - RightApicId =3D ((EFI_CPU_ID_ORDER_MAP *) Right)->ApicId; > - > - return (LeftApicId > RightApicId)? 1 : (-1); > -} > - > /** > Print Cpu Apic ID Table >=20 > @@ -116,7 +87,8 @@ DebugDisplayReOrderTable ( > EFI_STATUS > AppendCpuMapTableEntry ( > IN VOID *ApicPtr, > - IN UINT32 LocalApicCounter > + IN UINT32 LocalApicCounter, > + IN EFI_CPU_ID_ORDER_MAP *CpuApicIdOrderTable > ) > { > EFI_STATUS Status; > @@ -131,9 +103,9 @@ AppendCpuMapTableEntry ( >=20 > if(Type =3D=3D EFI_ACPI_6_3_PROCESSOR_LOCAL_APIC) { > if(!mX2ApicEnabled) { > - LocalApicPtr->Flags =3D > (UINT8)mCpuApicIdOrderTable[LocalApicCounter].Flags; > - LocalApicPtr->ApicId =3D > (UINT8)mCpuApicIdOrderTable[LocalApicCounter].ApicId; > - LocalApicPtr->AcpiProcessorUid =3D > (UINT8)mCpuApicIdOrderTable[LocalApicCounter].AcpiProcessorUid; > + LocalApicPtr->Flags =3D > (UINT8)CpuApicIdOrderTable[LocalApicCounter].Flags; > + LocalApicPtr->ApicId =3D > (UINT8)CpuApicIdOrderTable[LocalApicCounter].ApicId; > + LocalApicPtr->AcpiProcessorUid =3D > (UINT8)CpuApicIdOrderTable[LocalApicCounter].AcpiProcessorUid; > } else { > LocalApicPtr->Flags =3D 0; > LocalApicPtr->ApicId =3D 0xFF; > @@ -142,9 +114,9 @@ AppendCpuMapTableEntry ( > } > } else if(Type =3D=3D EFI_ACPI_6_3_PROCESSOR_LOCAL_X2APIC) { > if(mX2ApicEnabled) { > - LocalX2ApicPtr->Flags =3D > (UINT8)mCpuApicIdOrderTable[LocalApicCounter].Flags; > - LocalX2ApicPtr->X2ApicId =3D > mCpuApicIdOrderTable[LocalApicCounter].ApicId; > - LocalX2ApicPtr->AcpiProcessorUid =3D > mCpuApicIdOrderTable[LocalApicCounter].AcpiProcessorUid; > + LocalX2ApicPtr->Flags =3D > (UINT8)CpuApicIdOrderTable[LocalApicCounter].Flags; > + LocalX2ApicPtr->X2ApicId =3D > CpuApicIdOrderTable[LocalApicCounter].ApicId; > + LocalX2ApicPtr->AcpiProcessorUid =3D > CpuApicIdOrderTable[LocalApicCounter].AcpiProcessorUid; > } else { > LocalX2ApicPtr->Flags =3D 0; > LocalX2ApicPtr->X2ApicId =3D (UINT32)-1; > @@ -159,32 +131,25 @@ AppendCpuMapTableEntry ( >=20 > } >=20 > +/** > + Collect all processors information and create a Cpu Apic Id table. > + > + @param[in] CpuApicIdOrderTable Buffer to store information of C= pu. > +**/ > EFI_STATUS > -SortCpuLocalApicInTable ( > - VOID > +CreateCpuLocalApicInTable ( > + IN EFI_CPU_ID_ORDER_MAP *CpuApicIdOrderTable > ) > { > EFI_STATUS Status; > EFI_PROCESSOR_INFORMATION ProcessorInfoBuffer; > UINT32 Index; > UINT32 CurrProcessor; > - UINT32 BspApicId; > - EFI_CPU_ID_ORDER_MAP TempVal; > EFI_CPU_ID_ORDER_MAP *CpuIdMapPtr; > - UINT32 CoreThreadMask; > - EFI_CPU_ID_ORDER_MAP *TempCpuApicIdOrderTable; > UINT32 Socket; >=20 > - Index =3D 0; > Status =3D EFI_SUCCESS; >=20 > - if (mCpuOrderSorted) { > - return Status; > - } > - > - TempCpuApicIdOrderTable =3D AllocateZeroPool (mNumberOfCpus * sizeof > (EFI_CPU_ID_ORDER_MAP)); > - CoreThreadMask =3D (UINT32) ((1 << mNumOfBitShift) - 1); > - > for (CurrProcessor =3D 0, Index =3D 0; CurrProcessor < mNumberOfCpus; > CurrProcessor++, Index++) { > Status =3D mMpService->GetProcessorInfo ( > mMpService, > @@ -192,7 +157,7 @@ SortCpuLocalApicInTable ( > &ProcessorInfoBuffer > ); >=20 > - CpuIdMapPtr =3D (EFI_CPU_ID_ORDER_MAP *) > &TempCpuApicIdOrderTable[Index]; > + CpuIdMapPtr =3D (EFI_CPU_ID_ORDER_MAP *) > &CpuApicIdOrderTable[Index]; > if ((ProcessorInfoBuffer.StatusFlag & PROCESSOR_ENABLED_BIT) !=3D 0)= { > CpuIdMapPtr->ApicId =3D (UINT32)ProcessorInfoBuffer.ProcessorId; > CpuIdMapPtr->Thread =3D ProcessorInfoBuffer.Location.Thread; > @@ -214,96 +179,26 @@ SortCpuLocalApicInTable ( > } //end if PROC ENABLE > } //end for CurrentProcessor >=20 > - //keep for debug purpose > - DEBUG ((DEBUG_INFO, "::ACPI:: APIC ID Order Table Init. > CoreThreadMask =3D %x, mNumOfBitShift =3D %x\n", CoreThreadMask, > mNumOfBitShift)); > - DebugDisplayReOrderTable (TempCpuApicIdOrderTable); > - > // > // Get Bsp Apic Id > // > - BspApicId =3D GetApicId (); > - DEBUG ((DEBUG_INFO, "BspApicId - 0x%x\n", BspApicId)); > + DEBUG ((DEBUG_INFO, "BspApicId - 0x%x\n", GetApicId ())); > + >=20 > // > - //check to see if 1st entry is BSP, if not swap it > + // Fill in AcpiProcessorUid. > // > - if (TempCpuApicIdOrderTable[0].ApicId !=3D BspApicId) { > - for (Index =3D 0; Index < mNumberOfCpus; Index++) { > - if ((TempCpuApicIdOrderTable[Index].Flags =3D=3D 1) && > (TempCpuApicIdOrderTable[Index].ApicId =3D=3D BspApicId)) { > - CopyMem (&TempVal, &TempCpuApicIdOrderTable[Index], sizeof > (EFI_CPU_ID_ORDER_MAP)); > - CopyMem (&TempCpuApicIdOrderTable[Index], > &TempCpuApicIdOrderTable[0], sizeof (EFI_CPU_ID_ORDER_MAP)); > - CopyMem (&TempCpuApicIdOrderTable[0], &TempVal, sizeof > (EFI_CPU_ID_ORDER_MAP)); > - break; > - } > - } > - > - if (mNumberOfCpus <=3D Index) { > - DEBUG ((DEBUG_ERROR, "Asserting the SortCpuLocalApicInTable Index > Bufferflow\n")); > - return EFI_INVALID_PARAMETER; > - } > - } > - > - /* > - 1. Sort TempCpuApicIdOrderTable, > - Sort it by using ApicId from minimum to maximum (Socket0 to Sock= etN), > and the BSP must be in the fist location of the table. > - > - 2. Sort and map all the enabled threads after BSP in CpuApicIdOrde= rTable > - > - 3. Threads that are not enabled are placed in the bottom of > CpuApicIdOrderTable > - > - 4. Re-assign AcpiProcessorId for AcpiProcessorUid uses purpose. > - */ > - > - PerformQuickSort ((TempCpuApicIdOrderTable + 1), (mNumberOfCpus - 1), > sizeof (EFI_CPU_ID_ORDER_MAP), (SORT_COMPARE) > ApicIdCompareFunction); > - > - for (CurrProcessor =3D 0, Index =3D 0; Index < mNumberOfCpus; Index++)= { > - if ((TempCpuApicIdOrderTable[Index].Thread) =3D=3D 0) { > - CopyMem (&mCpuApicIdOrderTable[CurrProcessor], > &TempCpuApicIdOrderTable[Index], sizeof (EFI_CPU_ID_ORDER_MAP)); > - CurrProcessor++; > - } > - } > - > - for (Index =3D 0; Index < mNumberOfCpus; Index++) { > - if ((TempCpuApicIdOrderTable[Index].Thread) =3D=3D 1) { > - CopyMem (&mCpuApicIdOrderTable[CurrProcessor], > &TempCpuApicIdOrderTable[Index], sizeof (EFI_CPU_ID_ORDER_MAP)); > - CurrProcessor++; > - } > - } > - > - for (Index =3D 0; Index < mNumberOfCpus; Index++) { > - if ((TempCpuApicIdOrderTable[Index].Thread) =3D=3D 2) { > - CopyMem (&mCpuApicIdOrderTable[CurrProcessor], > &TempCpuApicIdOrderTable[Index], sizeof (EFI_CPU_ID_ORDER_MAP)); > - CurrProcessor++; > - } > - } > - > - for (Index =3D 0; Index < mNumberOfCpus; Index++) { > - if ((TempCpuApicIdOrderTable[Index].Thread) =3D=3D 3) { > - CopyMem (&mCpuApicIdOrderTable[CurrProcessor], > &TempCpuApicIdOrderTable[Index], sizeof (EFI_CPU_ID_ORDER_MAP)); > - CurrProcessor++; > - } > - } > - > - for (Index =3D 0; Index < mNumberOfCpus; Index++) { > - if (TempCpuApicIdOrderTable[Index].Flags =3D=3D 0) { > - CopyMem (&mCpuApicIdOrderTable[CurrProcessor], > &TempCpuApicIdOrderTable[Index], sizeof (EFI_CPU_ID_ORDER_MAP)); > - CurrProcessor++; > - } > - } > - > for (Socket =3D 0; Socket < FixedPcdGet32 (PcdMaxCpuSocketCount); > Socket++) { > for (CurrProcessor =3D 0, Index =3D 0; CurrProcessor < mNumberOfCpus= ; > CurrProcessor++) { > - if (mCpuApicIdOrderTable[CurrProcessor].Flags && > (mCpuApicIdOrderTable[CurrProcessor].SocketNum =3D=3D Socket)) { > - mCpuApicIdOrderTable[CurrProcessor].AcpiProcessorUid =3D > (mCpuApicIdOrderTable[CurrProcessor].SocketNum << mNumOfBitShift) + > Index; > + if (CpuApicIdOrderTable[CurrProcessor].Flags && > (CpuApicIdOrderTable[CurrProcessor].SocketNum =3D=3D Socket)) { > + CpuApicIdOrderTable[CurrProcessor].AcpiProcessorUid =3D > (CpuApicIdOrderTable[CurrProcessor].SocketNum << mNumOfBitShift) + > Index; > Index++; > } > } > } >=20 > - DEBUG ((DEBUG_INFO, "APIC ID Order Table ReOrdered\n")); > - DebugDisplayReOrderTable (mCpuApicIdOrderTable); > - > - mCpuOrderSorted =3D TRUE; > + DEBUG ((DEBUG_INFO, "::ACPI:: APIC ID Order Table Init. > mNumOfBitShift =3D %x\n", mNumOfBitShift)); > + DebugDisplayReOrderTable (CpuApicIdOrderTable); >=20 > return Status; > } > @@ -757,6 +652,7 @@ InstallMadtFromScratch ( > EFI_ACPI_6_3_LOCAL_APIC_NMI_STRUCTURE LocalApciNmiStruct= ; > EFI_ACPI_6_3_PROCESSOR_LOCAL_X2APIC_STRUCTURE > ProcLocalX2ApicStruct; > EFI_ACPI_6_3_LOCAL_X2APIC_NMI_STRUCTURE > LocalX2ApicNmiStruct; > + EFI_CPU_ID_ORDER_MAP *CpuApicIdOrderTab= le; > STRUCTURE_HEADER **MadtStructs; > UINTN MaxMadtStructCount= ; > UINTN MadtStructsIndex; > @@ -767,18 +663,19 @@ InstallMadtFromScratch ( >=20 > MadtStructs =3D NULL; > NewMadtTable =3D NULL; > + CpuApicIdOrderTable =3D NULL; > MaxMadtStructCount =3D 0; >=20 > - mCpuApicIdOrderTable =3D AllocateZeroPool (mNumberOfCpus * sizeof > (EFI_CPU_ID_ORDER_MAP)); > - if (mCpuApicIdOrderTable =3D=3D NULL) { > - DEBUG ((DEBUG_ERROR, "Could not allocate mCpuApicIdOrderTable > structure pointer array\n")); > + CpuApicIdOrderTable =3D AllocateZeroPool (mNumberOfCpus * sizeof > (EFI_CPU_ID_ORDER_MAP)); > + if (CpuApicIdOrderTable =3D=3D NULL) { > + DEBUG ((DEBUG_ERROR, "Could not allocate CpuApicIdOrderTable > structure pointer array\n")); > return EFI_OUT_OF_RESOURCES; > } >=20 > // Call for Local APIC ID Reorder > - Status =3D SortCpuLocalApicInTable (); > + Status =3D CreateCpuLocalApicInTable (CpuApicIdOrderTable); > if (EFI_ERROR (Status)) { > - DEBUG ((DEBUG_ERROR, "SortCpuLocalApicInTable failed: %r\n", Status)= ); > + DEBUG ((DEBUG_ERROR, "CreateCpuLocalApicInTable failed: %r\n", > Status)); > goto Done; > } >=20 > @@ -831,10 +728,10 @@ InstallMadtFromScratch ( > // APIC ID as a UINT8, use a processor local APIC structure. Otherwi= se, > // use a processor local x2APIC structure. > // > - if (!mX2ApicEnabled && mCpuApicIdOrderTable[Index].ApicId < > MAX_UINT8) { > - ProcLocalApicStruct.Flags =3D (UINT8) > mCpuApicIdOrderTable[Index].Flags; > - ProcLocalApicStruct.ApicId =3D (UINT8) > mCpuApicIdOrderTable[Index].ApicId; > - ProcLocalApicStruct.AcpiProcessorUid =3D (UINT8) > mCpuApicIdOrderTable[Index].AcpiProcessorUid; > + if (!mX2ApicEnabled && CpuApicIdOrderTable[Index].ApicId < > MAX_UINT8) { > + ProcLocalApicStruct.Flags =3D (UINT8) > CpuApicIdOrderTable[Index].Flags; > + ProcLocalApicStruct.ApicId =3D (UINT8) > CpuApicIdOrderTable[Index].ApicId; > + ProcLocalApicStruct.AcpiProcessorUid =3D (UINT8) > CpuApicIdOrderTable[Index].AcpiProcessorUid; >=20 > ASSERT (MadtStructsIndex < MaxMadtStructCount); > Status =3D CopyStructure ( > @@ -842,10 +739,10 @@ InstallMadtFromScratch ( > (STRUCTURE_HEADER *) &ProcLocalApicStruct, > &MadtStructs[MadtStructsIndex++] > ); > - } else if (mCpuApicIdOrderTable[Index].ApicId !=3D 0xFFFFFFFF) { > - ProcLocalX2ApicStruct.Flags =3D (UINT8) > mCpuApicIdOrderTable[Index].Flags; > - ProcLocalX2ApicStruct.X2ApicId =3D > mCpuApicIdOrderTable[Index].ApicId; > - ProcLocalX2ApicStruct.AcpiProcessorUid =3D > mCpuApicIdOrderTable[Index].AcpiProcessorUid; > + } else if (CpuApicIdOrderTable[Index].ApicId !=3D 0xFFFFFFFF) { > + ProcLocalX2ApicStruct.Flags =3D (UINT8) > CpuApicIdOrderTable[Index].Flags; > + ProcLocalX2ApicStruct.X2ApicId =3D > CpuApicIdOrderTable[Index].ApicId; > + ProcLocalX2ApicStruct.AcpiProcessorUid =3D > CpuApicIdOrderTable[Index].AcpiProcessorUid; >=20 > ASSERT (MadtStructsIndex < MaxMadtStructCount); > Status =3D CopyStructure ( > @@ -1040,8 +937,8 @@ Done: > FreePool (NewMadtTable); > } >=20 > - if (mCpuApicIdOrderTable !=3D NULL) { > - FreePool (mCpuApicIdOrderTable); > + if (CpuApicIdOrderTable !=3D NULL) { > + FreePool (CpuApicIdOrderTable); > } >=20 > return Status; > -- > 2.32.0.windows.2