diff mbox series

[U-Boot,v2] cmd: usb: add blk devices to ignore list in tree graph

Message ID 1505790310-31106-1-git-send-email-suneelglinux@gmail.com
State Superseded
Headers show
Series [U-Boot,v2] cmd: usb: add blk devices to ignore list in tree graph | expand

Commit Message

Suneel Garapati Sept. 19, 2017, 3:05 a.m. UTC
add blk child devices to ignore list while displaying
usb tree graph, otherwise usb tree and info commands
may cause crash treating blk as usb device.

Signed-off-by: Suneel Garapati <suneelglinux@gmail.com>
---

Changes v2:
 - remove check on parent uclass
Changes v1:
 - add separate check on blk uclass
 - modify description
 - add separate check on parent uclass as usb

 cmd/usb.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

Comments

Bin Meng Sept. 19, 2017, 3:14 a.m. UTC | #1
Hi Suneel,

On Tue, Sep 19, 2017 at 11:05 AM, Suneel Garapati
<suneelglinux@gmail.com> wrote:
> add blk child devices to ignore list while displaying
> usb tree graph, otherwise usb tree and info commands
> may cause crash treating blk as usb device.
>
> Signed-off-by: Suneel Garapati <suneelglinux@gmail.com>
> ---
>
> Changes v2:
>  - remove check on parent uclass
> Changes v1:
>  - add separate check on blk uclass
>  - modify description
>  - add separate check on parent uclass as usb
>
>  cmd/usb.c | 11 ++++++++---
>  1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/cmd/usb.c b/cmd/usb.c
> index d95bcf5..eb31353 100644
> --- a/cmd/usb.c
> +++ b/cmd/usb.c
> @@ -414,8 +414,12 @@ static void usb_show_tree_graph(struct usb_device *dev, char *pre)
>
>                 udev = dev_get_parent_priv(child);
>
> -               /* Ignore emulators, we only want real devices */
> -               if (device_get_uclass_id(child) != UCLASS_USB_EMUL) {
> +               /*
> +                * Ignore emulators and block child devices, with check on
> +                * parent uclass as usb, we only want real devices

nits: please remove the comment of "with check on parent uclass as usb".

> +                */
> +               if ((device_get_uclass_id(child) != UCLASS_USB_EMUL) &&
> +                   (device_get_uclass_id(child) != UCLASS_BLK)) {
>                         usb_show_tree_graph(udev, pre);
>                         pre[index] = 0;
>                 }
> @@ -605,7 +609,8 @@ static void usb_show_info(struct usb_device *udev)
>         for (device_find_first_child(udev->dev, &child);
>              child;
>              device_find_next_child(&child)) {
> -               if (device_active(child)) {
> +               if (device_active(child) &&
> +                   (device_get_uclass_id(child) != UCLASS_BLK)) {
>                         udev = dev_get_parent_priv(child);
>                         usb_show_info(udev);
>                 }
> --

Regards,
Bin
Stefan Roese Sept. 19, 2017, 4:52 a.m. UTC | #2
On 19.09.2017 05:05, Suneel Garapati wrote:
> add blk child devices to ignore list while displaying
> usb tree graph, otherwise usb tree and info commands
> may cause crash treating blk as usb device.
> 
> Signed-off-by: Suneel Garapati <suneelglinux@gmail.com>

This patch fixes the crash I've experienced with "usb tree" sometimes,
so:

Tested-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan
Suneel Garapati Sept. 19, 2017, 5:58 a.m. UTC | #3
Thanks Bin and Stefan. I have sent the v3.

Regards,
Suneel

On Mon, Sep 18, 2017 at 9:52 PM, Stefan Roese <sr@denx.de> wrote:
> On 19.09.2017 05:05, Suneel Garapati wrote:
>>
>> add blk child devices to ignore list while displaying
>> usb tree graph, otherwise usb tree and info commands
>> may cause crash treating blk as usb device.
>>
>> Signed-off-by: Suneel Garapati <suneelglinux@gmail.com>
>
>
> This patch fixes the crash I've experienced with "usb tree" sometimes,
> so:
>
> Tested-by: Stefan Roese <sr@denx.de>
>
> Thanks,
> Stefan
diff mbox series

Patch

diff --git a/cmd/usb.c b/cmd/usb.c
index d95bcf5..eb31353 100644
--- a/cmd/usb.c
+++ b/cmd/usb.c
@@ -414,8 +414,12 @@  static void usb_show_tree_graph(struct usb_device *dev, char *pre)
 
 		udev = dev_get_parent_priv(child);
 
-		/* Ignore emulators, we only want real devices */
-		if (device_get_uclass_id(child) != UCLASS_USB_EMUL) {
+		/*
+		 * Ignore emulators and block child devices, with check on
+		 * parent uclass as usb, we only want real devices
+		 */
+		if ((device_get_uclass_id(child) != UCLASS_USB_EMUL) &&
+		    (device_get_uclass_id(child) != UCLASS_BLK)) {
 			usb_show_tree_graph(udev, pre);
 			pre[index] = 0;
 		}
@@ -605,7 +609,8 @@  static void usb_show_info(struct usb_device *udev)
 	for (device_find_first_child(udev->dev, &child);
 	     child;
 	     device_find_next_child(&child)) {
-		if (device_active(child)) {
+		if (device_active(child) &&
+		    (device_get_uclass_id(child) != UCLASS_BLK)) {
 			udev = dev_get_parent_priv(child);
 			usb_show_info(udev);
 		}