From patchwork Wed Oct 28 18:09:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 1389367 X-Patchwork-Delegate: xypron.glpk@gmx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=gmx.de Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=badeba3b8450 header.b=O288xEcz; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4CLxSD10KYz9sW0 for ; Thu, 29 Oct 2020 05:09:54 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id AB8D882423; Wed, 28 Oct 2020 19:09:46 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=gmx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.b="O288xEcz"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 16B948242E; Wed, 28 Oct 2020 19:09:44 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FREEMAIL_FROM,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 996BB823DE for ; Wed, 28 Oct 2020 19:09:41 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=gmx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=xypron.glpk@gmx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1603908579; bh=8A59ancfes7ZPBs+2TFKlmn5IpXGSQ0Vqh8A7lQXbsA=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date; b=O288xEczkD4hTZPUlgbnCLni3eQXBuQhnXN5/fdVzjhoKP1qmtmD+yxhCJ+IMyXUZ IK5t7L5+IzkJWH6Ec4c08XuSkUvPRH6LXdB+N9d9MybAJtfrghfp2FNxekjl+FLx3L BD75Vm+AZ3EvKM9mPkmjjt/uk+JR56fCOeFY7kic= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from mcbin.fritz.box ([178.202.41.107]) by mail.gmx.com (mrgmx104 [212.227.17.174]) with ESMTPSA (Nemesis) id 1N79u8-1kJQdT2kDk-017Ysp; Wed, 28 Oct 2020 19:09:39 +0100 From: Heinrich Schuchardt To: Alexander Graf Cc: u-boot@lists.denx.de, Heinrich Schuchardt Subject: [PATCH 1/1] efi_loader: fix DisconnectController() for sole child Date: Wed, 28 Oct 2020 19:09:34 +0100 Message-Id: <20201028180934.71087-1-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.28.0 MIME-Version: 1.0 X-Provags-ID: V03:K1:50NeqpfMiq9mu/+QrHTnX9XQvqzeSDDkmPa3S/x3pTqEhyNKodD s0HT+ywHiiPd7s3x2tXYyvPTSN9117ecLo4vu+YX47aBsXvasYTo04dsp4ds9TgDT7BLfZ8 0zobWfCDxOTIpI4dHHwG2/BKxEfOOkR0e3sqdR5z3V5O8i8g5wjB9b18Kkh0mGmRamNEq+e V3Nd50gmLoEoAau6MKUGA== X-UI-Out-Filterresults: notjunk:1;V03:K0:coYeSDyO/qw=:WGQmQKlbfCV4ouAcENGFZu kyjcoQF3e7JPdRkHwfZajkggHseS4E3C/j+FCXh8UE+wj645bTUtoKOyMGuATu+NPLd5JtqQ7 rdJKrt8WKO0ZlnE92lWB3MnasGGWiNN/ZyQCnJpsdxG62MV8Irie+3HhnWzsYKusoyAAQ/6By PWCKH7gSNcrZfFIgMBD5tSbNyFM5qLdV46JcwAf6aAWSb21r4okonPY3KzubXVS/ZOaGHy7yU e+sKYF1Q4aur9ySu0dS91/vqLZVtFLWDXrQlcjVStMzUCotKzRPCkedqE2baUv3rx4BwS6kob a4mfEbq6s2/9Or7zhTT1qZ/mdgAm/IZ9S3GFuPL7NqhSxuQqS6OomsrdRzX6D31rW38Ob2yZY +zMU9OsxyIDNDSCjf7aVLVUWNgpH5NpQftZkI6y+SirbpGqjg2KmxuREnKR/9ZpwRTk9J2R+Q /1KTjkKFrzN+33ji8+dvz3Q6CwksnQj1ejNo93d8CeoaOHV5iq5+JFlz4nGXwi2E8WSJxEvKY RRRR/xB0hOpqcF0mZd47fSVU3zt0lS5psJj4Di0dZsBDaFlMBEab8UZnIVYkq8hM2x3GvDy/5 d9lp5DqyRuDY/whMg10ZKR7lLUSzbXtol9lDt8WYjh1HPchAN5PkqJ1UqeXzE3TY8Q4oN9ZUV VNwZExN/TziteRTtHBU2yxzd/zZeUKPS9ISN0ljgbGI7m16JpKoWVUhH+xlTc7QE3my+XORF/ 27qaOeNtwFxJzFFJq3xBijPg32X7fA7lJLA3t70AXtS9gR1oIPiFM4IXMnaVbii/JC4leIGc0 tn4yfQvherZ60A2lUeQmPgR66k02FeHjZOzJfA6WYxID5Y+F9vGbllX3AAr26ZKGLvdFuIelU ZpguTgrrV/BsiscEnseQ== X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.3 at phobos.denx.de X-Virus-Status: Clean If ChildHandle indicates the sole child of the driver, disconnect the driver. This fixes the test results for UEFI SCT 2.6 A sub-tests 5.1.3.12.43, 5.1.3.12.44, 5.1.3.12.45. Signed-off-by: Heinrich Schuchardt --- lib/efi_loader/efi_boottime.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) -- 2.28.0 diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c index b26ac9fbfc..dfa71b1774 100644 --- a/lib/efi_loader/efi_boottime.c +++ b/lib/efi_loader/efi_boottime.c @@ -3523,6 +3523,7 @@ static efi_status_t EFIAPI efi_disconnect_controller( size_t number_of_children = 0; efi_status_t r; struct efi_object *efiobj; + bool sole_child; EFI_ENTRY("%p, %p, %p", controller_handle, driver_image_handle, child_handle); @@ -3545,16 +3546,18 @@ static efi_status_t EFIAPI efi_disconnect_controller( } /* Create list of child handles */ + r = efi_get_child_controllers(efiobj, + driver_image_handle, + &number_of_children, + &child_handle_buffer); + if (r != EFI_SUCCESS) + return r; + sole_child = (number_of_children == 1); + if (child_handle) { number_of_children = 1; + free(child_handle_buffer); child_handle_buffer = &child_handle; - } else { - r = efi_get_child_controllers(efiobj, - driver_image_handle, - &number_of_children, - &child_handle_buffer); - if (r != EFI_SUCCESS) - return r; } /* Get the driver binding protocol */ @@ -3579,7 +3582,7 @@ static efi_status_t EFIAPI efi_disconnect_controller( } } /* Remove the driver */ - if (!child_handle) { + if (!child_handle || sole_child) { r = EFI_CALL(binding_protocol->stop(binding_protocol, controller_handle, 0, NULL));