On 1/17/24 07:22, Zhiguang Liu wrote: > The purpose of writing CR3 in ConvertMemoryPageToNotPresent is just > to flush TLB, because CR3 won't be changed in function > ConvertMemoryPageToNotPresent. > After ConvertMemoryPageToNotPresent, there is always a flush TLB > function. Also, because ConvertMemoryPageToNotPresent in called in a > loop, to improve performance, there is no need to flush TLB > inside ConvertMemoryPageToNotPresent. Just flushing TLB after the loop > is enough. > > Cc: Ray Ni <ray...@intel.com> > Cc: Laszlo Ersek <ler...@redhat.com> > Cc: Rahul Kumar <rahul1.ku...@intel.com> > Cc: Gerd Hoffmann <kra...@redhat.com> > Signed-off-by: Zhiguang Liu <zhiguang....@intel.com> > --- > UefiCpuPkg/CpuMpPei/CpuPaging.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/UefiCpuPkg/CpuMpPei/CpuPaging.c b/UefiCpuPkg/CpuMpPei/CpuPaging.c > index 15c7015fb8..b923d9b502 100644 > --- a/UefiCpuPkg/CpuMpPei/CpuPaging.c > +++ b/UefiCpuPkg/CpuMpPei/CpuPaging.c > @@ -76,7 +76,8 @@ AllocatePageTableMemory ( > > /** > This function modifies the page attributes for the memory region specified > - by BaseAddress and Length to not present. > + by BaseAddress and Length to not present. This function only change page > + table, but not flush TLB. Caller have the responsbility to flush TLB. > > Caller should make sure BaseAddress and Length is at page boundary. > > @@ -167,7 +168,6 @@ ConvertMemoryPageToNotPresent ( > } > > ASSERT_EFI_ERROR (Status); > - AsmWriteCr3 (PageTable); > return Status; > } >
Reviewed-by: Laszlo Ersek <ler...@redhat.com> -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#113946): https://edk2.groups.io/g/devel/message/113946 Mute This Topic: https://groups.io/mt/103781133/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/leave/9847357/21656/1706620634/xyzzy [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-