Re: [PATCH v5 0/7] Add QMI Device Service Request Rate-limit Option
Denis Kenzior <[email protected]> Tue, 18 Feb 2025 09:29:27 -0600
| Newsgroups | dev.linux.lists.ofono |
|---|---|
| Message-ID | <[email protected]> |
Hi Grant,
On 2/17/25 2:01 PM, Grant Erickson wrote:
> Certain modems, among them the Quectel Wireless Solutions Co.,
> Ltd. (2c7c) BG96 CAT-M1/NB-IoT modem (0296), have a firmware issue
> where they can lock up and hang (not responding to subsequent
> commands) due to high QMI service request arrival rates.
>
> QMI service request rate limiting is achieved by:
>
> 1. Adding a new, optional options structure to qmi_qmux_device_new
> that has its rate-limit "quirk" and minimum request period fields
> set when the modem "RequestThrottleTimeUs" integer property is set.
>
> 2. Adding logic to the QMI driver that, when a minimum request period
> is set, limits the QMI service request rate accordingly.
>
> (1) and (2) are used by the udevng and gobi plugins such that when the
> modem vendor and model match 2c7c/0296, then the option to rate limit
> QMI service requests is set to no more than one every 2,000 us.
>
> Grant Erickson (7):
> qmi: Added enumeration for device quirk flags.
> qmi: Added structure for device options.
> qmi: Added device options parameter to 'qmi_qmux_device_new'.
> qmi: Implement QMI service request rate limiting in 'can_write_data'.
> qmi: Handle request rate limit option in 'qmi_qmux_device_new'.
> udevng: Set the QMI minimum service request period for Quectel BG96
> modems.
> gobi: Pass QMI qmux device options to 'qmi_qmux_device_new'.
>
> drivers/qmimodem/qmi.c | 51 +++++++++++++++++++++++++++++++++++++++++-
> drivers/qmimodem/qmi.h | 40 ++++++++++++++++++++++++++++++++-
> plugins/gobi.c | 22 +++++++++++++++++-
> plugins/udevng.c | 14 ++++++++++++
> 4 files changed, 124 insertions(+), 3 deletions(-)
>
Alpine (musl) gcc debug
=======================
Configure: PASS
Build: FAIL
drivers/qmimodem/qmi.c: In function 'can_write_data':
drivers/qmimodem/qmi.c:701:1: error: unknown option after '#pragma GCC
diagnostic' kind [-Werror=pragmas]
701 | _Pragma("GCC diagnostic ignored \"-Wconditional-uninitialized\"")
| ^~~~~~~
drivers/qmimodem/qmi.c:701:1: note: did you mean '-Wno-uninitialized'?
cc1: all warnings being treated as errors
make[1]: *** [Makefile:4090: drivers/qmimodem/qmi.o] Error 1
make[1]: Target 'all-am' not remade because of errors.
make: *** [Makefile:2405: all] Error 2
Fedora (glibc) clang debug+sanitizers
=====================================
Configure: PASS
Build: PASS
Unit: PASS
Distcheck: PASS
Alpine (musl) gcc optimized
===========================
Configure: PASS
Build: FAIL
drivers/qmimodem/qmi.c: In function 'can_write_data':
drivers/qmimodem/qmi.c:701:1: error: unknown option after '#pragma GCC
diagnostic' kind [-Werror=pragmas]
701 | _Pragma("GCC diagnostic ignored \"-Wconditional-uninitialized\"")
| ^~~~~~~
drivers/qmimodem/qmi.c:701:1: note: did you mean '-Wno-uninitialized'?
drivers/qmimodem/qmi.c:703:50: error: 'now' may be used uninitialized
[-Werror=maybe-uninitialized]
703 | transport->last_req_sent_time_us = now;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
drivers/qmimodem/qmi.c:669:18: note: 'now' was declared here
669 | uint64_t now;
| ^~~
cc1: all warnings being treated as errors
make[1]: *** [Makefile:4090: drivers/qmimodem/qmi.o] Error 1
make[1]: Target 'all-am' not remade because of errors.
make: *** [Makefile:2405: all] Error 2
Regards,
-Denis