[PATCH v1] config-tools: board inspector does not exit if a usb device is unplugged


Yang, Yu-chu
 

From: yuchuyang <yu-chu.yang@...>

Board inspector may throw an error if a usb device is unplugged or
disconnected while extracting usb device information. Print out the
debug message and continue parsing.

Signed-off-by: yuchuyang <yu-chu.yang@...>
---
.../board_inspector/extractors/95-usb.py | 31 ++++++++++---------
1 file changed, 17 insertions(+), 14 deletions(-)

diff --git a/misc/config_tools/board_inspector/extractors/95-usb.py b/misc/config_tools/board_inspector/extractors/95-usb.py
index 99daa256f..d22416c86 100644
--- a/misc/config_tools/board_inspector/extractors/95-usb.py
+++ b/misc/config_tools/board_inspector/extractors/95-usb.py
@@ -3,7 +3,7 @@
# SPDX-License-Identifier: BSD-3-Clause
#

-import os, re
+import os, re, logging

from extractors.helpers import add_child, get_node

@@ -17,17 +17,20 @@ def extract(args, board_etree):
if m:
d = m.group(0)
devpath = os.path.join(USB_DEVICES_PATH, d)
- with open(os.path.join(devpath, 'devnum'), 'r') as f:
- devnum = f.read().strip()
- with open(os.path.join(devpath, 'busnum'), 'r') as f:
- busnum = f.read().strip()
- cmd_out = os.popen('lsusb -s {b}:{d}'.format(b=busnum, d=devnum)).read()
- desc = cmd_out.split(':', maxsplit=1)[1].strip('\n')
-
- with open(devpath + '/port/firmware_node/path') as f:
- acpi_path = f.read().strip()
- usb_port_node = get_node(board_etree, f"//device[acpi_object='{acpi_path}']")
- if usb_port_node is not None:
- add_child(usb_port_node, "usb_device", location=d,
- description=d + desc)
+ try:
+ with open(os.path.join(devpath, 'devnum'), 'r') as f:
+ devnum = f.read().strip()
+ with open(os.path.join(devpath, 'busnum'), 'r') as f:
+ busnum = f.read().strip()
+ cmd_out = os.popen('lsusb -s {b}:{d}'.format(b=busnum, d=devnum)).read()
+ desc = cmd_out.split(':', maxsplit=1)[1].strip('\n')

+ with open(devpath + '/port/firmware_node/path') as f:
+ acpi_path = f.read().strip()
+ usb_port_node = get_node(board_etree, f"//device[acpi_object='{acpi_path}']")
+ if usb_port_node is not None:
+ add_child(usb_port_node, "usb_device", location=d,
+ description=d + desc)
+ except Exception as e:
+ logging.debug(f"{e}: please check if a USB device has been removed form usb port{d}.")
+ pass
--
2.25.1


Junjie Mao
 

-----Original Message-----
From: Yang, Yu-chu <yu-chu.yang@...>
Sent: Friday, November 18, 2022 10:42 AM
To: acrn-dev@...
Cc: Mao, Junjie <junjie.mao@...>
Subject: [PATCH v1] config-tools: board inspector does not exit if a usb device is
unplugged

From: yuchuyang <yu-chu.yang@...>

Board inspector may throw an error if a usb device is unplugged or
disconnected while extracting usb device information. Print out the
debug message and continue parsing.

Signed-off-by: yuchuyang <yu-chu.yang@...>
Reviewed-by: Junjie Mao <junjie.mao@...>

One minor comment below.

---
.../board_inspector/extractors/95-usb.py | 31 ++++++++++---------
1 file changed, 17 insertions(+), 14 deletions(-)

diff --git a/misc/config_tools/board_inspector/extractors/95-usb.py
b/misc/config_tools/board_inspector/extractors/95-usb.py
index 99daa256f..d22416c86 100644
--- a/misc/config_tools/board_inspector/extractors/95-usb.py
+++ b/misc/config_tools/board_inspector/extractors/95-usb.py
@@ -3,7 +3,7 @@
# SPDX-License-Identifier: BSD-3-Clause
#

-import os, re
+import os, re, logging

from extractors.helpers import add_child, get_node

@@ -17,17 +17,20 @@ def extract(args, board_etree):
if m:
d = m.group(0)
devpath = os.path.join(USB_DEVICES_PATH, d)
- with open(os.path.join(devpath, 'devnum'), 'r') as f:
- devnum = f.read().strip()
- with open(os.path.join(devpath, 'busnum'), 'r') as f:
- busnum = f.read().strip()
- cmd_out = os.popen('lsusb -s {b}:{d}'.format(b=busnum, d=devnum)).read()
- desc = cmd_out.split(':', maxsplit=1)[1].strip('\n')
-
- with open(devpath + '/port/firmware_node/path') as f:
- acpi_path = f.read().strip()
- usb_port_node = get_node(board_etree, f"//device[acpi_object='{acpi_path}']")
- if usb_port_node is not None:
- add_child(usb_port_node, "usb_device", location=d,
- description=d + desc)
+ try:
+ with open(os.path.join(devpath, 'devnum'), 'r') as f:
+ devnum = f.read().strip()
+ with open(os.path.join(devpath, 'busnum'), 'r') as f:
+ busnum = f.read().strip()
+ cmd_out = os.popen('lsusb -s {b}:{d}'.format(b=busnum, d=devnum)).read()
+ desc = cmd_out.split(':', maxsplit=1)[1].strip('\n')

+ with open(devpath + '/port/firmware_node/path') as f:
+ acpi_path = f.read().strip()
+ usb_port_node = get_node(board_etree,
f"//device[acpi_object='{acpi_path}']")
+ if usb_port_node is not None:
+ add_child(usb_port_node, "usb_device", location=d,
+ description=d + desc)
+ except Exception as e:
+ logging.debug(f"{e}: please check if a USB device has been removed form
usb port{d}.")
Add one space between `port` and `{d}`.

---
Best Regards
Junjie Mao

+ pass
--
2.25.1