Re: [edk2] [PATCH] UefiCpuPkg PiSmmCpuDxeSmm: Only DumpCpuContext in error case
On 12/07/17 02:49, Star Zeng wrote: > Only DumpCpuContext in error case, otherwise there will be too many > debug messages from DumpCpuContext() when SmmProfile feature is enabled > by setting PcdCpuSmmProfileEnable to TRUE. Those debug messages are not > needed for SmmProfile feature as it will record those information to > buffer for further dump. > > Cc: Jiewen Yao > Cc: Eric Dong > Cc: Laszlo Ersek > Cc: Ruiyu Ni > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Star Zeng > --- > UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c | 6 -- > UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c | 6 -- > 2 files changed, 8 insertions(+), 4 deletions(-) > > diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c > b/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c > index 0396f2daaaed..6e1ffe7c6287 100644 > --- a/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c > +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c > @@ -134,12 +134,12 @@ SmiPFHandler ( >} > >// > - // If a page fault occurs in SMM range > + // If a page fault occurs in non-SMRAM range. >// >if ((PFAddress < mCpuHotPlugData.SmrrBase) || >(PFAddress >= mCpuHotPlugData.SmrrBase + mCpuHotPlugData.SmrrSize)) { > -DumpCpuContext (InterruptType, SystemContext); > if ((SystemContext.SystemContextIa32->ExceptionData & IA32_PF_EC_ID) != > 0) { > + DumpCpuContext (InterruptType, SystemContext); >DEBUG ((DEBUG_ERROR, "Code executed on IP(0x%x) out of SMM range after > SMM is locked!\n", PFAddress)); >DEBUG_CODE ( > DumpModuleInfoByIp (*(UINTN > *)(UINTN)SystemContext.SystemContextIa32->Esp); > @@ -147,6 +147,7 @@ SmiPFHandler ( >CpuDeadLoop (); > } > if (IsSmmCommBufferForbiddenAddress (PFAddress)) { > + DumpCpuContext (InterruptType, SystemContext); >DEBUG ((DEBUG_ERROR, "Access SMM communication forbidden address > (0x%x)!\n", PFAddress)); >DEBUG_CODE ( > DumpModuleInfoByIp ((UINTN)SystemContext.SystemContextIa32->Eip); > @@ -160,6 +161,7 @@ SmiPFHandler ( >// >if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & BIT1) != 0 && >(PFAddress < EFI_PAGE_SIZE)) { > +DumpCpuContext (InterruptType, SystemContext); > DEBUG ((DEBUG_ERROR, "!!! NULL pointer access !!!\n")); > DEBUG_CODE ( >DumpModuleInfoByIp ((UINTN)SystemContext.SystemContextIa32->Eip); > diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c > b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c > index 79a26d7ec6a3..6478c6c3e355 100644 > --- a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c > +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c > @@ -851,12 +851,12 @@ SmiPFHandler ( >} > >// > - // If a page fault occurs in SMM range > + // If a page fault occurs in non-SMRAM range. >// >if ((PFAddress < mCpuHotPlugData.SmrrBase) || >(PFAddress >= mCpuHotPlugData.SmrrBase + mCpuHotPlugData.SmrrSize)) { > -DumpCpuContext (InterruptType, SystemContext); > if ((SystemContext.SystemContextX64->ExceptionData & IA32_PF_EC_ID) != > 0) { > + DumpCpuContext (InterruptType, SystemContext); >DEBUG ((DEBUG_ERROR, "Code executed on IP(0x%lx) out of SMM range > after SMM is locked!\n", PFAddress)); >DEBUG_CODE ( > DumpModuleInfoByIp (*(UINTN > *)(UINTN)SystemContext.SystemContextX64->Rsp); > @@ -864,6 +864,7 @@ SmiPFHandler ( >CpuDeadLoop (); > } > if (IsSmmCommBufferForbiddenAddress (PFAddress)) { > + DumpCpuContext (InterruptType, SystemContext); >DEBUG ((DEBUG_ERROR, "Access SMM communication forbidden address > (0x%lx)!\n", PFAddress)); >DEBUG_CODE ( > DumpModuleInfoByIp ((UINTN)SystemContext.SystemContextX64->Rip); > @@ -877,6 +878,7 @@ SmiPFHandler ( >// >if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & BIT1) != 0 && >(PFAddress < EFI_PAGE_SIZE)) { > +DumpCpuContext (InterruptType, SystemContext); > DEBUG ((DEBUG_ERROR, "!!! NULL pointer access !!!\n")); > DEBUG_CODE ( >DumpModuleInfoByIp ((UINTN)SystemContext.SystemContextX64->Rip); > Looks reasonable to me. Acked-by: Laszlo Ersek Thanks! Laszlo ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH] UefiCpuPkg PiSmmCpuDxeSmm: Only DumpCpuContext in error case
That will be in another patch. :) Thanks, Star -Original Message- From: Yao, Jiewen Sent: Thursday, December 7, 2017 11:03 AM To: Zeng, Star ; edk2-devel@lists.01.org Cc: Dong, Eric ; Laszlo Ersek ; Ni, Ruiyu Subject: RE: [PATCH] UefiCpuPkg PiSmmCpuDxeSmm: Only DumpCpuContext in error case Good enhancement. Reviewed-by: jiewen@intel.com BTW: I think we should also ASSERT(FALSE) if StaticPage and Smmprofile are both TRUE > -Original Message- > From: Zeng, Star > Sent: Thursday, December 7, 2017 9:49 AM > To: edk2-devel@lists.01.org > Cc: Zeng, Star ; Yao, Jiewen > ; Dong, Eric ; Laszlo Ersek > ; Ni, Ruiyu > Subject: [PATCH] UefiCpuPkg PiSmmCpuDxeSmm: Only DumpCpuContext in > error case > > Only DumpCpuContext in error case, otherwise there will be too many > debug messages from DumpCpuContext() when SmmProfile feature is > enabled by setting PcdCpuSmmProfileEnable to TRUE. Those debug > messages are not needed for SmmProfile feature as it will record those > information to buffer for further dump. > > Cc: Jiewen Yao > Cc: Eric Dong > Cc: Laszlo Ersek > Cc: Ruiyu Ni > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Star Zeng > --- > UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c | 6 -- > UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c | 6 -- > 2 files changed, 8 insertions(+), 4 deletions(-) > > diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c > b/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c > index 0396f2daaaed..6e1ffe7c6287 100644 > --- a/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c > +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c > @@ -134,12 +134,12 @@ SmiPFHandler ( >} > >// > - // If a page fault occurs in SMM range > + // If a page fault occurs in non-SMRAM range. >// >if ((PFAddress < mCpuHotPlugData.SmrrBase) || >(PFAddress >= mCpuHotPlugData.SmrrBase + > mCpuHotPlugData.SmrrSize)) { > -DumpCpuContext (InterruptType, SystemContext); > if ((SystemContext.SystemContextIa32->ExceptionData & > IA32_PF_EC_ID) != 0) { > + DumpCpuContext (InterruptType, SystemContext); >DEBUG ((DEBUG_ERROR, "Code executed on IP(0x%x) out of SMM > range after SMM is locked!\n", PFAddress)); >DEBUG_CODE ( > DumpModuleInfoByIp (*(UINTN > *)(UINTN)SystemContext.SystemContextIa32->Esp); > @@ -147,6 +147,7 @@ SmiPFHandler ( >CpuDeadLoop (); > } > if (IsSmmCommBufferForbiddenAddress (PFAddress)) { > + DumpCpuContext (InterruptType, SystemContext); >DEBUG ((DEBUG_ERROR, "Access SMM communication forbidden > address (0x%x)!\n", PFAddress)); >DEBUG_CODE ( > DumpModuleInfoByIp > ((UINTN)SystemContext.SystemContextIa32->Eip); > @@ -160,6 +161,7 @@ SmiPFHandler ( >// >if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & BIT1) != 0 && >(PFAddress < EFI_PAGE_SIZE)) { > +DumpCpuContext (InterruptType, SystemContext); > DEBUG ((DEBUG_ERROR, "!!! NULL pointer access !!!\n")); > DEBUG_CODE ( >DumpModuleInfoByIp > ((UINTN)SystemContext.SystemContextIa32->Eip); > diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c > b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c > index 79a26d7ec6a3..6478c6c3e355 100644 > --- a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c > +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c > @@ -851,12 +851,12 @@ SmiPFHandler ( >} > >// > - // If a page fault occurs in SMM range > + // If a page fault occurs in non-SMRAM range. >// >if ((PFAddress < mCpuHotPlugData.SmrrBase) || >(PFAddress >= mCpuHotPlugData.SmrrBase + > mCpuHotPlugData.SmrrSize)) { > -DumpCpuContext (InterruptType, SystemContext); > if ((SystemContext.SystemContextX64->ExceptionData & > IA32_PF_EC_ID) != 0) { > + DumpCpuContext (InterruptType, SystemContext); >DEBUG ((DEBUG_ERROR, "Code executed on IP(0x%lx) out of SMM > range after SMM is locked!\n", PFAddress)); >DEBUG_CODE ( > DumpModuleInfoByIp (*(UINTN > *)(UINTN)SystemContext.SystemContextX64->Rsp); > @@ -864,6 +864,7 @@ SmiPFHandler ( >CpuDeadLoop (); > } > if (IsSmmCommBufferForbiddenAddress (PFAddress)) { > + DumpCpuContext (InterruptType, SystemContext); >DEBUG ((DEBUG_ERROR, "Access SMM communication forbidden > address (0x%lx)!\n", PFAddress)); >DEBUG_CODE ( > DumpModuleInfoByIp > ((UINTN)SystemContext.SystemContextX64->Rip); > @@ -877,6 +878,7 @@ SmiPFHandler ( >// >if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & BIT1) != 0 && >(PFAddress < EFI_PAGE_SIZE)) { > +DumpCpuContext (InterruptType, SystemContext); > DEBUG ((DEBUG_ERROR, "!!! NULL pointer access !!!\n")); > DEBUG_CODE ( >DumpModuleInfoByIp > ((UINTN)SystemContext.SystemContextX64->Rip); > -- > 2.7.0.windows.1 ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH] UefiCpuPkg PiSmmCpuDxeSmm: Only DumpCpuContext in error case
Good enhancement. Reviewed-by: jiewen@intel.com BTW: I think we should also ASSERT(FALSE) if StaticPage and Smmprofile are both TRUE > -Original Message- > From: Zeng, Star > Sent: Thursday, December 7, 2017 9:49 AM > To: edk2-devel@lists.01.org > Cc: Zeng, Star ; Yao, Jiewen ; > Dong, Eric ; Laszlo Ersek ; Ni, Ruiyu > > Subject: [PATCH] UefiCpuPkg PiSmmCpuDxeSmm: Only DumpCpuContext in > error case > > Only DumpCpuContext in error case, otherwise there will be too many > debug messages from DumpCpuContext() when SmmProfile feature is enabled > by setting PcdCpuSmmProfileEnable to TRUE. Those debug messages are not > needed for SmmProfile feature as it will record those information to > buffer for further dump. > > Cc: Jiewen Yao > Cc: Eric Dong > Cc: Laszlo Ersek > Cc: Ruiyu Ni > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Star Zeng > --- > UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c | 6 -- > UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c | 6 -- > 2 files changed, 8 insertions(+), 4 deletions(-) > > diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c > b/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c > index 0396f2daaaed..6e1ffe7c6287 100644 > --- a/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c > +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c > @@ -134,12 +134,12 @@ SmiPFHandler ( >} > >// > - // If a page fault occurs in SMM range > + // If a page fault occurs in non-SMRAM range. >// >if ((PFAddress < mCpuHotPlugData.SmrrBase) || >(PFAddress >= mCpuHotPlugData.SmrrBase + > mCpuHotPlugData.SmrrSize)) { > -DumpCpuContext (InterruptType, SystemContext); > if ((SystemContext.SystemContextIa32->ExceptionData & > IA32_PF_EC_ID) != 0) { > + DumpCpuContext (InterruptType, SystemContext); >DEBUG ((DEBUG_ERROR, "Code executed on IP(0x%x) out of SMM range > after SMM is locked!\n", PFAddress)); >DEBUG_CODE ( > DumpModuleInfoByIp (*(UINTN > *)(UINTN)SystemContext.SystemContextIa32->Esp); > @@ -147,6 +147,7 @@ SmiPFHandler ( >CpuDeadLoop (); > } > if (IsSmmCommBufferForbiddenAddress (PFAddress)) { > + DumpCpuContext (InterruptType, SystemContext); >DEBUG ((DEBUG_ERROR, "Access SMM communication forbidden > address (0x%x)!\n", PFAddress)); >DEBUG_CODE ( > DumpModuleInfoByIp > ((UINTN)SystemContext.SystemContextIa32->Eip); > @@ -160,6 +161,7 @@ SmiPFHandler ( >// >if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & BIT1) != 0 && >(PFAddress < EFI_PAGE_SIZE)) { > +DumpCpuContext (InterruptType, SystemContext); > DEBUG ((DEBUG_ERROR, "!!! NULL pointer access !!!\n")); > DEBUG_CODE ( >DumpModuleInfoByIp > ((UINTN)SystemContext.SystemContextIa32->Eip); > diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c > b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c > index 79a26d7ec6a3..6478c6c3e355 100644 > --- a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c > +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c > @@ -851,12 +851,12 @@ SmiPFHandler ( >} > >// > - // If a page fault occurs in SMM range > + // If a page fault occurs in non-SMRAM range. >// >if ((PFAddress < mCpuHotPlugData.SmrrBase) || >(PFAddress >= mCpuHotPlugData.SmrrBase + > mCpuHotPlugData.SmrrSize)) { > -DumpCpuContext (InterruptType, SystemContext); > if ((SystemContext.SystemContextX64->ExceptionData & > IA32_PF_EC_ID) != 0) { > + DumpCpuContext (InterruptType, SystemContext); >DEBUG ((DEBUG_ERROR, "Code executed on IP(0x%lx) out of SMM > range after SMM is locked!\n", PFAddress)); >DEBUG_CODE ( > DumpModuleInfoByIp (*(UINTN > *)(UINTN)SystemContext.SystemContextX64->Rsp); > @@ -864,6 +864,7 @@ SmiPFHandler ( >CpuDeadLoop (); > } > if (IsSmmCommBufferForbiddenAddress (PFAddress)) { > + DumpCpuContext (InterruptType, SystemContext); >DEBUG ((DEBUG_ERROR, "Access SMM communication forbidden > address (0x%lx)!\n", PFAddress)); >DEBUG_CODE ( > DumpModuleInfoByIp > ((UINTN)SystemContext.SystemContextX64->Rip); > @@ -877,6 +878,7 @@ SmiPFHandler ( >// >if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & BIT1) != 0 && >(PFAddress < EFI_PAGE_SIZE)) { > +DumpCpuContext (InterruptType, SystemContext); > DEBUG ((DEBUG_ERROR, "!!! NULL pointer access !!!\n")); > DEBUG_CODE ( >DumpModuleInfoByIp > ((UINTN)SystemContext.SystemContextX64->Rip); > -- > 2.7.0.windows.1 ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH] UefiCpuPkg PiSmmCpuDxeSmm: Only DumpCpuContext in error case
Reviewed-by: Eric Dong -Original Message- From: Zeng, Star Sent: Thursday, December 7, 2017 9:49 AM To: edk2-devel@lists.01.org Cc: Zeng, Star; Yao, Jiewen; Dong, Eric; Laszlo Ersek; Ni, Ruiyu Subject: [PATCH] UefiCpuPkg PiSmmCpuDxeSmm: Only DumpCpuContext in error case Only DumpCpuContext in error case, otherwise there will be too many debug messages from DumpCpuContext() when SmmProfile feature is enabled by setting PcdCpuSmmProfileEnable to TRUE. Those debug messages are not needed for SmmProfile feature as it will record those information to buffer for further dump. Cc: Jiewen Yao Cc: Eric Dong Cc: Laszlo Ersek Cc: Ruiyu Ni Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Star Zeng --- UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c | 6 -- UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c | 6 -- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c b/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c index 0396f2daaaed..6e1ffe7c6287 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c @@ -134,12 +134,12 @@ SmiPFHandler ( } // - // If a page fault occurs in SMM range + // If a page fault occurs in non-SMRAM range. // if ((PFAddress < mCpuHotPlugData.SmrrBase) || (PFAddress >= mCpuHotPlugData.SmrrBase + mCpuHotPlugData.SmrrSize)) { -DumpCpuContext (InterruptType, SystemContext); if ((SystemContext.SystemContextIa32->ExceptionData & IA32_PF_EC_ID) != 0) { + DumpCpuContext (InterruptType, SystemContext); DEBUG ((DEBUG_ERROR, "Code executed on IP(0x%x) out of SMM range after SMM is locked!\n", PFAddress)); DEBUG_CODE ( DumpModuleInfoByIp (*(UINTN *)(UINTN)SystemContext.SystemContextIa32->Esp); @@ -147,6 +147,7 @@ SmiPFHandler ( CpuDeadLoop (); } if (IsSmmCommBufferForbiddenAddress (PFAddress)) { + DumpCpuContext (InterruptType, SystemContext); DEBUG ((DEBUG_ERROR, "Access SMM communication forbidden address (0x%x)!\n", PFAddress)); DEBUG_CODE ( DumpModuleInfoByIp ((UINTN)SystemContext.SystemContextIa32->Eip); @@ -160,6 +161,7 @@ SmiPFHandler ( // if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & BIT1) != 0 && (PFAddress < EFI_PAGE_SIZE)) { +DumpCpuContext (InterruptType, SystemContext); DEBUG ((DEBUG_ERROR, "!!! NULL pointer access !!!\n")); DEBUG_CODE ( DumpModuleInfoByIp ((UINTN)SystemContext.SystemContextIa32->Eip); diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c index 79a26d7ec6a3..6478c6c3e355 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c @@ -851,12 +851,12 @@ SmiPFHandler ( } // - // If a page fault occurs in SMM range + // If a page fault occurs in non-SMRAM range. // if ((PFAddress < mCpuHotPlugData.SmrrBase) || (PFAddress >= mCpuHotPlugData.SmrrBase + mCpuHotPlugData.SmrrSize)) { -DumpCpuContext (InterruptType, SystemContext); if ((SystemContext.SystemContextX64->ExceptionData & IA32_PF_EC_ID) != 0) { + DumpCpuContext (InterruptType, SystemContext); DEBUG ((DEBUG_ERROR, "Code executed on IP(0x%lx) out of SMM range after SMM is locked!\n", PFAddress)); DEBUG_CODE ( DumpModuleInfoByIp (*(UINTN *)(UINTN)SystemContext.SystemContextX64->Rsp); @@ -864,6 +864,7 @@ SmiPFHandler ( CpuDeadLoop (); } if (IsSmmCommBufferForbiddenAddress (PFAddress)) { + DumpCpuContext (InterruptType, SystemContext); DEBUG ((DEBUG_ERROR, "Access SMM communication forbidden address (0x%lx)!\n", PFAddress)); DEBUG_CODE ( DumpModuleInfoByIp ((UINTN)SystemContext.SystemContextX64->Rip); @@ -877,6 +878,7 @@ SmiPFHandler ( // if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & BIT1) != 0 && (PFAddress < EFI_PAGE_SIZE)) { +DumpCpuContext (InterruptType, SystemContext); DEBUG ((DEBUG_ERROR, "!!! NULL pointer access !!!\n")); DEBUG_CODE ( DumpModuleInfoByIp ((UINTN)SystemContext.SystemContextX64->Rip); -- 2.7.0.windows.1 ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
[edk2] [PATCH] UefiCpuPkg PiSmmCpuDxeSmm: Only DumpCpuContext in error case
Only DumpCpuContext in error case, otherwise there will be too many debug messages from DumpCpuContext() when SmmProfile feature is enabled by setting PcdCpuSmmProfileEnable to TRUE. Those debug messages are not needed for SmmProfile feature as it will record those information to buffer for further dump. Cc: Jiewen Yao Cc: Eric Dong Cc: Laszlo Ersek Cc: Ruiyu Ni Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Star Zeng --- UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c | 6 -- UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c | 6 -- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c b/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c index 0396f2daaaed..6e1ffe7c6287 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c @@ -134,12 +134,12 @@ SmiPFHandler ( } // - // If a page fault occurs in SMM range + // If a page fault occurs in non-SMRAM range. // if ((PFAddress < mCpuHotPlugData.SmrrBase) || (PFAddress >= mCpuHotPlugData.SmrrBase + mCpuHotPlugData.SmrrSize)) { -DumpCpuContext (InterruptType, SystemContext); if ((SystemContext.SystemContextIa32->ExceptionData & IA32_PF_EC_ID) != 0) { + DumpCpuContext (InterruptType, SystemContext); DEBUG ((DEBUG_ERROR, "Code executed on IP(0x%x) out of SMM range after SMM is locked!\n", PFAddress)); DEBUG_CODE ( DumpModuleInfoByIp (*(UINTN *)(UINTN)SystemContext.SystemContextIa32->Esp); @@ -147,6 +147,7 @@ SmiPFHandler ( CpuDeadLoop (); } if (IsSmmCommBufferForbiddenAddress (PFAddress)) { + DumpCpuContext (InterruptType, SystemContext); DEBUG ((DEBUG_ERROR, "Access SMM communication forbidden address (0x%x)!\n", PFAddress)); DEBUG_CODE ( DumpModuleInfoByIp ((UINTN)SystemContext.SystemContextIa32->Eip); @@ -160,6 +161,7 @@ SmiPFHandler ( // if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & BIT1) != 0 && (PFAddress < EFI_PAGE_SIZE)) { +DumpCpuContext (InterruptType, SystemContext); DEBUG ((DEBUG_ERROR, "!!! NULL pointer access !!!\n")); DEBUG_CODE ( DumpModuleInfoByIp ((UINTN)SystemContext.SystemContextIa32->Eip); diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c index 79a26d7ec6a3..6478c6c3e355 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c @@ -851,12 +851,12 @@ SmiPFHandler ( } // - // If a page fault occurs in SMM range + // If a page fault occurs in non-SMRAM range. // if ((PFAddress < mCpuHotPlugData.SmrrBase) || (PFAddress >= mCpuHotPlugData.SmrrBase + mCpuHotPlugData.SmrrSize)) { -DumpCpuContext (InterruptType, SystemContext); if ((SystemContext.SystemContextX64->ExceptionData & IA32_PF_EC_ID) != 0) { + DumpCpuContext (InterruptType, SystemContext); DEBUG ((DEBUG_ERROR, "Code executed on IP(0x%lx) out of SMM range after SMM is locked!\n", PFAddress)); DEBUG_CODE ( DumpModuleInfoByIp (*(UINTN *)(UINTN)SystemContext.SystemContextX64->Rsp); @@ -864,6 +864,7 @@ SmiPFHandler ( CpuDeadLoop (); } if (IsSmmCommBufferForbiddenAddress (PFAddress)) { + DumpCpuContext (InterruptType, SystemContext); DEBUG ((DEBUG_ERROR, "Access SMM communication forbidden address (0x%lx)!\n", PFAddress)); DEBUG_CODE ( DumpModuleInfoByIp ((UINTN)SystemContext.SystemContextX64->Rip); @@ -877,6 +878,7 @@ SmiPFHandler ( // if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & BIT1) != 0 && (PFAddress < EFI_PAGE_SIZE)) { +DumpCpuContext (InterruptType, SystemContext); DEBUG ((DEBUG_ERROR, "!!! NULL pointer access !!!\n")); DEBUG_CODE ( DumpModuleInfoByIp ((UINTN)SystemContext.SystemContextX64->Rip); -- 2.7.0.windows.1 ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel