From 0fb5e515f2f338c25679e2129ef81c4d230649b9 Mon Sep 17 00:00:00 2001 From: Star Zeng Date: Mon, 2 Feb 2015 09:30:34 +0000 Subject: [PATCH] MdeModulePkg Variable: Introduce PcdReclaimVariableSpaceAtEndOfDxe for trying to reclaim variable space at EndOfDxe. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Star Zeng Reviewed-by: Liming Gao git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16687 6f19259b-4bc3-4df7-8a09-765794883524 --- MdeModulePkg/MdeModulePkg.dec | 6 ++++++ MdeModulePkg/MdeModulePkg.uni | Bin 158370 -> 159814 bytes .../Universal/Variable/RuntimeDxe/Variable.c | 9 +++++++++ .../Variable/RuntimeDxe/VariableDxe.c | 3 +++ .../RuntimeDxe/VariableRuntimeDxe.inf | 3 ++- .../Variable/RuntimeDxe/VariableSmm.c | 3 +++ .../Variable/RuntimeDxe/VariableSmm.inf | 3 ++- 7 files changed, 25 insertions(+), 2 deletions(-) diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec index a4cec63a8a..dc79577688 100644 --- a/MdeModulePkg/MdeModulePkg.dec +++ b/MdeModulePkg/MdeModulePkg.dec @@ -738,6 +738,12 @@ # @Prompt Boottime reserved NV variable space size. gEfiMdeModulePkgTokenSpaceGuid.PcdBoottimeReservedNvVariableSpaceSize|0x00|UINT32|0x30000007 + ## Reclaim variable space at EndOfDxe.

+ # The value is FALSE as default for compatibility that variable driver tries to reclaim variable space at ReadyToBoot event.
+ # If the value is set to TRUE, variable driver tries to reclaim variable space at EndOfDxe event.
+ # @Prompt Reclaim variable space at EndOfDxe. + gEfiMdeModulePkgTokenSpaceGuid.PcdReclaimVariableSpaceAtEndOfDxe|FALSE|BOOLEAN|0x30000008 + ## The size of volatile buffer. This buffer is used to store VOLATILE attribute variables. # @Prompt Variable storage size. gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize|0x10000|UINT32|0x30000005 diff --git a/MdeModulePkg/MdeModulePkg.uni b/MdeModulePkg/MdeModulePkg.uni index b2ed93baaf766c48e3bb1d2d588ded413b8275e1..b851370a833b1d8917cfe0e72c0db5d5ab6fd6f1 100644 GIT binary patch delta 340 zcmZ28O$PnLhE4RRne(1FwU zcQ8t`r!tfQCGw^}G-J9BG?;DjGFPSP6H=J?rt_U)4+4!*0AjFl dK+`8yF&0jLcbrk6c}`;coJ7X$a}t@@I03nsUfBQu delta 26 icmX^1fOFAR&J8+=lXr0>G#jM18>BOCH%Mm^;{*Vn5(&xx diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c b/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c index 349128937b..b3c36992e3 100644 --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c @@ -3124,6 +3124,15 @@ ReclaimForOS( EFI_STATUS Status; UINTN RemainingCommonRuntimeVariableSpace; UINTN RemainingHwErrVariableSpace; + STATIC BOOLEAN Reclaimed; + + // + // This function will be called only once at EndOfDxe or ReadyToBoot event. + // + if (Reclaimed) { + return; + } + Reclaimed = TRUE; Status = EFI_SUCCESS; diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c index c61064efde..c5cef31944 100644 --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c @@ -313,6 +313,9 @@ OnEndOfDxe ( // The initialization for variable quota. // InitializeVariableQuota (); + if (PcdGetBool (PcdReclaimVariableSpaceAtEndOfDxe)) { + ReclaimForOS (); + } } /** diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf index ed6d1b5cbb..05d276590c 100644 --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf @@ -103,7 +103,8 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdHwErrStorageSize ## CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdMaxUserNvVariableSpaceSize ## CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdBoottimeReservedNvVariableSpaceSize ## CONSUMES - + gEfiMdeModulePkgTokenSpaceGuid.PcdReclaimVariableSpaceAtEndOfDxe ## CONSUMES + [FeaturePcd] gEfiMdeModulePkgTokenSpaceGuid.PcdVariableCollectStatistics ## CONSUMES # statistic the information of variable. gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultLangDeprecate ## CONSUMES diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c index 815ee2e819..3bf545a4e0 100644 --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c @@ -832,6 +832,9 @@ SmmEndOfDxeCallback ( // The initialization for variable quota. // InitializeVariableQuota (); + if (PcdGetBool (PcdReclaimVariableSpaceAtEndOfDxe)) { + ReclaimForOS (); + } return EFI_SUCCESS; } diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf index e57a731d15..b84ff87e43 100644 --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf @@ -105,7 +105,8 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdHwErrStorageSize ## CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdMaxUserNvVariableSpaceSize ## CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdBoottimeReservedNvVariableSpaceSize ## CONSUMES - + gEfiMdeModulePkgTokenSpaceGuid.PcdReclaimVariableSpaceAtEndOfDxe ## CONSUMES + [FeaturePcd] gEfiMdeModulePkgTokenSpaceGuid.PcdVariableCollectStatistics ## CONSUMES # statistic the information of variable. gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultLangDeprecate ## CONSUMES -- 2.39.2