From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [205.139.110.120]) by mx.groups.io with SMTP id smtpd.web12.5670.1586424564709798813 for ; Thu, 09 Apr 2020 02:29:24 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Z1V2SREH; spf=pass (domain: redhat.com, ip: 205.139.110.120, mailfrom: lersek@redhat.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1586424563; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=HRJlwgowIAEsyxZEYsxgpmV0go+P34GcALBie9ySdlE=; b=Z1V2SREHR5Gsxt3YUwvPoEQgejRI+Iv19LHO+U9X1niY5a5ul5rvbakjT4f56572eOtL8V WF8gYuqKnop3Yo0mxpjxqnglESisukffSv611WVcFzMCpl2uVqz3FN4XL56s37k3AL2EcM x45dia9xbyChJraEpvoig0sE48k8QV0= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-220-Xm4Fv-azMXKd0lst7-ZpEA-1; Thu, 09 Apr 2020 05:29:20 -0400 X-MC-Unique: Xm4Fv-azMXKd0lst7-ZpEA-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 9A79F801E6C; Thu, 9 Apr 2020 09:29:18 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-112-213.ams2.redhat.com [10.36.112.213]) by smtp.corp.redhat.com (Postfix) with ESMTP id 00B709E0C6; Thu, 9 Apr 2020 09:29:16 +0000 (UTC) Subject: Re: [edk2-devel] [PATCH] MdeModulePkg/DeviceManagerUiLib: connect all before creating menu page To: devel@edk2.groups.io, ard.biesheuvel@arm.com Cc: Zhichao Gao , Ray Ni , Jian J Wang , Hao A Wu , Dandan Bi References: <20200408172807.10108-1-ard.biesheuvel@arm.com> From: "Laszlo Ersek" Message-ID: <1e1d4c9d-01ed-2b65-69ec-278f95309d25@redhat.com> Date: Thu, 9 Apr 2020 11:29:16 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <20200408172807.10108-1-ard.biesheuvel@arm.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit On 04/08/20 19:28, Ard Biesheuvel wrote: > The device manager UI library creates a UiApp submenu that contains a > list of network devices in the system. The logic that creates this menu > assumes that all handles have been connected to their drivers, but this > is not guaranteed in the general case. > > So work around this by doing an explicit ConnectAll() before populating > the pages. > > Cc: Zhichao Gao > Cc: Ray Ni > Cc: Jian J Wang > Cc: Hao A Wu > Cc: Dandan Bi > Signed-off-by: Ard Biesheuvel > --- > MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.c | 7 +++++++ > MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.h | 1 + > MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf | 1 + > 3 files changed, 9 insertions(+) Can you describe one example that's (a) relevant to you and (b) affected by this issue? EfiBootManagerConnectAll() feels quite heavy-weight; I'd *vaguely* prefer adding it elsewhere, instead of a "UI lib"'s constructor. I don't have a particular suggestion however. I guess part of the issue must be that the EfiBootManagerConnectAll() calls in BootManagerMenuApp / UiApp are not reached, somehow. Maybe those are the calls that DeviceManagerUiLib takes for granted. Thanks, Laszlo > diff --git a/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.c b/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.c > index 0540e6fa8a44..3bc13d340775 100644 > --- a/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.c > +++ b/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.c > @@ -892,6 +892,13 @@ DeviceManagerUiLibConstructor ( > ); > ASSERT (gDeviceManagerPrivate.HiiHandle != NULL); > > + // > + // The device manager form contains a page listing all the network > + // controllers in the system. This list can only be populated if all > + // handles have been connected, so do it here. > + // > + EfiBootManagerConnectAll (); > + > // > // Update boot manager page > // > diff --git a/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.h b/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.h > index 22fe12d2a5e8..c53c2a1a0e1a 100644 > --- a/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.h > +++ b/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManager.h > @@ -23,6 +23,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > #include > #include > #include > +#include > #include > > // > diff --git a/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf b/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf > index cb01b3b85180..d7f833d8b23a 100644 > --- a/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf > +++ b/MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf > @@ -40,6 +40,7 @@ [LibraryClasses] > DebugLib > PrintLib > HiiLib > + UefiBootManagerLib > UefiHiiServicesLib > > [Guids] >