Re: [PATCH] MdeModulePkg/SetupBrowserDxe: Do not reconnect driver with form-update


Li, Walon
 

May I know the schedule of pushing this change to edk2-master? Or what's next step I should do?

Thanks,
Walon

-----Original Message-----
From: Bi, Dandan [mailto:dandan.bi@...]
Sent: Sunday, May 24, 2020 3:17 PM
To: Li, Walon <walon.li@...>; devel@edk2.groups.io
Cc: Wang, Nickle (HPS SW) <nickle.wang@...>; Chang, Abner (HPS SW/FW Technologist) <abner.chang@...>; Wang, Sunny (HPS SW) <sunnywang@...>
Subject: RE: [PATCH] MdeModulePkg/SetupBrowserDxe: Do not reconnect driver with form-update

Reviewed-by: Dandan Bi <dandan.bi@...>


Thanks,
Dandan
-----Original Message-----
From: Walon Li <walon.li@...>
Sent: Wednesday, May 20, 2020 12:25 PM
To: devel@edk2.groups.io
Cc: walon.li@...; Bi, Dandan <dandan.bi@...>;
nickle.wang@...; abner.chang@...; sunnywang@...
Subject: [PATCH] MdeModulePkg/SetupBrowserDxe: Do not reconnect driver
with form-update

REF:INVALID URI REMOVED
ocore.org_show-5Fbug.cgi-3Fid-3D2701&d=DwIFAg&c=C5b8zRQO1miGmBeVZ2LFWg
&r=nGx4G_nX3rQG_ai3uSb52w&m=j34dsoHyXFEvnpFmkT_iUSnMAF1kWbmBFnMbHVJkJx
U&s=V7D879dizWzD8-fTk-wXmw5sypK5jfdtjWAENVbXntQ&e=

Recording to the spec, the reconnect is activated upon exiting of the
formset or the browser. Exiting is by user but form-browser internal
logic. That means the reconnection is only happened when user press
ESC or _EXIT action to exit form.
Driver callback may update HII form dynamically so form-browser needs
to refresh its internal data. It's not exiting formset for user
exactly and they didn't know what happened. So use a flag to record
that and do not reconnect driver if updated by callback.

Signed-off-by: Walon Li <walon.li@...>
---
MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c | 2 ++
MdeModulePkg/Universal/SetupBrowserDxe/Setup.c | 8 +++++++-
2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c
b/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c
index bafee4c612..7f85873730 100644
--- a/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c
+++ b/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c
@@ -19,6 +19,7 @@ LIST_ENTRY mRefreshEventList =
INITIALIZE_LIST_HEAD_VARIABLE (mRefreshEv
UINT16 mCurFakeQestId; FORM_DISPLAY_ENGINE_FORM
gDisplayFormData; BOOLEAN mFinishRetrieveCall = FALSE;+BOOLEAN
mDynamicFormUpdated = FALSE; /** Check whether the ConfigAccess
protocol is available.@@ -1762,6 +1763,7 @@ FormUpdateNotify (
) { mHiiPackageListUpdated = TRUE;+ mDynamicFormUpdated = TRUE;
return EFI_SUCCESS; }diff --git
a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
index 82067b541c..f936a4b8e8 100644
--- a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
+++ b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
@@ -68,6 +68,7 @@ extern EFI_GUID mCurrentFormSetGuid;
extern EFI_HII_HANDLE mCurrentHiiHandle; extern UINT16
mCurrentFormId; extern FORM_DISPLAY_ENGINE_FORM
gDisplayFormData;+extern BOOLEAN mDynamicFormUpdated; /**
Create a menu with specified formset GUID and form ID, and add it as a
child@@ -536,6 +537,7 @@ SendForm (
} Selection->FormSet = FormSet; mSystemLevelFormSet =
FormSet;+ mDynamicFormUpdated = FALSE; // // Display this
formset@@ -547,7 +549,11 @@ SendForm (
gCurrentSelection = NULL; mSystemLevelFormSet = NULL; - if
(gFlagReconnect || gCallbackReconnect) {+ //+ // If callback update
form dynamically, it's not exiting of the formset for user so system do not
reconnect driver hanlde+ // this time.+ //+ if
(!mDynamicFormUpdated && (gFlagReconnect || gCallbackReconnect))
{ RetVal = ReconnectController (FormSet->DriverHandle); if (!RetVal)
{ PopupErrorMessage(BROWSER_RECONNECT_FAIL, NULL, NULL,
NULL);--
2.23.0.windows.1

Join devel@edk2.groups.io to automatically receive all group messages.