From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web12.6905.1653379468442535992 for ; Tue, 24 May 2022 01:04:29 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=W1WOKhz+; spf=pass (domain: intel.com, ip: 192.55.52.151, 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=1653379468; x=1684915468; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=7EYtx0ugoQofy/k9QWKQclNQ/UcA/7of1aIhC/ZXQPo=; b=W1WOKhz+soaHg/RoEE6OeUyDEviCizZ5n1B9029yJBJcaUdV2MjMEZWI WY6JSHX4gqx/2CuuZGvv33P5vri5PmalJO8SHErgckHudaY+aQFSidZue S7Akql0dzaFN3s846+RDwWFOL/zmPMZZV4KIhiIvaPYw0d5H8UDs8kfXT rMcs7upQBqiql+YE8HhJ5TY6EQyD2BhPm7FmGVoArlmPo5S3ZYc0p9/yz 1VDqaBKvNevl8b/TWWfRsCOMDnmTNVp4Z1bknkEz5gt+w/84h1mqu6kSs hpEVDLyHU7nOJA3u/d9VWLTBruJZaTl+zRx99HEvMkvnsNXDCon5hJFjV Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10356"; a="253963178" X-IronPort-AV: E=Sophos;i="5.91,248,1647327600"; d="scan'208";a="253963178" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 May 2022 01:04:28 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,248,1647327600"; d="scan'208";a="559027253" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by orsmga002.jf.intel.com with ESMTP; 24 May 2022 01:04:27 -0700 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Tue, 24 May 2022 01:04:27 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Tue, 24 May 2022 01:04:27 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.168) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.27; Tue, 24 May 2022 01:04:27 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NUlsN8wFb5cDVdLervWGwTpOoR2KGn9GEf4w2JgUU1PkSZQ7wtr0a5M+erUsqff+0CX7bkPFICZBMgw90HURfU3WKIa2tTqVCIpgE+K3u3f/H5eARPtbq0X3d09NR5YQHadKLdsfC31N8JMVQIS9/kd5IemkwwDrayIFkCOYPsIjiSoM5O5BM/AsVQl5Z2J5TC06jy7OnaUNt6qKQkiQi7wfATg7FpIdYlBepEa+7z5ndSZhbGpGtyeZq5p8sluoEyd5445h1daG/6ydpks5yKOEOgMxgqNCK7ySFgCT3dixRlOadyrH44k9O0DLn72RF/7CO4RFeQxEsZgdyobgPA== 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=Yx/jtM0SDyTrHo80ZzjD+HADNg5Rap8sLqqK0OaeGeM=; b=OZMgyHkpLL5njI/2x3e0Hmfgel0ut8EAFjkDo8YdTlbpnYyZ/tpKMsk9d622pAB/2xvQZB1BCUUh2dEvAljuiiT7uLqFSVRqusz6rOhiYBB0E5HNZKoF9+e2XO5CvRo75EckPwxR/qlSb/I184jMh9EmGIjyLRyOUl2ECM5of6jWDL8X1m43bPiY9BVpNkfoVA5FX5bcJ37O2gGcYfonY/GSE9p+UU0oeZejk9/UrGdPzZ2T6OWYABtQf5y4XkM92SclUYW07Qg1gi7lDZ76g8ruj1gxS8QUj9xtzN0CyDGUrvpmb52vii/7/Zw35XETjhCnaSH5gnoYJEzz34hEIg== 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 PH0PR11MB4855.namprd11.prod.outlook.com (2603:10b6:510:41::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5273.13; Tue, 24 May 2022 08:04:24 +0000 Received: from MWHPR11MB1631.namprd11.prod.outlook.com ([fe80::901a:95d1:76f8:d69d]) by MWHPR11MB1631.namprd11.prod.outlook.com ([fe80::901a:95d1:76f8:d69d%11]) with mapi id 15.20.5273.023; Tue, 24 May 2022 08:04:24 +0000 From: "Ni, Ray" To: "Wang, Jian J" , "devel@edk2.groups.io" CC: "Dong, Eric" Subject: Re: [edk2-devel] [PATCH 4/5] CpuException: Remove InitializeCpuInterruptHandlers Thread-Topic: [edk2-devel] [PATCH 4/5] CpuException: Remove InitializeCpuInterruptHandlers Thread-Index: AQHYbfjSV5SEP9qA/k+tFm3Y4Df6Yq0trZvX Date: Tue, 24 May 2022 08:04:24 +0000 Message-ID: References: <20220520141549.108-1-ray.ni@intel.com> <20220520141549.108-5-ray.ni@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: suggested_attachment_session_id: 58011e10-4bd4-7da5-e9cf-6963b4ff43a5 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: 77ebc9e7-ceb9-44cf-1d9e-08da3d5c047c x-ms-traffictypediagnostic: PH0PR11MB4855:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: gIJjVzIzbS0XrWY/oq3L++B0A/5xEXaw10KTp3KuWkJoEMzLdrObG4tygyGfjat2HA91aw2sM2X63nyt4aBoD8xkScERfI6FNK9tHyLWmzaBFa01uFdpCXW8D78N/06URd/usDDuzDmeyFANQD6kxUotJBj18RAmCxLP/jldZp1UhLsOzFPidFa2uIaJ84GjuFZPdMcspzv+XT1rgnJ95u9B17PiaBG3jUEUiwHcHakwGJRmTa/ZSJFDNpZD24U7/3Jw5fFzLm+HjiLjENa+WwA30ZNJPTlcGsHN6EFEHCYSOI+N6Uoy0a28YmWUZ8kUo1ulDGNVYZ0TWmQardyR05/9nTjoZbsybt+ALSvay1/yn1Ai9LEMYxZjMHkD0lFMClXk4mzBPFLIG3K+xepl0a7Fuz4PNGIkqfIDbfWv1IJY1pP2awO/hoSoakOWUroI8w5DduoVT3VHVJfUW4Te3ulFwiC/ffjWncBGuONUFvR0l+4prP+y2kGOWA7JaBEInayDDnj8nuVzl4VDBvEndgIoUnxXat9tGXLmmR5CM6RS2svgRYpewYuvzSEmo8mx6BRBMaQMycgBovQiG3bRxTRhv2T9eMWp83TRJhPcpbhgPmF/127JJjM3YXMsfZBP0qKLWR6gZCfi/hyRzSjKTQQK2LTB4JjbEj6tLYTQTwEZXSko4t6prnLG4Y99tJgVEs/Fk7g6Oxn/fEB5i5fo7EFxEnKtE5bW5AJjwbIWP2r4H5sWd6VfxCLi1HJ2usebc0G4PasXrZJsrVDI23vSm1+6v5i1KucDgNBT3pBd5J1harwdJAzXyhrJ7BwNidIIpbTeBI1H/Pz2lezuvgGr5w== 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:(13230001)(366004)(316002)(122000001)(38100700002)(82960400001)(83380400001)(110136005)(8676002)(38070700005)(4326008)(107886003)(66446008)(91956017)(64756008)(186003)(66556008)(76116006)(66476007)(66946007)(86362001)(30864003)(9686003)(71200400001)(966005)(508600001)(55016003)(26005)(2906002)(33656002)(53546011)(7696005)(8936002)(6506007)(52536014)(5660300002)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?KF9XlPhmYoCLK9ww2zOcnzB+VAyDOPmurWO0FTlvf/nw2/9QLNk+GUhs7P6M?= =?us-ascii?Q?XOg0SVZ191tMNhPfpnPdpGwJtLAi8qP+cCyWbPfp4DNeQfQAT8a7pzB73tcH?= =?us-ascii?Q?Cau9pqVAChnhlzg+0ZZ4U2tjjDdWscfFobDU9EhRQuQt3XE2lSuTsGAimw1a?= =?us-ascii?Q?WCsiMQfjGfXIWzJu3jA5ZJGxkZdzGKS/IrBayQdYz+/jptwZ4kqlHYvIE9R7?= =?us-ascii?Q?GmErJlPaYNke/Lqb/B5iWTwOzxOJtsaLqHX6gZrNJkXNllfkVhkodCChS875?= =?us-ascii?Q?uzK41YI7JRJ05luV2PIjF55U8gGWWWXQp+rO4okCBHedsmzuK1QU1BQNPefW?= =?us-ascii?Q?fxEJJTHGeWPqjn8ALvDYkEJKxJ5YrzltepUfw6m3QY2Pe2oMiNLn+r/ZQk7g?= =?us-ascii?Q?rqe7cJvNfn98FjD8cKo6/IQrx3YP4ha9zcmzCd51PpABNfS+xGN6/h0Zxs/D?= =?us-ascii?Q?ElCawbya07vy2m2t+BMtDCngNbqhvYhZBZ93n1cSy9EgBoOvrqRstHTHGN6t?= =?us-ascii?Q?UHIiWNPcGMiSh93ZvLL+FD9B14RX5h0vFhN0YVdRYycffhFYWMs7exLIDnMa?= =?us-ascii?Q?IuGD8E12tLMt+azhDypmuaDAf4dFjrVJ0ve67hSQFwy0DPUWB35A5Idb6Efh?= =?us-ascii?Q?MpHdqg9WIzhV9kmZ3uERBfeB5pvSbtlw5FHxi/fBb7KGQWYIpoTDBZvR4UzV?= =?us-ascii?Q?dxWmuP+/hadYYiTXnGy9FSLlKHQmULpwR8ogjqqKwo1x9YPYfN75vV+1W7bl?= =?us-ascii?Q?uEHCxKaFsSDdG5+9PiG3UOqKoSnvZMTeLOQrBWcu+jkgMJRYaQpJ+YzK/zJA?= =?us-ascii?Q?wPXSRRiEy5cmFcPPK5sdetzIbuZTEs0/Tb1jmPbJ319zsRigrTkgpzBFDgqw?= =?us-ascii?Q?ETG6X/XkElUilQHOeG3IzBLc0da6myBlqbniEcq17/WTwOclPrYz7B70TPJG?= =?us-ascii?Q?p0XL5WUCJsxKlrdFbxtkC0zAW4qMeUeDK2972WHtAdHDGdd+8U+EOJkGln4B?= =?us-ascii?Q?WKbk1q76nh/D23LcXUIQTdnsbeEecV/cfMES50qnw6bkBD3gK8nPxhHKuGtw?= =?us-ascii?Q?x9ZOwST2B68AFYYq8gwvSl6TgWeShm9LLcvDQ3n2GHzyLHVn7W2z3B6rwxY2?= =?us-ascii?Q?B3L+Kse57LGbimyGnmTbboIXA94NoVAu8vjgSvp9vVNsKHsUzNNvXn9eyb+I?= =?us-ascii?Q?rjNuGm0ZSEy9g7jhn+pde7buufN4d0TqnR51PHzkMss/5g23dBVJ6CpAjW3s?= =?us-ascii?Q?XXjN2HJmAu/Cto7FIyEGdh7YUlWJMy3Nnx4OIX2sA6tGDYj1/SQuZM5+XjDL?= =?us-ascii?Q?NwW6TiF755mmfeEBKH/mb658Hw74DVejMNWDw6by3lVAqH0zkzcKewjCvr1q?= =?us-ascii?Q?Kae1eo6iUkFzuwUFIGWUkEgrlw+CjEE5nBF8VySnfO7oieHTe8pOVhylVn9l?= =?us-ascii?Q?66pL5hw9v05FyYYl1goN7AAPUhsBekUbY59efghVeTQr74cIuk+1ujre2AfY?= =?us-ascii?Q?MKc/PO1n2/L18EwK/JcSIvewmtwwmafPCkbxhJM5W7B9ddVE4JNdqi6CPjed?= =?us-ascii?Q?CdpT1ZAFPxaSBl+GPlAoJv8wwTeKuPf/Uiw1PnPTqe1Czk/BpVViY5GcWJ1e?= =?us-ascii?Q?RzH2qli7l2crB06KHyVhoPyhKyVtFBBX2PtikzBpCyqfU+by0LlGt8tHbbVn?= =?us-ascii?Q?OsoHqBRwiU7GBx9aPNoIzBbGc3knCn8+ONCSiXHMVz3OPPOf?= 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: 77ebc9e7-ceb9-44cf-1d9e-08da3d5c047c X-MS-Exchange-CrossTenant-originalarrivaltime: 24 May 2022 08:04:24.7406 (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: sVTC0DhGI81ZtpddF0NbObuPmdes9OParP7uH12FSwLUjME3LtQqoRydj6fhrUklRnggZ3EZtQy2+eZfwo/H7g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR11MB4855 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 Jian, I think we need discussion on where to put the common CPU_INTERRUPT_NUM def= inition. Do you agree that we can leave that to another patch? ________________________________________ From: Wang, Jian J Sent: Monday, May 23, 2022 0:27 To: devel@edk2.groups.io; Ni, Ray Cc: Dong, Eric Subject: RE: [edk2-devel] [PATCH 4/5] CpuException: Remove InitializeCpuInt= erruptHandlers Hi Ray, Both CpuDxe.c and CpuExceptionCommon.h have CPU_INTERRUPT_NUM defined. I'd suggest to move it to a common place, such as BaseLib.h. I don't see an= y issue if they are defined to different value. It just gives me a feeling that it = might cause potential problems sometimes in the future. Regards, Jian > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Ni, Ray > Sent: Friday, May 20, 2022 10:16 PM > To: devel@edk2.groups.io > Cc: Dong, Eric > Subject: [edk2-devel] [PATCH 4/5] CpuException: Remove > InitializeCpuInterruptHandlers > > InitializeCpuExceptionHandlers() expects caller allocates IDT while > InitializeCpuInterruptHandlers() allocates 256 IDT entries itself. > > InitializeCpuExceptionHandlers() fills max 32 IDT entries allocated > by caller. If caller allocates 10 entries, the API just fills 10 IDT > entries. > > The inconsistency between the two APIs makes code hard to > unerstand and hard to share. > > Because there is only one caller (CpuDxe) for > InitializeCpuInterruptHandler(), this patch updates CpuDxe driver > to allocates 256 IDT entries then call > InitializeCpuExceptionHandlers(). > > With this change, InitializeCpuInterruptHandlers() is removed > completely. > > And InitializeCpuExceptionHandlers() fills max 32 entries for PEI > and SMM instance, max 256 entries for DXE instance. > Such behavior matches to the original one. > > Signed-off-by: Ray Ni > Cc: Eric Dong > --- > .../Include/Library/CpuExceptionHandlerLib.h | 28 +------ > .../CpuExceptionHandlerLibNull.c | 31 +------ > UefiCpuPkg/CpuDxe/CpuDxe.c | 33 ++++++-- > .../CpuExceptionHandlerLib/DxeException.c | 80 ++----------------- > .../CpuExceptionHandlerLib/PeiCpuException.c | 61 +------------- > .../PeiDxeSmmCpuException.c | 19 ++--- > .../SecPeiCpuException.c | 31 +------ > .../CpuExceptionHandlerLib/SmmException.c | 35 ++------ > 8 files changed, 56 insertions(+), 262 deletions(-) > > diff --git a/MdeModulePkg/Include/Library/CpuExceptionHandlerLib.h > b/MdeModulePkg/Include/Library/CpuExceptionHandlerLib.h > index 22a4408f9f..d4649bebe1 100644 > --- a/MdeModulePkg/Include/Library/CpuExceptionHandlerLib.h > +++ b/MdeModulePkg/Include/Library/CpuExceptionHandlerLib.h > @@ -2,7 +2,7 @@ > CPU Exception library provides the default CPU interrupt/exception han= dler. > > It also provides capability to register user interrupt/exception handl= er. > > > > - Copyright (c) 2012 - 2018, Intel Corporation. All rights reserved.
> > + Copyright (c) 2012 - 2022, Intel Corporation. All rights reserved.
> > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > **/ > > @@ -132,28 +132,6 @@ InitializeCpuExceptionHandlersEx ( > IN CPU_EXCEPTION_INIT_DATA *InitData OPTIONAL > > ); > > > > -/** > > - Initializes all CPU interrupt/exceptions entries and provides the defa= ult > interrupt/exception handlers. > > - > > - Caller should try to get an array of interrupt and/or exception vector= s that are > in use and need to > > - persist by EFI_VECTOR_HANDOFF_INFO defined in PI 1.3 specification. > > - If caller cannot get reserved vector list or it does not exists, set V= ectorInfo to > NULL. > > - If VectorInfo is not NULL, the exception vectors will be initialized p= er vector > attribute accordingly. > > - > > - @param[in] VectorInfo Pointer to reserved vector list. > > - > > - @retval EFI_SUCCESS All CPU interrupt/exception entries have= been > successfully initialized > > - with default interrupt/exception handler= s. > > - @retval EFI_INVALID_PARAMETER VectorInfo includes the invalid content = if > VectorInfo is not NULL. > > - @retval EFI_UNSUPPORTED This function is not supported. > > - > > -**/ > > -EFI_STATUS > > -EFIAPI > > -InitializeCpuInterruptHandlers ( > > - IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL > > - ); > > - > > /** > > Registers a function to be called from the processor interrupt handler= . > > > > @@ -161,8 +139,8 @@ InitializeCpuInterruptHandlers ( > interrupt or exception type specified by InterruptType. If InterruptHa= ndler is > NULL, then the > > handler for the processor interrupt or exception type specified by > InterruptType is uninstalled. > > The installed handler is called once for each processor interrupt or e= xception. > > - NOTE: This function should be invoked after InitializeCpuExceptionHand= lers() > or > > - InitializeCpuInterruptHandlers() invoked, otherwise EFI_UNSUPPORTED > returned. > > + NOTE: This function should be invoked after InitializeCpuExceptionHand= lers() > is invoked, > > + otherwise EFI_UNSUPPORTED returned. > > > > @param[in] InterruptType Defines which interrupt or exception to = hook. > > @param[in] InterruptHandler A pointer to a function of type > EFI_CPU_INTERRUPT_HANDLER that is called > > diff --git > a/MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandlerLib > Null.c > b/MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandlerLib > Null.c > index 35ab5a8db5..54f38788fe 100644 > --- > a/MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandlerLib > Null.c > +++ > b/MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandlerLib > Null.c > @@ -1,7 +1,7 @@ > /** @file > > CPU Exception Handler library implementition with empty functions. > > > > - Copyright (c) 2012 - 2018, Intel Corporation. All rights reserved.
> > + Copyright (c) 2012 - 2022, Intel Corporation. All rights reserved.
> > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > **/ > > @@ -33,31 +33,6 @@ InitializeCpuExceptionHandlers ( > return EFI_SUCCESS; > > } > > > > -/** > > - Initializes all CPU interrupt/exceptions entries and provides the defa= ult > interrupt/exception handlers. > > - > > - Caller should try to get an array of interrupt and/or exception vector= s that are > in use and need to > > - persist by EFI_VECTOR_HANDOFF_INFO defined in PI 1.3 specification. > > - If caller cannot get reserved vector list or it does not exists, set V= ectorInfo to > NULL. > > - If VectorInfo is not NULL, the exception vectors will be initialized p= er vector > attribute accordingly. > > - > > - @param[in] VectorInfo Pointer to reserved vector list. > > - > > - @retval EFI_SUCCESS All CPU interrupt/exception entries have= been > successfully initialized > > - with default interrupt/exception handler= s. > > - @retval EFI_INVALID_PARAMETER VectorInfo includes the invalid content = if > VectorInfo is not NULL. > > - @retval EFI_UNSUPPORTED This function is not supported. > > - > > -**/ > > -EFI_STATUS > > -EFIAPI > > -InitializeCpuInterruptHandlers ( > > - IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL > > - ) > > -{ > > - return EFI_SUCCESS; > > -} > > - > > /** > > Registers a function to be called from the processor interrupt handler= . > > > > @@ -65,8 +40,8 @@ InitializeCpuInterruptHandlers ( > interrupt or exception type specified by InterruptType. If InterruptHa= ndler is > NULL, then the > > handler for the processor interrupt or exception type specified by > InterruptType is uninstalled. > > The installed handler is called once for each processor interrupt or e= xception. > > - NOTE: This function should be invoked after InitializeCpuExceptionHand= lers() > or > > - InitializeCpuInterruptHandlers() invoked, otherwise EFI_UNSUPPORTED > returned. > > + NOTE: This function should be invoked after InitializeCpuExceptionHand= lers() > is invoked, > > + otherwise EFI_UNSUPPORTED returned. > > > > @param[in] InterruptType Defines which interrupt or exception to = hook. > > @param[in] InterruptHandler A pointer to a function of type > EFI_CPU_INTERRUPT_HANDLER that is called > > diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.c b/UefiCpuPkg/CpuDxe/CpuDxe.c > index 00f3cb0957..a6a91507f6 100644 > --- a/UefiCpuPkg/CpuDxe/CpuDxe.c > +++ b/UefiCpuPkg/CpuDxe/CpuDxe.c > @@ -1,7 +1,7 @@ > /** @file > > CPU DXE Module to produce CPU ARCH Protocol. > > > > - Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.
> > + Copyright (c) 2008 - 2022, Intel Corporation. All rights reserved.
> > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > **/ > > @@ -10,6 +10,8 @@ > #include "CpuMp.h" > > #include "CpuPageTable.h" > > > > +#define CPU_INTERRUPT_NUM 256 > > + > > // > > // Global Variables > > // > > @@ -924,9 +926,12 @@ InitInterruptDescriptorTable ( > VOID > > ) > > { > > - EFI_STATUS Status; > > - EFI_VECTOR_HANDOFF_INFO *VectorInfoList; > > - EFI_VECTOR_HANDOFF_INFO *VectorInfo; > > + EFI_STATUS Status; > > + EFI_VECTOR_HANDOFF_INFO *VectorInfoList; > > + EFI_VECTOR_HANDOFF_INFO *VectorInfo; > > + IA32_IDT_GATE_DESCRIPTOR *IdtTable; > > + IA32_DESCRIPTOR IdtDescriptor; > > + UINTN IdtEntryCount; > > > > VectorInfo =3D NULL; > > Status =3D EfiGetSystemConfigurationTable (&gEfiVectorHandoffTable= Guid, > (VOID **)&VectorInfoList); > > @@ -934,7 +939,25 @@ InitInterruptDescriptorTable ( > VectorInfo =3D VectorInfoList; > > } > > > > - Status =3D InitializeCpuInterruptHandlers (VectorInfo); > > + AsmReadIdtr (&IdtDescriptor); > > + IdtEntryCount =3D (IdtDescriptor.Limit + 1) / sizeof > (IA32_IDT_GATE_DESCRIPTOR); > > + if (IdtEntryCount < CPU_INTERRUPT_NUM) { > > + // > > + // Increase Interrupt Descriptor Table and Copy the old IDT table in > > + // > > + IdtTable =3D AllocateZeroPool (sizeof (IA32_IDT_GATE_DESCRIPTOR) * > CPU_INTERRUPT_NUM); > > + ASSERT (IdtTable !=3D NULL); > > + CopyMem (IdtTable, (VOID *)IdtDescriptor.Base, sizeof > (IA32_IDT_GATE_DESCRIPTOR) * IdtEntryCount); > > + > > + // > > + // Load Interrupt Descriptor Table > > + // > > + IdtDescriptor.Base =3D (UINTN)IdtTable; > > + IdtDescriptor.Limit =3D (UINT16)(sizeof (IA32_IDT_GATE_DESCRIPTOR) * > CPU_INTERRUPT_NUM - 1); > > + AsmWriteIdtr (&IdtDescriptor); > > + } > > + > > + Status =3D InitializeCpuExceptionHandlers (VectorInfo); > > ASSERT_EFI_ERROR (Status); > > } > > > > diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c > b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c > index f139131a7c..c7c1fe31d2 100644 > --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c > +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c > @@ -1,7 +1,7 @@ > /** @file > > CPU exception handler library implemenation for DXE modules. > > > > - Copyright (c) 2013 - 2017, Intel Corporation. All rights reserved.
> > + Copyright (c) 2013 - 2022, Intel Corporation. All rights reserved.
> > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > **/ > > @@ -17,8 +17,8 @@ CONST UINTN mDoFarReturnFlag =3D 0; > RESERVED_VECTORS_DATA mReservedVectorsData[CPU_INTERRUPT_NUM]; > > EFI_CPU_INTERRUPT_HANDLER > mExternalInterruptHandlerTable[CPU_INTERRUPT_NUM]; > > EXCEPTION_HANDLER_DATA mExceptionHandlerData =3D { > > - 0, // To be fixed > > - 0, // To be fixed > > + CPU_INTERRUPT_NUM, > > + 0, // To be fixed > > mReservedVectorsData, > > mExternalInterruptHandlerTable > > }; > > @@ -69,76 +69,6 @@ InitializeCpuExceptionHandlers ( > return InitializeCpuExceptionHandlersWorker (VectorInfo, > &mExceptionHandlerData); > > } > > > > -/** > > - Initializes all CPU interrupt/exceptions entries and provides the defa= ult > interrupt/exception handlers. > > - > > - Caller should try to get an array of interrupt and/or exception vector= s that are > in use and need to > > - persist by EFI_VECTOR_HANDOFF_INFO defined in PI 1.3 specification. > > - If caller cannot get reserved vector list or it does not exists, set V= ectorInfo to > NULL. > > - If VectorInfo is not NULL, the exception vectors will be initialized p= er vector > attribute accordingly. > > - > > - @param[in] VectorInfo Pointer to reserved vector list. > > - > > - @retval EFI_SUCCESS All CPU interrupt/exception entries have= been > successfully initialized > > - with default interrupt/exception handler= s. > > - @retval EFI_INVALID_PARAMETER VectorInfo includes the invalid content = if > VectorInfo is not NULL. > > - @retval EFI_UNSUPPORTED This function is not supported. > > - > > -**/ > > -EFI_STATUS > > -EFIAPI > > -InitializeCpuInterruptHandlers ( > > - IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL > > - ) > > -{ > > - EFI_STATUS Status; > > - IA32_IDT_GATE_DESCRIPTOR *IdtTable; > > - IA32_DESCRIPTOR IdtDescriptor; > > - UINTN IdtEntryCount; > > - EXCEPTION_HANDLER_TEMPLATE_MAP TemplateMap; > > - > > - SetMem ((VOID *)mReservedVectorsData, sizeof (RESERVED_VECTORS_DATA) > * CPU_INTERRUPT_NUM, 0xff); > > - if (VectorInfo !=3D NULL) { > > - Status =3D ReadAndVerifyVectorInfo (VectorInfo, mReservedVectorsData= , > CPU_INTERRUPT_NUM); > > - if (EFI_ERROR (Status)) { > > - return EFI_INVALID_PARAMETER; > > - } > > - } > > - > > - // > > - // Read IDT descriptor and calculate IDT size > > - // > > - AsmReadIdtr (&IdtDescriptor); > > - IdtEntryCount =3D (IdtDescriptor.Limit + 1) / sizeof > (IA32_IDT_GATE_DESCRIPTOR); > > - if (IdtEntryCount > CPU_INTERRUPT_NUM) { > > - IdtEntryCount =3D CPU_INTERRUPT_NUM; > > - } > > - > > - // > > - // Create Interrupt Descriptor Table and Copy the old IDT table in > > - // > > - IdtTable =3D AllocateZeroPool (sizeof (IA32_IDT_GATE_DESCRIPTOR) * > CPU_INTERRUPT_NUM); > > - ASSERT (IdtTable !=3D NULL); > > - CopyMem (IdtTable, (VOID *)IdtDescriptor.Base, sizeof > (IA32_IDT_GATE_DESCRIPTOR) * IdtEntryCount); > > - > > - AsmGetTemplateAddressMap (&TemplateMap); > > - ASSERT (TemplateMap.ExceptionStubHeaderSize <=3D HOOKAFTER_STUB_SIZE); > > - > > - mExceptionHandlerData.IdtEntryCount =3D CPU_INTERRUPT_NUM; > > - InitializeSpinLock (&mExceptionHandlerData.DisplayMessageSpinLock); > > - > > - UpdateIdtTable (IdtTable, &TemplateMap, &mExceptionHandlerData); > > - > > - // > > - // Load Interrupt Descriptor Table > > - // > > - IdtDescriptor.Base =3D (UINTN)IdtTable; > > - IdtDescriptor.Limit =3D (UINT16)(sizeof (IA32_IDT_GATE_DESCRIPTOR) * > CPU_INTERRUPT_NUM - 1); > > - AsmWriteIdtr ((IA32_DESCRIPTOR *)&IdtDescriptor); > > - > > - return EFI_SUCCESS; > > -} > > - > > /** > > Registers a function to be called from the processor interrupt handler= . > > > > @@ -146,8 +76,8 @@ InitializeCpuInterruptHandlers ( > interrupt or exception type specified by InterruptType. If InterruptHa= ndler is > NULL, then the > > handler for the processor interrupt or exception type specified by > InterruptType is uninstalled. > > The installed handler is called once for each processor interrupt or e= xception. > > - NOTE: This function should be invoked after InitializeCpuExceptionHand= lers() > or > > - InitializeCpuInterruptHandlers() invoked, otherwise EFI_UNSUPPORTED > returned. > > + NOTE: This function should be invoked after InitializeCpuExceptionHand= lers() > is invoked, > > + otherwise EFI_UNSUPPORTED returned. > > > > @param[in] InterruptType Defines which interrupt or exception to = hook. > > @param[in] InterruptHandler A pointer to a function of type > EFI_CPU_INTERRUPT_HANDLER that is called > > diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuException.c > b/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuException.c > index 687fc4177f..1ae611c75e 100644 > --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuException.c > +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuException.c > @@ -1,7 +1,7 @@ > /** @file > > CPU exception handler library implementation for PEIM module. > > > > -Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.
> > +Copyright (c) 2016 - 2022, Intel Corporation. All rights reserved.
> > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > **/ > > @@ -133,6 +133,7 @@ InitializeCpuExceptionHandlers ( > > > ExceptionHandlerData =3D AllocatePool (sizeof (EXCEPTION_HANDLER_DATA)= ); > > ASSERT (ExceptionHandlerData !=3D NULL); > > + ExceptionHandlerData->IdtEntryCount =3D CPU_EXCEPTION_NUM; > > ExceptionHandlerData->ReservedVectors =3D ReservedVectors; > > ExceptionHandlerData->ExternalInterruptHandler =3D NULL; > > InitializeSpinLock (&ExceptionHandlerData->DisplayMessageSpinLock); > > @@ -148,64 +149,6 @@ InitializeCpuExceptionHandlers ( > return EFI_SUCCESS; > > } > > > > -/** > > - Initializes all CPU interrupt/exceptions entries and provides the defa= ult > interrupt/exception handlers. > > - > > - Caller should try to get an array of interrupt and/or exception vector= s that are > in use and need to > > - persist by EFI_VECTOR_HANDOFF_INFO defined in PI 1.3 specification. > > - If caller cannot get reserved vector list or it does not exists, set V= ectorInfo to > NULL. > > - If VectorInfo is not NULL, the exception vectors will be initialized p= er vector > attribute accordingly. > > - > > - @param[in] VectorInfo Pointer to reserved vector list. > > - > > - @retval EFI_SUCCESS All CPU interrupt/exception entries have= been > successfully initialized > > - with default interrupt/exception handler= s. > > - @retval EFI_INVALID_PARAMETER VectorInfo includes the invalid content = if > VectorInfo is not NULL. > > - @retval EFI_UNSUPPORTED This function is not supported. > > - > > -**/ > > -EFI_STATUS > > -EFIAPI > > -InitializeCpuInterruptHandlers ( > > - IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL > > - ) > > -{ > > - return EFI_UNSUPPORTED; > > -} > > - > > -/** > > - Registers a function to be called from the processor interrupt handler= . > > - > > - This function registers and enables the handler specified by Interrupt= Handler > for a processor > > - interrupt or exception type specified by InterruptType. If InterruptHa= ndler is > NULL, then the > > - handler for the processor interrupt or exception type specified by > InterruptType is uninstalled. > > - The installed handler is called once for each processor interrupt or e= xception. > > - NOTE: This function should be invoked after InitializeCpuExceptionHand= lers() > or > > - InitializeCpuInterruptHandlers() invoked, otherwise EFI_UNSUPPORTED > returned. > > - > > - @param[in] InterruptType Defines which interrupt or exception to = hook. > > - @param[in] InterruptHandler A pointer to a function of type > EFI_CPU_INTERRUPT_HANDLER that is called > > - when a processor interrupt occurs. If th= is parameter is NULL, > then the handler > > - will be uninstalled. > > - > > - @retval EFI_SUCCESS The handler for the processor interrupt = was > successfully installed or uninstalled. > > - @retval EFI_ALREADY_STARTED InterruptHandler is not NULL, and a hand= ler > for InterruptType was > > - previously installed. > > - @retval EFI_INVALID_PARAMETER InterruptHandler is NULL, and a handler = for > InterruptType was not > > - previously installed. > > - @retval EFI_UNSUPPORTED The interrupt specified by InterruptType= is not > supported, > > - or this function is not supported. > > -**/ > > -EFI_STATUS > > -EFIAPI > > -RegisterCpuInterruptHandler ( > > - IN EFI_EXCEPTION_TYPE InterruptType, > > - IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler > > - ) > > -{ > > - return EFI_UNSUPPORTED; > > -} > > - > > /** > > Initializes all CPU exceptions entries with optional extra initializat= ions. > > > > diff --git > a/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiDxeSmmCpuException.c > b/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiDxeSmmCpuException.c > index f47a80dcab..a7d0897ef1 100644 > --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiDxeSmmCpuException.c > +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiDxeSmmCpuException.c > @@ -1,7 +1,7 @@ > /** @file > > CPU Exception Library provides PEI/DXE/SMM CPU common exception handle= r. > > > > -Copyright (c) 2012 - 2018, Intel Corporation. All rights reserved.
> > +Copyright (c) 2012 - 2022, Intel Corporation. All rights reserved.
> > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > **/ > > @@ -261,31 +261,26 @@ InitializeCpuExceptionHandlersWorker ( > RESERVED_VECTORS_DATA *ReservedVectors; > > > > ReservedVectors =3D ExceptionHandlerData->ReservedVectors; > > - SetMem ((VOID *)ReservedVectors, sizeof (RESERVED_VECTORS_DATA) * > CPU_EXCEPTION_NUM, 0xff); > > + SetMem ((VOID *)ReservedVectors, sizeof (RESERVED_VECTORS_DATA) * > ExceptionHandlerData->IdtEntryCount, 0xff); > > if (VectorInfo !=3D NULL) { > > - Status =3D ReadAndVerifyVectorInfo (VectorInfo, ReservedVectors, > CPU_EXCEPTION_NUM); > > + Status =3D ReadAndVerifyVectorInfo (VectorInfo, ReservedVectors, > ExceptionHandlerData->IdtEntryCount); > > if (EFI_ERROR (Status)) { > > return EFI_INVALID_PARAMETER; > > } > > } > > > > // > > - // Read IDT descriptor and calculate IDT size > > + // Setup the exception handlers according to IDT size, but no more tha= n > > + // ExceptionHandlerData->IdtEntryCount (32 in PEI and SMM, 256 in DX= E) > handlers. > > // > > AsmReadIdtr (&IdtDescriptor); > > - IdtEntryCount =3D (IdtDescriptor.Limit + 1) / sizeof > (IA32_IDT_GATE_DESCRIPTOR); > > - if (IdtEntryCount > CPU_EXCEPTION_NUM) { > > - // > > - // CPU exception library only setup CPU_EXCEPTION_NUM exception hand= ler > at most > > - // > > - IdtEntryCount =3D CPU_EXCEPTION_NUM; > > - } > > + IdtEntryCount =3D (IdtDescriptor.Limit + 1) / si= zeof > (IA32_IDT_GATE_DESCRIPTOR); > > + ExceptionHandlerData->IdtEntryCount =3D MIN (IdtEntryCount, > ExceptionHandlerData->IdtEntryCount); > > > > IdtTable =3D (IA32_IDT_GATE_DESCRIPTOR *)IdtDescriptor.Base; > > AsmGetTemplateAddressMap (&TemplateMap); > > ASSERT (TemplateMap.ExceptionStubHeaderSize <=3D HOOKAFTER_STUB_SIZE); > > > > - ExceptionHandlerData->IdtEntryCount =3D IdtEntryCount; > > UpdateIdtTable (IdtTable, &TemplateMap, ExceptionHandlerData); > > > > return EFI_SUCCESS; > > diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuException= .c > b/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuException.c > index 6e5216380d..e894ead612 100644 > --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuException.c > +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuException.c > @@ -1,7 +1,7 @@ > /** @file > > CPU exception handler library implemenation for SEC/PEIM modules. > > > > -Copyright (c) 2012 - 2018, Intel Corporation. All rights reserved.
> > +Copyright (c) 2012 - 2022, Intel Corporation. All rights reserved.
> > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > **/ > > @@ -166,31 +166,6 @@ InitializeCpuExceptionHandlers ( > return EFI_SUCCESS; > > } > > > > -/** > > - Initializes all CPU interrupt/exceptions entries and provides the defa= ult > interrupt/exception handlers. > > - > > - Caller should try to get an array of interrupt and/or exception vector= s that are > in use and need to > > - persist by EFI_VECTOR_HANDOFF_INFO defined in PI 1.3 specification. > > - If caller cannot get reserved vector list or it does not exists, set V= ectorInfo to > NULL. > > - If VectorInfo is not NULL, the exception vectors will be initialized p= er vector > attribute accordingly. > > - > > - @param[in] VectorInfo Pointer to reserved vector list. > > - > > - @retval EFI_SUCCESS All CPU interrupt/exception entries have= been > successfully initialized > > - with default interrupt/exception handler= s. > > - @retval EFI_INVALID_PARAMETER VectorInfo includes the invalid content = if > VectorInfo is not NULL. > > - @retval EFI_UNSUPPORTED This function is not supported. > > - > > -**/ > > -EFI_STATUS > > -EFIAPI > > -InitializeCpuInterruptHandlers ( > > - IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL > > - ) > > -{ > > - return EFI_UNSUPPORTED; > > -} > > - > > /** > > Registers a function to be called from the processor interrupt handler= . > > > > @@ -198,8 +173,8 @@ InitializeCpuInterruptHandlers ( > interrupt or exception type specified by InterruptType. If InterruptHa= ndler is > NULL, then the > > handler for the processor interrupt or exception type specified by > InterruptType is uninstalled. > > The installed handler is called once for each processor interrupt or e= xception. > > - NOTE: This function should be invoked after InitializeCpuExceptionHand= lers() > or > > - InitializeCpuInterruptHandlers() invoked, otherwise EFI_UNSUPPORTED > returned. > > + NOTE: This function should be invoked after InitializeCpuExceptionHand= lers() > is invoked, > > + otherwise EFI_UNSUPPORTED returned. > > > > @param[in] InterruptType Defines which interrupt or exception to = hook. > > @param[in] InterruptHandler A pointer to a function of type > EFI_CPU_INTERRUPT_HANDLER that is called > > diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmException.c > b/UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmException.c > index 9f0af4120a..ec643556c7 100644 > --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmException.c > +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmException.c > @@ -1,7 +1,7 @@ > /** @file > > CPU exception handler library implementation for SMM modules. > > > > - Copyright (c) 2013 - 2017, Intel Corporation. All rights reserved.
> > + Copyright (c) 2013 - 2022, Intel Corporation. All rights reserved.
> > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > **/ > > @@ -14,8 +14,8 @@ CONST UINTN mDoFarReturnFlag =3D 1; > RESERVED_VECTORS_DATA mReservedVectorsData[CPU_EXCEPTION_NUM]; > > EFI_CPU_INTERRUPT_HANDLER > mExternalInterruptHandlerTable[CPU_EXCEPTION_NUM]; > > EXCEPTION_HANDLER_DATA mExceptionHandlerData =3D { > > - 0, // To be fixed > > - 0, // To be fixed > > + CPU_EXCEPTION_NUM, > > + 0, // To be fixed > > mReservedVectorsData, > > mExternalInterruptHandlerTable > > }; > > @@ -62,31 +62,6 @@ InitializeCpuExceptionHandlers ( > return InitializeCpuExceptionHandlersWorker (VectorInfo, > &mExceptionHandlerData); > > } > > > > -/** > > - Initializes all CPU interrupt/exceptions entries and provides the defa= ult > interrupt/exception handlers. > > - > > - Caller should try to get an array of interrupt and/or exception vector= s that are > in use and need to > > - persist by EFI_VECTOR_HANDOFF_INFO defined in PI 1.3 specification. > > - If caller cannot get reserved vector list or it does not exists, set V= ectorInfo to > NULL. > > - If VectorInfo is not NULL, the exception vectors will be initialized p= er vector > attribute accordingly. > > - > > - @param[in] VectorInfo Pointer to reserved vector list. > > - > > - @retval EFI_SUCCESS All CPU interrupt/exception entries have= been > successfully initialized > > - with default interrupt/exception handler= s. > > - @retval EFI_INVALID_PARAMETER VectorInfo includes the invalid content = if > VectorInfo is not NULL. > > - @retval EFI_UNSUPPORTED This function is not supported. > > - > > -**/ > > -EFI_STATUS > > -EFIAPI > > -InitializeCpuInterruptHandlers ( > > - IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL > > - ) > > -{ > > - return EFI_UNSUPPORTED; > > -} > > - > > /** > > Registers a function to be called from the processor interrupt handler= . > > > > @@ -94,8 +69,8 @@ InitializeCpuInterruptHandlers ( > interrupt or exception type specified by InterruptType. If InterruptHa= ndler is > NULL, then the > > handler for the processor interrupt or exception type specified by > InterruptType is uninstalled. > > The installed handler is called once for each processor interrupt or e= xception. > > - NOTE: This function should be invoked after InitializeCpuExceptionHand= lers() > or > > - InitializeCpuInterruptHandlers() invoked, otherwise EFI_UNSUPPORTED > returned. > > + NOTE: This function should be invoked after InitializeCpuExceptionHand= lers() > is invoked, > > + otherwise EFI_UNSUPPORTED returned. > > > > @param[in] InterruptType Defines which interrupt or exception to = hook. > > @param[in] InterruptHandler A pointer to a function of type > EFI_CPU_INTERRUPT_HANDLER that is called > > -- > 2.35.1.windows.2 > > > > -=3D-=3D-=3D-=3D-=3D-=3D > Groups.io Links: You receive all messages sent to this group. > View/Reply Online (#89919): https://edk2.groups.io/g/devel/message/89919 > Mute This Topic: https://groups.io/mt/91231770/1768734 > Group Owner: devel+owner@edk2.groups.io > Unsubscribe: https://edk2.groups.io/g/devel/unsub [jian.j.wang@intel.com] > -=3D-=3D-=3D-=3D-=3D-=3D >