All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefan Roese <sr@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 1/5 v2] dm: device_remove: Don't return in device_chld_remove() upon error
Date: Mon, 24 Apr 2017 09:48:00 +0200	[thread overview]
Message-ID: <20170424074804.15143-1-sr@denx.de> (raw)

On my x86 platform I've noticed, that calling dm_uninit() or the new
function dm_remove_devices_flags() does not remove the desired device at
all. Debugging showed, that the serial uclass returns -EPERM in
serial_pre_remove() and this leads to a complete stop of the device
removal pretty early, as the serial device is one of the first ones in
the DM. Here the dm tree output:

=> dm tree
 Class       Probed   Name
----------------------------------------
 root        [ + ]    root_driver
 rsa_mod_exp [   ]    |-- mod_exp_sw
 serial      [ + ]    |-- serial
 rtc         [   ]    |-- rtc
 timer       [ + ]    |-- tsc-timer
 syscon      [ + ]    |-- pch_pinctrl
 ...

In this example, device_remove(root) will stop directly after trying to
remove the "serial" device.

To solve this problem, this patch removes the return upon error check in
the device_remove() call in device_chld_remove(). This leads to
device_chld_remove() continuing with the device_remove() call to the
following child devices.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Simon Glass <sjg@chromium.org>
Cc: Bin Meng <bmeng.cn@gmail.com>
---
v2:
- Add debug() output in error case

 drivers/core/device-remove.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/core/device-remove.c b/drivers/core/device-remove.c
index cc0043b990..a1c0103af0 100644
--- a/drivers/core/device-remove.c
+++ b/drivers/core/device-remove.c
@@ -58,8 +58,14 @@ static int device_chld_remove(struct udevice *dev, uint flags)
 
 	list_for_each_entry_safe(pos, n, &dev->child_head, sibling_node) {
 		ret = device_remove(pos, flags);
-		if (ret)
-			return ret;
+		/*
+		 * Don't stop on error here, the remaining child devices still
+		 * need to get removed.
+		 */
+		if (ret) {
+			debug("%s: device_remove(%s) returned %d\n",
+			      __func__, pos->name, ret);
+		}
 	}
 
 	return 0;
-- 
2.12.2

             reply	other threads:[~2017-04-24  7:48 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-24  7:48 Stefan Roese [this message]
2017-04-24  7:48 ` [U-Boot] [PATCH 2/5 v2] serial: serial-uclass: Use force parameter in stdio_deregister_dev() Stefan Roese
2017-04-29  0:26   ` Simon Glass
2017-05-09  4:28     ` Bin Meng
2017-04-24  7:48 ` [U-Boot] [PATCH 3/5 v2] dm: core: Add DM_FLAG_OS_PREPARE flag Stefan Roese
2017-05-09  4:28   ` Bin Meng
2017-04-24  7:48 ` [U-Boot] [PATCH 4/5 v2] x86: bootm: Add dm_remove_devices_flags() call to bootm_announce_and_cleanup() Stefan Roese
2017-05-09  4:28   ` Bin Meng
2017-04-24  7:48 ` [U-Boot] [PATCH 5/5 v2] spi: ich: Configure SPI BIOS parameters for Linux upon U-Boot exit Stefan Roese
2017-05-09  4:28   ` Bin Meng
2017-05-09 11:14   ` Jagan Teki
2017-05-09 11:20     ` Stefan Roese
2017-05-10  0:47       ` Bin Meng
2017-05-10 12:31         ` Stefan Roese
2017-05-15  3:02         ` Simon Glass
2017-04-29  0:26 ` [U-Boot] [PATCH 1/5 v2] dm: device_remove: Don't return in device_chld_remove() upon error Simon Glass
2017-05-01  6:14   ` Stefan Roese
2017-05-02 11:27     ` Simon Glass
2017-05-02 11:45       ` Stefan Roese
2017-05-04 16:50         ` Simon Glass
2017-05-08  7:35           ` Stefan Roese
2017-05-09  3:20             ` Simon Glass

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170424074804.15143-1-sr@denx.de \
    --to=sr@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.