From: max.oss.09@gmail.com
To: openembedded-devel@lists.openembedded.org
Cc: Max Krummenacher <max.krummenacher@toradex.com>
Subject: [meta-oe][PATCH 1/2] libusbgx: fix usbgx.service stop / restart
Date: Thu, 15 Feb 2024 15:17:07 +0100 [thread overview]
Message-ID: <20240215141708.2108422-1-max.oss.09@gmail.com> (raw)
From: Max Krummenacher <max.krummenacher@toradex.com>
On start the usbgx service configures the usb gadget. However if
one stops the service nothing is done, a subsequent start then
tries to configure the gadget again and fails. `systemctl restart`
is implemented by doing a stop followed by a start and thus is
also affected.
Doing a start/stop/start results with the following reported in
status:
| systemd[1]: Starting Load USB gadget schemas...
| gadget-start[801]: usbg_create_gadget() duplicate gadget name
| gadget-start[801]:
| gadget-start[801]: Error on import gadget
| gadget-start[801]: Error: USBG_ERROR_EXIST : Already exist
| gadget-start[812]: ls: write error: Device or resource busy
The run-postinsts service does execute a restart for each package
which uses the systemd class which creates a race condition that the
usbgx service is already started when run-postinsts restarts usbgx
and creates the above error output.
Fix that by unconfiguring the usb gadget on stop.
Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
---
.../recipes-support/libusbgx/libusbgx/gadget-stop | 13 +++++++++++++
.../recipes-support/libusbgx/libusbgx/usbgx.service | 2 ++
meta-oe/recipes-support/libusbgx/libusbgx_git.bb | 3 +++
3 files changed, 18 insertions(+)
create mode 100755 meta-oe/recipes-support/libusbgx/libusbgx/gadget-stop
diff --git a/meta-oe/recipes-support/libusbgx/libusbgx/gadget-stop b/meta-oe/recipes-support/libusbgx/libusbgx/gadget-stop
new file mode 100755
index 000000000..24b7caed5
--- /dev/null
+++ b/meta-oe/recipes-support/libusbgx/libusbgx/gadget-stop
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+[ -r /etc/default/usbgx ] && . /etc/default/usbgx
+
+for i in $IMPORT_SCHEMAS; do
+ if [ -e /sys/kernel/config/usb_gadget/"$i"/idVendor ]; then
+ if [ -e /sys/kernel/config/usb_gadget/"$i"/idProduct ]; then
+ idVendor=$(cat /sys/kernel/config/usb_gadget/"$i"/idVendor)
+ idProduct=$(cat /sys/kernel/config/usb_gadget/"$i"/idProduct)
+ /usr/bin/gadget-vid-pid-remove ${idVendor}:${idProduct}
+ fi
+ fi
+done
diff --git a/meta-oe/recipes-support/libusbgx/libusbgx/usbgx.service b/meta-oe/recipes-support/libusbgx/libusbgx/usbgx.service
index d7d394cfe..7210969d6 100644
--- a/meta-oe/recipes-support/libusbgx/libusbgx/usbgx.service
+++ b/meta-oe/recipes-support/libusbgx/libusbgx/usbgx.service
@@ -5,7 +5,9 @@ After=sys-kernel-config.mount
[Service]
Type=oneshot
+RemainAfterExit=yes
ExecStart=/usr/bin/gadget-start
+ExecStop=/usr/bin/gadget-stop
[Install]
WantedBy=usb-gadget.target
diff --git a/meta-oe/recipes-support/libusbgx/libusbgx_git.bb b/meta-oe/recipes-support/libusbgx/libusbgx_git.bb
index f8ebcc776..484110561 100644
--- a/meta-oe/recipes-support/libusbgx/libusbgx_git.bb
+++ b/meta-oe/recipes-support/libusbgx/libusbgx_git.bb
@@ -13,6 +13,7 @@ SRC_URI = " \
file://0001-libusbgx-Add-interface-name-for-NCM-Feature-Descript.patch \
file://0001-fix-stack-buffer-overflow-in-usbg_f_foo_attr_val-pro.patch \
file://gadget-start \
+ file://gadget-stop \
file://usbgx.initd \
file://usbgx.service \
"
@@ -39,6 +40,8 @@ INHIBIT_UPDATERCD_BBCLASS = "${@bb.utils.contains('PACKAGECONFIG', 'examples', '
do_install:append() {
install -Dm 0755 ${WORKDIR}/gadget-start ${D}${bindir}/gadget-start
sed -i -e 's,/usr/bin,${bindir},g' -e 's,/etc,${sysconfdir},g' ${D}${bindir}/gadget-start
+ install -m 0755 ${WORKDIR}/gadget-start ${D}${bindir}/gadget-stop
+ sed -i -e 's,/usr/bin,${bindir},g' -e 's,/etc,${sysconfdir},g' ${D}${bindir}/gadget-stop
if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
install -Dm 0644 ${WORKDIR}/usbgx.service ${D}${systemd_system_unitdir}/usbgx.service
--
2.42.0
next reply other threads:[~2024-02-15 14:17 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-15 14:17 max.oss.09 [this message]
2024-02-15 14:17 ` [meta-oe][PATCH 2/2] libusbgx: uprev to the latest commit max.oss.09
2024-02-15 16:49 ` [oe] " Khem Raj
2024-02-15 19:15 ` Max Krummenacher
-- strict thread matches above, loose matches on Subject: below --
2024-02-15 14:07 [meta-oe][PATCH 1/2] libusbgx: fix usbgx.service stop / restart max.oss.09
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=20240215141708.2108422-1-max.oss.09@gmail.com \
--to=max.oss.09@gmail.com \
--cc=max.krummenacher@toradex.com \
--cc=openembedded-devel@lists.openembedded.org \
/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.