[PATCH 08/10] qmi: Implement QMI service request rate limiting in 'can_write_data'.
Grant Erickson <[email protected]> Tue, 11 Feb 2025 21:52:57 -0800
| Newsgroups | dev.linux.lists.ofono |
|---|---|
| Message-ID | <1cf82d1527078e71d7a64b4f8caa7c5adad680c7.1739339173.git.gerickson@nuovations.com> |
Determine if we need to rate-limit QMI services requests to a
transport-specific minimum request period. If so, return true so that
the queue can be retried again later.
---
drivers/qmimodem/qmi.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c
index 00086578da10..591129c252e3 100644
--- a/drivers/qmimodem/qmi.c
+++ b/drivers/qmimodem/qmi.c
@@ -665,8 +665,23 @@ static bool can_write_data(struct l_io *io, void *user_data)
{
struct qmi_transport *transport = user_data;
struct qmi_request *req;
+ const uint64_t now = l_time_now();
+ uint64_t delta = 0;
int r;
+ /*
+ * Determine if we need to rate-limit commands to a
+ * transport-specific minimum request period. If so,
+ * return true so that the queue can be retried again
+ * later.
+ */
+ if (transport->last_req_sent_time_us != 0) {
+ delta = l_time_diff(now, transport->last_req_sent_time_us);
+
+ if (delta < transport->min_req_period_us)
+ return true;
+ }
+
req = l_queue_pop_head(transport->req_queue);
if (!req)
return false;
@@ -677,6 +692,8 @@ static bool can_write_data(struct l_io *io, void *user_data)
return false;
}
+ transport->last_req_sent_time_us = now;
+
if (l_queue_length(transport->req_queue) > 0)
return true;
--
2.45.0