From 6a693876db9f8f47dac5c5dba6654668de5baa94 Mon Sep 17 00:00:00 2001 From: Fabian Kainka Date: Tue, 20 May 2025 09:05:09 +0200 Subject: [PATCH 1/3] drivers: modem: replace K_SPINLOCK macro with explicit locking where needed This PR is related to the following Zephyr PR: https://github.com/zephyrproject-rtos/zephyr/pull/81431 Some compilers (e.g. arm-zephyr-eabi-gcc) don't understand the K_SPINLOCK() macro and therefore do warn about uninitialized variables in the modem related modules. Fix: Replaced the K_SPINLOCK macro with explicit k_spin_lock/k_spin_unlock calls only at relevant locations in the modem subsystem. Signed-off-by: Fabian Kainka --- subsys/modem/modem_cmux.c | 33 +++++++++++++++++---------------- subsys/modem/modem_pipelink.c | 6 +++--- subsys/modem/modem_stats.c | 16 ++++++++-------- 3 files changed, 28 insertions(+), 27 deletions(-) diff --git a/subsys/modem/modem_cmux.c b/subsys/modem/modem_cmux.c index d5547e03da288..c8c2db68d6b1d 100644 --- a/subsys/modem/modem_cmux.c +++ b/subsys/modem/modem_cmux.c @@ -1108,25 +1108,26 @@ static int modem_cmux_dlci_pipe_api_transmit(void *data, const uint8_t *buf, siz { struct modem_cmux_dlci *dlci = (struct modem_cmux_dlci *)data; struct modem_cmux *cmux = dlci->cmux; - int ret = 0; + int ret; - K_SPINLOCK(&cmux->work_lock) { - if (!cmux->attached) { - ret = -EPERM; - K_SPINLOCK_BREAK; - } + k_spinlock_key_t key = k_spin_lock(&cmux->work_lock); + if (!cmux->attached) { + ret = -EPERM; + k_spin_unlock(&cmux->work_lock, key); + return ret; + } - struct modem_cmux_frame frame = { - .dlci_address = dlci->dlci_address, - .cr = true, - .pf = false, - .type = MODEM_CMUX_FRAME_TYPE_UIH, - .data = buf, - .data_len = size, - }; + struct modem_cmux_frame frame = { + .dlci_address = dlci->dlci_address, + .cr = true, + .pf = false, + .type = MODEM_CMUX_FRAME_TYPE_UIH, + .data = buf, + .data_len = size, + }; - ret = modem_cmux_transmit_data_frame(cmux, &frame); - } + ret = modem_cmux_transmit_data_frame(cmux, &frame); + k_spin_unlock(&cmux->work_lock, key); return ret; } diff --git a/subsys/modem/modem_pipelink.c b/subsys/modem/modem_pipelink.c index e52d0117f62d2..f9d2edd929b55 100644 --- a/subsys/modem/modem_pipelink.c +++ b/subsys/modem/modem_pipelink.c @@ -29,9 +29,9 @@ bool modem_pipelink_is_connected(struct modem_pipelink *link) { bool connected; - K_SPINLOCK(&link->spinlock) { - connected = link->connected; - } + k_spinlock_key_t key = k_spin_lock(&link->spinlock); + connected = link->connected; + k_spin_unlock(&link->spinlock, key); return connected; } diff --git a/subsys/modem/modem_stats.c b/subsys/modem/modem_stats.c index e1790cb815a3c..0cc995abe1a0f 100644 --- a/subsys/modem/modem_stats.c +++ b/subsys/modem/modem_stats.c @@ -32,22 +32,22 @@ static void stats_buffer_list_append(struct modem_stats_buffer *buffer) static struct modem_stats_buffer *stats_buffer_list_first(void) { - struct modem_stats_buffer *first = NULL; + struct modem_stats_buffer *first; - K_SPINLOCK(&stats_buffer_lock) { - first = stats_buffer_from_node(sys_slist_peek_head(&stats_buffer_list)); - } + k_spinlock_key_t key = k_spin_lock(&stats_buffer_lock); + first = stats_buffer_from_node(sys_slist_peek_head(&stats_buffer_list)); + k_spin_unlock(&stats_buffer_lock, key); return first; } static struct modem_stats_buffer *stats_buffer_list_next(struct modem_stats_buffer *buffer) { - struct modem_stats_buffer *next = NULL; + struct modem_stats_buffer *next; - K_SPINLOCK(&stats_buffer_lock) { - next = stats_buffer_from_node(sys_slist_peek_next(&buffer->node)); - } + k_spinlock_key_t key = k_spin_lock(&stats_buffer_lock); + next = stats_buffer_from_node(sys_slist_peek_next(&buffer->node)); + k_spin_unlock(&stats_buffer_lock, key); return next; } From 44f10cd9da8032e333c0ca6929c64ee1bc07b6ab Mon Sep 17 00:00:00 2001 From: Fabian Kainka Date: Tue, 20 May 2025 09:25:44 +0200 Subject: [PATCH 2/3] Added blank lines (coding style: LINE_SPACING) --- subsys/modem/modem_cmux.c | 2 ++ subsys/modem/modem_pipelink.c | 2 ++ subsys/modem/modem_stats.c | 4 ++++ 3 files changed, 8 insertions(+) diff --git a/subsys/modem/modem_cmux.c b/subsys/modem/modem_cmux.c index c8c2db68d6b1d..038b8b197048f 100644 --- a/subsys/modem/modem_cmux.c +++ b/subsys/modem/modem_cmux.c @@ -1111,6 +1111,7 @@ static int modem_cmux_dlci_pipe_api_transmit(void *data, const uint8_t *buf, siz int ret; k_spinlock_key_t key = k_spin_lock(&cmux->work_lock); + if (!cmux->attached) { ret = -EPERM; k_spin_unlock(&cmux->work_lock, key); @@ -1127,6 +1128,7 @@ static int modem_cmux_dlci_pipe_api_transmit(void *data, const uint8_t *buf, siz }; ret = modem_cmux_transmit_data_frame(cmux, &frame); + k_spin_unlock(&cmux->work_lock, key); return ret; diff --git a/subsys/modem/modem_pipelink.c b/subsys/modem/modem_pipelink.c index f9d2edd929b55..db435686b5a0f 100644 --- a/subsys/modem/modem_pipelink.c +++ b/subsys/modem/modem_pipelink.c @@ -30,7 +30,9 @@ bool modem_pipelink_is_connected(struct modem_pipelink *link) bool connected; k_spinlock_key_t key = k_spin_lock(&link->spinlock); + connected = link->connected; + k_spin_unlock(&link->spinlock, key); return connected; diff --git a/subsys/modem/modem_stats.c b/subsys/modem/modem_stats.c index 0cc995abe1a0f..d09de11f77271 100644 --- a/subsys/modem/modem_stats.c +++ b/subsys/modem/modem_stats.c @@ -35,7 +35,9 @@ static struct modem_stats_buffer *stats_buffer_list_first(void) struct modem_stats_buffer *first; k_spinlock_key_t key = k_spin_lock(&stats_buffer_lock); + first = stats_buffer_from_node(sys_slist_peek_head(&stats_buffer_list)); + k_spin_unlock(&stats_buffer_lock, key); return first; @@ -46,7 +48,9 @@ static struct modem_stats_buffer *stats_buffer_list_next(struct modem_stats_buff struct modem_stats_buffer *next; k_spinlock_key_t key = k_spin_lock(&stats_buffer_lock); + next = stats_buffer_from_node(sys_slist_peek_next(&buffer->node)); + k_spin_unlock(&stats_buffer_lock, key); return next; From c0fbea19845dec032bf526c2ffa1d19d5be5564d Mon Sep 17 00:00:00 2001 From: Fabian Kainka Date: Tue, 20 May 2025 09:39:03 +0200 Subject: [PATCH 3/3] style: remove unnecessary blank lines in modem_cmux, modem_pipelink, and modem_stats Signed-off-by: Fabian Kainka --- subsys/modem/modem_cmux.c | 2 +- subsys/modem/modem_pipelink.c | 2 +- subsys/modem/modem_stats.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/subsys/modem/modem_cmux.c b/subsys/modem/modem_cmux.c index 038b8b197048f..30d80b3ec0bc7 100644 --- a/subsys/modem/modem_cmux.c +++ b/subsys/modem/modem_cmux.c @@ -1128,7 +1128,7 @@ static int modem_cmux_dlci_pipe_api_transmit(void *data, const uint8_t *buf, siz }; ret = modem_cmux_transmit_data_frame(cmux, &frame); - + k_spin_unlock(&cmux->work_lock, key); return ret; diff --git a/subsys/modem/modem_pipelink.c b/subsys/modem/modem_pipelink.c index db435686b5a0f..35faf9c3ad7ac 100644 --- a/subsys/modem/modem_pipelink.c +++ b/subsys/modem/modem_pipelink.c @@ -32,7 +32,7 @@ bool modem_pipelink_is_connected(struct modem_pipelink *link) k_spinlock_key_t key = k_spin_lock(&link->spinlock); connected = link->connected; - + k_spin_unlock(&link->spinlock, key); return connected; diff --git a/subsys/modem/modem_stats.c b/subsys/modem/modem_stats.c index d09de11f77271..4b7fef1a01270 100644 --- a/subsys/modem/modem_stats.c +++ b/subsys/modem/modem_stats.c @@ -50,7 +50,7 @@ static struct modem_stats_buffer *stats_buffer_list_next(struct modem_stats_buff k_spinlock_key_t key = k_spin_lock(&stats_buffer_lock); next = stats_buffer_from_node(sys_slist_peek_next(&buffer->node)); - + k_spin_unlock(&stats_buffer_lock, key); return next;