From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.120; helo=mga04.intel.com; envelope-from=dandan.bi@intel.com; receiver=edk2-devel@lists.01.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 8FE71202E5309 for ; Sun, 17 Feb 2019 18:47:50 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Feb 2019 18:47:50 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,382,1544515200"; d="scan'208";a="147652118" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by fmsmga001.fm.intel.com with ESMTP; 17 Feb 2019 18:47:50 -0800 Received: from fmsmsx156.amr.corp.intel.com (10.18.116.74) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.408.0; Sun, 17 Feb 2019 18:47:49 -0800 Received: from shsmsx153.ccr.corp.intel.com (10.239.6.53) by fmsmsx156.amr.corp.intel.com (10.18.116.74) with Microsoft SMTP Server (TLS) id 14.3.408.0; Sun, 17 Feb 2019 18:47:49 -0800 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.102]) by SHSMSX153.ccr.corp.intel.com ([169.254.12.190]) with mapi id 14.03.0415.000; Mon, 18 Feb 2019 10:47:47 +0800 From: "Bi, Dandan" To: "Zeng, Star" , "edk2-devel@lists.01.org" CC: "Wu, Hao A" , Michael Turner , Max Knutsen , "Gao, Liming" Thread-Topic: [edk2] [patch V2] MdeModulePkg/ReportStatusCodeLib: Avoid using AllocatePool if possible Thread-Index: AQHUxA6hIDfPdMzb20K++OtpY3mUOKXgEk6AgATNHVA= Date: Mon, 18 Feb 2019 02:47:46 +0000 Message-ID: <3C0D5C461C9E904E8F62152F6274C0BB40B933D7@SHSMSX104.ccr.corp.intel.com> References: <20190214023907.52356-1-dandan.bi@intel.com> <0C09AFA07DD0434D9E2A0C6AEB0483104026BD16@shsmsx102.ccr.corp.intel.com> In-Reply-To: <0C09AFA07DD0434D9E2A0C6AEB0483104026BD16@shsmsx102.ccr.corp.intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [patch V2] MdeModulePkg/ReportStatusCodeLib: Avoid using AllocatePool if possible X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Feb 2019 02:47:50 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable > -----Original Message----- > From: Zeng, Star > Sent: Friday, February 15, 2019 5:25 PM > To: Bi, Dandan ; edk2-devel@lists.01.org > Cc: Wu, Hao A ; Michael Turner > ; Max Knutsen > ; Gao, Liming ; Zeng, > Star > Subject: RE: [edk2] [patch V2] MdeModulePkg/ReportStatusCodeLib: Avoid > using AllocatePool if possible >=20 > After applying the patch, the author is Max and the Signed-off-by is Dand= an, > is it expected? >=20 > And the code below is better to be into the else condition (stack buffer = is not > enough), right? Thanks for the comments. Yes, I agree. V3 patch has been sent for review.=20 Thanks, Dandan >=20 > if (gBS =3D=3D NULL || gBS->AllocatePool =3D=3D NULL || gBS->FreePool = =3D=3D NULL) { > return EFI_UNSUPPORTED; > } >=20 > // > // Retrieve the current TPL > // > Tpl =3D gBS->RaiseTPL (TPL_HIGH_LEVEL); > gBS->RestoreTPL (Tpl); >=20 >=20 > Thanks, > Star > -----Original Message----- > From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of > Dandan Bi > Sent: Thursday, February 14, 2019 10:39 AM > To: edk2-devel@lists.01.org > Cc: Wu, Hao A ; Michael Turner > ; Max Knutsen > ; Gao, Liming > Subject: [edk2] [patch V2] MdeModulePkg/ReportStatusCodeLib: Avoid > using AllocatePool if possible >=20 > From: Max Knutsen >=20 > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1114 >=20 > V2: simplify the code logic. > update > if (!mHaveExitedBootServices && > (StatusCodeData !=3D (EFI_STATUS_CODE_DATA *) StatusCodeBuffer)) { > gBS->FreePool (StatusCodeData); > } > to > if (StatusCodeData !=3D (EFI_STATUS_CODE_DATA *) StatusCodeBuffer) { > gBS->FreePool (StatusCodeData); > } >=20 > When report status code with ExtendedData data, and the extended data > can fit in the local static buffer, there is no need to use AllocatePool = to hold > the ExtendedData data. >=20 > This patch is just to do the enhancement to avoid using AllocatePool. >=20 > Cc: Jian J Wang > Cc: Hao Wu > Cc: Michael Turner > Cc: Liming Gao > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Dandan Bi > --- > .../Library/DxeReportStatusCodeLib/ReportStatusCodeLib.c | 9 +++++++-- > .../RuntimeDxeReportStatusCodeLib/ReportStatusCodeLib.c | 9 +++++++-- > 2 files changed, 14 insertions(+), 4 deletions(-) >=20 > diff --git > a/MdeModulePkg/Library/DxeReportStatusCodeLib/ReportStatusCodeLib.c > b/MdeModulePkg/Library/DxeReportStatusCodeLib/ReportStatusCodeLib.c > index b28dc5c3bb..c88be5a1a3 100644 > --- > a/MdeModulePkg/Library/DxeReportStatusCodeLib/ReportStatusCodeLib.c > +++ > b/MdeModulePkg/Library/DxeReportStatusCodeLib/ReportStatusCodeLib.c > @@ -505,13 +505,18 @@ ReportStatusCodeEx ( > // > Tpl =3D gBS->RaiseTPL (TPL_HIGH_LEVEL); > gBS->RestoreTPL (Tpl); >=20 > StatusCodeData =3D NULL; > - if (Tpl <=3D TPL_NOTIFY) { > + if (ExtendedDataSize <=3D (MAX_EXTENDED_DATA_SIZE - sizeof > + (EFI_STATUS_CODE_DATA))) { > // > - // Allocate space for the Status Code Header and its buffer > + // Use Buffer instead of allocating if possible. > + // > + StatusCodeData =3D (EFI_STATUS_CODE_DATA *)Buffer; } else if (Tpl <= =3D > + TPL_NOTIFY){ > + // > + // If Buffer is not big enough, allocate space for the Status Code > + Header and its buffer > // > gBS->AllocatePool (EfiBootServicesData, sizeof (EFI_STATUS_CODE_DATA= ) > + ExtendedDataSize, (VOID **)&StatusCodeData); > } >=20 > if (StatusCodeData =3D=3D NULL) { > diff --git > a/MdeModulePkg/Library/RuntimeDxeReportStatusCodeLib/ReportStatusC > odeLib.c > b/MdeModulePkg/Library/RuntimeDxeReportStatusCodeLib/ReportStatusC > odeLib.c > index b73103517a..75e2f88ad2 100644 > --- > a/MdeModulePkg/Library/RuntimeDxeReportStatusCodeLib/ReportStatusC > odeLib.c > +++ > b/MdeModulePkg/Library/RuntimeDxeReportStatusCodeLib/ReportStatusC > od > +++ eLib.c > @@ -635,11 +635,14 @@ ReportStatusCodeEx ( > if (mHaveExitedBootServices) { > if (sizeof (EFI_STATUS_CODE_DATA) + ExtendedDataSize > > MAX_EXTENDED_DATA_SIZE) { > return EFI_OUT_OF_RESOURCES; > } > StatusCodeData =3D (EFI_STATUS_CODE_DATA *) StatusCodeBuffer; > - } else { > + } else if (sizeof (EFI_STATUS_CODE_DATA) + ExtendedDataSize > > MAX_EXTENDED_DATA_SIZE) { > + // > + // Only use AllocatePool for larger ExtendedData. > + // > if (gBS =3D=3D NULL || gBS->AllocatePool =3D=3D NULL || gBS->FreePoo= l =3D=3D NULL) { > return EFI_UNSUPPORTED; > } >=20 > // > @@ -648,10 +651,12 @@ ReportStatusCodeEx ( > StatusCodeData =3D NULL; > gBS->AllocatePool (EfiBootServicesData, sizeof (EFI_STATUS_CODE_DATA= ) > + ExtendedDataSize, (VOID **)&StatusCodeData); > if (StatusCodeData =3D=3D NULL) { > return EFI_OUT_OF_RESOURCES; > } > + } else { > + StatusCodeData =3D (EFI_STATUS_CODE_DATA *) StatusCodeBuffer; > } >=20 > // > // Fill in the extended data header > // > @@ -678,11 +683,11 @@ ReportStatusCodeEx ( > Status =3D InternalReportStatusCode (Type, Value, Instance, CallerId, > StatusCodeData); >=20 > // > // Free the allocated buffer > // > - if (!mHaveExitedBootServices) { > + if (StatusCodeData !=3D (EFI_STATUS_CODE_DATA *) StatusCodeBuffer) { > gBS->FreePool (StatusCodeData); > } >=20 > return Status; > } > -- > 2.18.0.windows.1 >=20 > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel