public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 18/26] dm: usb: Remove inactive children after a bus scan
Date: Mon, 9 Nov 2015 09:22:52 +0100	[thread overview]
Message-ID: <564057DC.1000809@redhat.com> (raw)
In-Reply-To: <1447051688-24936-19-git-send-email-sjg@chromium.org>

Hi,

On 09-11-15 07:48, Simon Glass wrote:
> Each scan of the USB bus may return different results. Existing driver-model
> devices are reused when found, but if a device no longer exists it will stay
> around, de-activated, but bound.
>
> Detect these devices and remove them after the scan completes.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>

I wonder how this is better then my original:
"dm: usb: Use device_unbind_children to clean up usb devs on stop"

Patch, the end result of both patches is the same and both are
a NOP when DM_DEVICE_REMOVE is not set. Where as my code seems
to be a much more KISS approach to the problem (my approach is
just 3 lines vs 23 lines for yours).

I know we will need usb_find_child in the DM_DEVICE_REMOVE not
set case, but why not only revert the:

"dm: usb: Rename usb_find_child to usb_find_emul_child"

commit, keep the other 2 you revert and drop this patch ?

This drops 3 patches from your patch-set and the end result is
more clean IMHO.

> Changes in v2: None
>
>   drivers/usb/host/usb-uclass.c | 23 +++++++++++++++++++++++
>   1 file changed, 23 insertions(+)
>
> diff --git a/drivers/usb/host/usb-uclass.c b/drivers/usb/host/usb-uclass.c
> index 4aa92f8..50538e0 100644
> --- a/drivers/usb/host/usb-uclass.c
> +++ b/drivers/usb/host/usb-uclass.c
> @@ -202,6 +202,20 @@ static void usb_scan_bus(struct udevice *bus, bool recurse)
>   		printf("%d USB Device(s) found\n", priv->next_addr);
>   }
>
> +static void remove_inactive_children(struct uclass *uc, struct udevice *bus)
> +{
> +	uclass_foreach_dev(bus, uc) {
> +		struct udevice *dev, *next;
> +
> +		if (!device_active(bus))
> +			continue;
> +		device_foreach_child_safe(dev, next, bus) {
> +			if (!device_active(dev))
> +				device_unbind(dev);
> +		}
> +	}
> +}
> +
>   int usb_init(void)
>   {
>   	int controllers_initialized = 0;
> @@ -270,6 +284,15 @@ int usb_init(void)
>   	}
>
>   	debug("scan end\n");
> +
> +	/* Remove any devices that were not found on this scan */
> +	remove_inactive_children(uc, bus);
> +
> +	ret = uclass_get(UCLASS_USB_HUB, &uc);
> +	if (ret)
> +		return ret;
> +	remove_inactive_children(uc, bus);
> +

Why do you need to call remove_inactive_children twice here? This seems
worthy of a comment explaining why this is necessary.

>   	/* if we were not able to find at least one working bus, bail out */
>   	if (!count)
>   		printf("No controllers found\n");
>

Regards,

Hans

  reply	other threads:[~2015-11-09  8:22 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-09  6:47 [U-Boot] [PATCH v2 00/26] usb: Drop requirement for USB unbinding, add tests Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 01/26] sandbox: Add a way to skip time delays Simon Glass
2015-11-20  3:30   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 02/26] dm: usb: Avoid time delays in sandbox tests Simon Glass
2015-11-20  3:30   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 03/26] Move console definitions into a new console.h file Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 04/26] Drop config.h header from display_options.c Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 05/26] Add a circular memory buffer implementation Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 06/26] console: Add a console buffer Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 07/26] sandbox: Enable console recording and silent console Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 08/26] test: Record and silence console in tests Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 09/26] usb: Refactor USB tree output code for testing Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 10/26] dm: core: Add safe device iteration macros Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 11/26] sandbox: usb: Allow dynamic emulated USB device descriptors Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 12/26] sandbox: usb: Allow up to 4 emulated devices on a hub Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 13/26] sandbox: usb: Allow finding a USB emulator for a device Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 14/26] Revert "dm: usb: Rename usb_find_child to usb_find_emul_child" Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 15/26] Revert "dm: usb: Use device_unbind_children to clean up usb devs on stop" Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 16/26] Revert "dm: Export device_remove_children / device_unbind_children" Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:47 ` [U-Boot] [PATCH v2 17/26] dm: usb: Deprecate usb_get_dev_index() Simon Glass
2015-11-20  3:31   ` Simon Glass
2015-11-09  6:48 ` [U-Boot] [PATCH v2 18/26] dm: usb: Remove inactive children after a bus scan Simon Glass
2015-11-09  8:22   ` Hans de Goede [this message]
2015-11-09 20:25     ` Simon Glass
2015-11-10 23:30       ` Simon Glass
2015-11-11 17:02         ` Hans de Goede
2015-11-11 18:15           ` Simon Glass
2015-11-12 14:08             ` Hans de Goede
2015-11-13 21:58               ` Simon Glass
2015-11-15 19:35                 ` Hans de Goede
2015-11-16 21:08                   ` Simon Glass
2015-11-20  3:32                     ` Simon Glass
2015-11-11 17:03         ` Hans de Goede
2015-11-09  6:48 ` [U-Boot] [PATCH v2 19/26] dm: test: usb: Add tests for the 'usb tree' command Simon Glass
2015-11-20  3:32   ` Simon Glass
2015-11-09  6:48 ` [U-Boot] [PATCH v2 20/26] dm: test: usb: Add a test for device reordering Simon Glass
2015-11-20  3:32   ` Simon Glass
2015-11-09  6:48 ` [U-Boot] [PATCH v2 21/26] usb: Drop unused code in usb_kbd.c Simon Glass
2015-11-20  3:32   ` Simon Glass
2015-11-09  6:48 ` [U-Boot] [PATCH v2 22/26] usb: Avoid open-coded USB constants " Simon Glass
2015-11-20  3:32   ` Simon Glass
2015-11-09  6:48 ` [U-Boot] [PATCH v2 23/26] usb: sandbox: Add support for interrupt operations Simon Glass
2015-11-20  3:32   ` Simon Glass
2015-11-09  6:48 ` [U-Boot] [PATCH v2 24/26] usb: sandbox: Add a USB emulation driver Simon Glass
2015-11-20  3:32   ` Simon Glass
2015-11-09  6:48 ` [U-Boot] [PATCH v2 25/26] sandbox: Enable USB keyboard Simon Glass
2015-11-20  3:32   ` Simon Glass
2015-11-09  6:48 ` [U-Boot] [PATCH v2 26/26] dm: test: usb: sandbox: Add keyboard tests for sandbox Simon Glass
2015-11-20  3:32   ` Simon Glass
2015-11-09  8:14 ` [U-Boot] [PATCH v2 00/26] usb: Drop requirement for USB unbinding, add tests Hans de Goede
2015-11-09 16:54   ` Simon Glass
2015-11-18 15:53     ` Simon Glass
2015-11-09 14:17 ` Marek Vasut

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=564057DC.1000809@redhat.com \
    --to=hdegoede@redhat.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox