From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by mx.groups.io with SMTP id smtpd.web10.2358.1660108150068174161 for ; Tue, 09 Aug 2022 22:09:10 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=QRYWogAi; spf=pass (domain: intel.com, ip: 134.134.136.31, 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=1660108150; x=1691644150; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=jxM0S0rNQhmbjNrljIIwY5kiHRmpS+ZSLZhyAXm4suo=; b=QRYWogAiQLxl5CJwofBTdxS9pOORQFQrCnxb6hG6viK3J6rdMhuA0BIa ye/s5I1QRyV7f1b9+DF7AegCsNRatUYpusubm6bxvwqzGKvC7UTGXTzG3 FxQuyGiACRDAga6KiClHoyNHtEE39BHwJCB23iMUPXX1AjNoy7QuWvpxa Ceg5R+u5ZsGr1tByhi9YweGSj0QFPaE3603GWovp7/iax2cmy7CprQhT1 Gcb/cbfdwAm8Q8/vZFhSPsDS1gzrwKRyI6mz2IJmJs9/cr/dq5jFB8/wb jGUABg4fOUiBCt8ZNGulJxha0C72+FJnuU7mxNCBqaJ2MT+QMffiGzB49 Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10434"; a="352729897" X-IronPort-AV: E=Sophos;i="5.93,226,1654585200"; d="scan'208";a="352729897" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Aug 2022 22:09:09 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,226,1654585200"; d="scan'208";a="932748264" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by fmsmga005.fm.intel.com with ESMTP; 09 Aug 2022 22:09:09 -0700 Received: from fmsmsx609.amr.corp.intel.com (10.18.126.89) by fmsmsx603.amr.corp.intel.com (10.18.126.83) 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:09:08 -0700 Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by fmsmsx609.amr.corp.intel.com (10.18.126.89) 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:09:08 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx608.amr.corp.intel.com (10.18.126.88) 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:09:08 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.176) by edgegateway.intel.com (192.55.55.68) 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:09:07 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GcJIZD21YplRMoy8xozID0n0Gu2M2q6akqNpf3CQ6wNoYUxKe0WDMgnuQudM4N5M9lkdcjtDUJW5FIq2a6UiK4+A9cNA/IFWRq162+nY+Uow7lUJ5V0FvNkvd7si/7iQddc+Z1khnjDcPm23GNtH+6OBgYfLuiX3TX2qBxyGyqCD49IE5wBfcxs2jt8rqwL5I6SzR769h80k9m6S5UNjF0wIw9CGkPitmRwXx5iuT9HymHpruMSnxLMNkcfYiUvkMlCnmcRoOnTwvbLGMDzu0zZ9gYllI06gffm7eE80Cag4USEihrin6cQHKF6aWh/s+dk3bbiPNIQUiDMyMlKGKg== 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=bTFy0z2OCWm2Ot+JJkpWvnDupem0rsVkQhEo2yBo6vc=; b=SqaMtqlBhV4yPQ6F9gfjvfvFKyo1gL2l9yzqQ4AKau00MK6gAFaeRnlcss88JlkFLeiCDeTimLdyeSBHXevKTCKBanC66AWyYx7iGvDD5X+/ynHIn44G2Kthzo/o2wfVXQgip8xzamXC0YNPvW+ABryOYtlERJGUE68EJjbKSDGDeKg9eAPRAhYylha6FM6mDIsTBL3w07m9wbi1YYKEOcT3jqqW9o5A/l9ktI0c2qr5Ws4hWaTzlRvhAN5aZRzx8/J6F5GkDnX9i+m3Dk9ap9jq6adhFSWdeUOMnRmk3JzvZk6WHrI7x1j4S8GQUvzA1wD3S1WbddIeoLp6h4r0BA== 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 DM5PR11MB1913.namprd11.prod.outlook.com (2603:10b6:3:10b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.16; Wed, 10 Aug 2022 05:09:06 +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:09:06 +0000 From: "Ni, Ray" To: "Lin, JackX" , "Sinha, Ankit" CC: "Chiu, Chasel" , "Dong, Eric" , "Yao, Jiewen" , "Chaganty, Rangasai V" , "devel@edk2.groups.io" , "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: AQHYqv/rxuV9HgBBk06A3zrSlAd8i62nediggAAI+wCAAAtzAIAACfDg Date: Wed, 10 Aug 2022 05:09:05 +0000 Message-ID: References: <20220808082123.1999-1-jackx.lin@intel.com> In-Reply-To: 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: 44e99df1-62b9-44c4-6839-08da7a8e72f7 x-ms-traffictypediagnostic: DM5PR11MB1913:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: MfZfxRy6SnwTwSSzoJV7IgqVoMp0PXwB2W17PiMFvL/lLhi1kuhmDkZk1V+7Xr4vsglxLSiIFwwy4nZag+0d+5JJUqVZrnG/CZk2zHfJqLlXO6iNQ/vki3TlSJT6gGsXuAzcNBCAntJtMgfGK56uZfF3apT/FDewjCh1mTdsa06UqDrCIlQCjeB8L6igg3/Wa2AgXJpJBHzDvMBMCnQj7twyKOQQQSY2Vm3KG9Eqy5DtwgfQRtTAEDVUHmQJoWzVyVJffWcGg2OvwY8zHJkEzAlUUVHkq+UtrE2wahRMJ9EVe4i9/afnmJJjrAkT4Gk65vJYTwTykQMWHUawTJ+ie+NjNh/NCsUI5IgJe3mLUu5daYqXa54W2IuQEUytrfM0bsRnZ+V64bwYeI2w9B7JNEp882ABcrlS7ED3M8eKYGd3YN/dG7n870wzCIEz6YrzHFi0B/9LwW2oOd93h+L1L6h+ZkLRv5eBlg2s9Jz5taDa38cRRvuuIhruroYCT9LTEv1L1fIE6MFqc2hlWnNdrRMdv2R6RpI3qR56LJJSOLHuUyZUoTktm0mty32O1IxMcTA6Nn2xiDBgrFHKlXS1j49VFelJHZvvC6uRKyWGithDNUM1DdZZH6MrmFS0fm+sBBs7wrlkseXutzxvRXBoyBs61J56B6Vve0ziUjVrEwc4uDPhUw7oov/1mmoVgsIrXqpmcnVY8PSDiOX2rj7zGuynKlXgVy0VKMFNIokQnnnLPKMZK+uEfyodcnaz6nUyv7mpjm77+31UzwwrjCOt3LJtvru76j+IEM4u+Z9001Lg/P98uuupVaYB2xBPCThD 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)(136003)(396003)(346002)(376002)(366004)(39860400002)(55016003)(33656002)(9686003)(82960400001)(26005)(41300700001)(7696005)(38070700005)(53546011)(38100700002)(122000001)(186003)(6506007)(107886003)(86362001)(83380400001)(64756008)(71200400001)(66446008)(66946007)(30864003)(8676002)(4326008)(66556008)(66476007)(2906002)(76116006)(8936002)(52536014)(19627235002)(6636002)(478600001)(5660300002)(110136005)(54906003)(316002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?AMjntuEmf8TRv2IOukUp/sxqnpLAsPC9sGJxf6dgqu+xreS50zdfAIWpoNcC?= =?us-ascii?Q?ZqIVdk+i19PlYo9xucUO7bUh/QOhnWniKbPegaY2GEtXXkGaxDHDugei1uMA?= =?us-ascii?Q?HCKmuwK8+tqOEX6Z8hEa+aj1DDZbWWOipQIsHK5ozMUNoS9tT7iCuEeMYLXM?= =?us-ascii?Q?091rqkoAJQ68WzeWJX3bSh79T+aoXO8XCnSf5350bLBWgeCD3EIf1w4sQBh9?= =?us-ascii?Q?NLzA+vnnXZCSVZLJk1uSTv7qq/9JHchvGeurwtqVZRStXHpk/nKbTAMkM48W?= =?us-ascii?Q?TlkldWtemC45nF9XFXSEQYprUqSQUPTtX5a97BahP+Lw1IgzqJ+R5LvIzs9K?= =?us-ascii?Q?/CAFSbAYMFdsyy0CFCaWLRzk91jva11JwzzG09IhjDLHyhgFjiUXtmHeweW+?= =?us-ascii?Q?aU5yXDTh9IfyVU5tS7PjjzW0Pq1eo5Zyj3UJphVFaQWZr13YO2Fu0dBa7VtR?= =?us-ascii?Q?RXDjhCiqbQjwkNvQEwMmioi0N2tO+5JMOf+CUUj9VumOoeBQG6FelZnSeaTX?= =?us-ascii?Q?LSUJ7NuWty0IkGSxpMdbiowJAJgbEMvz7k03ai12pwzGy+BWym4zM9m/oXow?= =?us-ascii?Q?OJ2KMQm9w7jH3uCusUcHqECMyw1bR7e5Lrz4lzumxcEfqYA5T3Iq1CkyznNb?= =?us-ascii?Q?0Y3glpXa5nA0jBtobYW6cU+8487xy0IfiVZrFp37ulvVUQ3/qYZrZQAJnpEE?= =?us-ascii?Q?OJBvMPsGHEoqiCOVsOPS6n4/IVa/tuneW+HeZ76cn15knPWGM5sFT5e17LZw?= =?us-ascii?Q?wVxR+sHrhOr8nc3eru1aySWeI80ma1UAk4MzT913Eqy4OwUh1WQmXH1lIs/0?= =?us-ascii?Q?hGDkfT1A8VjjGgt7OLZypn/Vv+93E36wEepS2J/IMaQ0WPyDYsXnqI0tg/Ev?= =?us-ascii?Q?unYhE+USYhEhQENtPHeGbYAZ7H+mTdfA1JDHN43pjm7//Dsq1A4z+Iu+Y/Uj?= =?us-ascii?Q?ilwZRvJTKLwTua2+yyT5l2xoqDSvhkNWVkMGQRoI9ZP4/5x+nIMhJZvOYlrw?= =?us-ascii?Q?o3/Gib3LrxVIAnZO7cAyzCcEe8FmVREtfL1WLTeAOl/XymxHcbmv6kOPxG1k?= =?us-ascii?Q?NuxXEKlyvKyV7Ww77crjTm5antIi7TzuKz/klKYbDJ9hrOHba5YZNBZJldZ7?= =?us-ascii?Q?uC630YKEOkJHOekvGjzbW4JR8gFCgax63ToPPJX8T2Ot/+7OJDQLfEg5ntgz?= =?us-ascii?Q?6ku9ktXZnzKHrNXt5R8MvHsPZgovo30Uli86RYqe/V3cTnoVfyjpBs0C9v5o?= =?us-ascii?Q?eGjwpFrUXEEFnN1K/BO7OOl6OLu4gE7lUaJT/f89ZK4MrlLw2zuap04Kd0TB?= =?us-ascii?Q?lBu/1T9RzxFDbwcC8zCowsK++BYcUge/9HOWSpWqLHlp9dXgBX0N9abWr0sf?= =?us-ascii?Q?ZyE/V3JfJT97PuOJRp/YZlRRBWOwACZJ6g5MghfYvRH07R2PwQevQG9ZkYH4?= =?us-ascii?Q?N+omIpW05dLvtzmCxwHSJND1JlCXimATelm9SmqMCKB9MPHdu/pHP8orKAJ+?= =?us-ascii?Q?vz6SUBPIEWpi8GseeQfRdSw1Oyov6jCS5gzrn4F6GdC35H60Aly1uEx1zxUD?= =?us-ascii?Q?VivPrYRxstmbGxP9MBM=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: 44e99df1-62b9-44c4-6839-08da7a8e72f7 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Aug 2022 05:09:05.8482 (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: 1yDLZxlYwbSKtenMfHltIfE0ofLk+ZPaUjPnpkb/ipdt+b7SchlQ44ja/3uriTIF73SQY+aEGN72ckw6p/czjQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR11MB1913 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 Jack, the patch is merged. > -----Original Message----- > From: Lin, JackX > Sent: Wednesday, August 10, 2022 12:32 PM > To: Ni, Ray ; Sinha, Ankit > Cc: Chiu, Chasel ; Dong, Eric ; > Yao, Jiewen ; Chaganty, Rangasai V > ; devel@edk2.groups.io; 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 >=20 > Hi Ray, >=20 > The latest patch is sent in the code review mail, and I also attach one h= ere, > thank you. >=20 > Best regards > Jack >=20 > -----Original Message----- > From: Lin, JackX > Sent: Wednesday, August 10, 2022 11:51 AM > To: Ni, Ray ; Sinha, Ankit > Cc: Chiu, Chasel ; Dong, Eric ; > Yao, Jiewen ; Chaganty, Rangasai V > ; devel@edk2.groups.io; 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 >=20 > Hi Ray, >=20 > I know this patch, and the thread 2 and 3 are added by my request for a > reason on that time. > I will re-sent the code patch. > Thank you. >=20 > Jack >=20 > -----Original Message----- > From: Ni, Ray > Sent: Wednesday, August 10, 2022 11:48 AM > To: Lin, JackX ; Sinha, Ankit > Cc: Chiu, Chasel ; Dong, Eric ; > Yao, Jiewen ; Chaganty, Rangasai V > ; devel@edk2.groups.io; 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 >=20 > Jack, > Your patch cannot be merged to trunk because Ankit just did some change i= n > the same C file, in below commit. > * MinPlatformPkg/AcpiTables: Add additional thread mapping in MADT >=20 > Ankit, > It seems your patch is to add support for thread #2 and #3. Jack's patch = is to > remove the additional sorting that put secondary threads after first thre= ads. > Do you see an issue that we remove the thread sorting logic? >=20 > Thanks, > Ray >=20 > > -----Original Message----- > > From: Lin, JackX > > Sent: Monday, August 8, 2022 4:21 PM > > To: devel@edk2.groups.io > > Cc: Lin, JackX ; Lin, JackX > > ; Chiu, 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 > > > > BIOS should not reordering cpu processor_uid > > > > 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 | 174 > > +++++++++++++++++++++++++++++++++++++++----------------------------- > -- > > ---------------------------------------------------------------------- > > ------------------------ > > ---------- > > 1 file changed, 39 insertions(+), 135 deletions(-) > > > > diff --git > > a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > > b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c > > index c7e87cbd7d..176e422e81 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; > > > > EFI_MP_SERVICES_PROTOCOL *mMpService; > > -BOOLEAN mCpuOrderSorted; > > -EFI_CPU_ID_ORDER_MAP *mCpuApicIdOrderTable =3D NULL; > > UINTN mNumberOfCpus =3D 0; > > UINTN mNumberOfEnabledCPUs =3D 0; > > > > - > > -/** > > - 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 > > > > @@ -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 ( > > > > 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 ( > > > > } > > > > +/** > > + Collect all processors information and create a Cpu Apic Id table. > > + > > + @param[in] CpuApicIdOrderTable Buffer to store information of= Cpu. > > +**/ > > 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; > > > > - Index =3D 0; > > Status =3D EFI_SUCCESS; > > > > - 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 > > ); > > > > - 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,89 +179,26 @@ SortCpuLocalApicInTable ( > > } //end if PROC ENABLE > > } //end for CurrentProcessor > > > > - //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)); > > - > > - // > > - //check to see if 1st entry is BSP, if not swap it > > - // > > - 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 Inde= x > > Bufferflow\n")); > > - return EFI_INVALID_PARAMETER; > > - } > > - } > > - > > - // > > - // 1. Sort TempCpuApicIdOrderTable, > > - // sort it by using ApicId from minimum to maximum (Socket0 to > SocketN), > > and the BSP must in the fist location of the table. > > - // So, start sorting the table from the second element and total > elements > > are mNumberOfCpus-1. > > - // > > - PerformQuickSort ((TempCpuApicIdOrderTable + 1), (mNumberOfCpus - > > 1), sizeof (EFI_CPU_ID_ORDER_MAP), (SORT_COMPARE) > > ApicIdCompareFunction); > > - > > - // > > - // 2. Sort and map the primary threads to the front of the > > CpuApicIdOrderTable > > - // > > - for (CurrProcessor =3D 0, Index =3D 0; Index < mNumberOfCpus; Index+= +) { > > - if ((TempCpuApicIdOrderTable[Index].Thread) =3D=3D 0) { // primary= thread > > - CopyMem (&mCpuApicIdOrderTable[CurrProcessor], > > &TempCpuApicIdOrderTable[Index], sizeof (EFI_CPU_ID_ORDER_MAP)); > > - CurrProcessor++; > > - } > > - } > > + DEBUG ((DEBUG_INFO, "BspApicId - 0x%x\n", GetApicId ())); > > > > - // > > - // 3. Sort and map the second threads to the middle of the > > CpuApicIdOrderTable > > - // > > - for (Index =3D 0; Index < mNumberOfCpus; Index++) { > > - if ((TempCpuApicIdOrderTable[Index].Thread) =3D=3D 1) { //second t= hread > > - CopyMem (&mCpuApicIdOrderTable[CurrProcessor], > > &TempCpuApicIdOrderTable[Index], sizeof (EFI_CPU_ID_ORDER_MAP)); > > - CurrProcessor++; > > - } > > - } > > > > // > > - // 4. Sort and map the not enabled threads to the bottom of the > > CpuApicIdOrderTable > > - // > > - for (Index =3D 0; Index < mNumberOfCpus; Index++) { > > - if (TempCpuApicIdOrderTable[Index].Flags =3D=3D 0) { // not enable= d > > - CopyMem (&mCpuApicIdOrderTable[CurrProcessor], > > &TempCpuApicIdOrderTable[Index], sizeof (EFI_CPU_ID_ORDER_MAP)); > > - CurrProcessor++; > > - } > > - } > > - > > - // > > - // 5. Re-assign AcpiProcessorId for AcpiProcessorUid uses purpose. > > + // Fill in AcpiProcessorUid. > > // > > for (Socket =3D 0; Socket < FixedPcdGet32 (PcdMaxCpuSocketCount); > > Socket++) { > > for (CurrProcessor =3D 0, Index =3D 0; CurrProcessor < mNumberOfCp= us; > > 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++; > > } > > } > > } > > > > - //keep for debug purpose > > - 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); > > > > return Status; > > } > > @@ -750,6 +652,7 @@ InstallMadtFromScratch ( > > EFI_ACPI_6_3_LOCAL_APIC_NMI_STRUCTURE LocalApciNmiStru= ct; > > EFI_ACPI_6_3_PROCESSOR_LOCAL_X2APIC_STRUCTURE > > ProcLocalX2ApicStruct; > > EFI_ACPI_6_3_LOCAL_X2APIC_NMI_STRUCTURE > > LocalX2ApicNmiStruct; > > + EFI_CPU_ID_ORDER_MAP *CpuApicIdOrderT= able; > > STRUCTURE_HEADER **MadtStructs; > > UINTN MaxMadtStructCou= nt; > > UINTN MadtStructsIndex= ; > > @@ -760,18 +663,19 @@ InstallMadtFromScratch ( > > > > MadtStructs =3D NULL; > > NewMadtTable =3D NULL; > > + CpuApicIdOrderTable =3D NULL; > > MaxMadtStructCount =3D 0; > > > > - 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; > > } > > > > // 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; > > } > > > > @@ -824,10 +728,10 @@ InstallMadtFromScratch ( > > // APIC ID as a UINT8, use a processor local APIC structure. Other= wise, > > // 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; > > > > ASSERT (MadtStructsIndex < MaxMadtStructCount); > > Status =3D CopyStructure ( > > @@ -835,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; > > > > ASSERT (MadtStructsIndex < MaxMadtStructCount); > > Status =3D CopyStructure ( > > @@ -1033,8 +937,8 @@ Done: > > FreePool (NewMadtTable); > > } > > > > - if (mCpuApicIdOrderTable !=3D NULL) { > > - FreePool (mCpuApicIdOrderTable); > > + if (CpuApicIdOrderTable !=3D NULL) { > > + FreePool (CpuApicIdOrderTable); > > } > > > > return Status; > > -- > > 2.32.0.windows.2