Skip to content

Commit 8e132fe

Browse files
pkwiekrlubos
authored andcommitted
drivers: Fix several radio driver related bugs
Fix #1: Transmission failure would cause to leave an allocated buffer resulting in a serialization failure leading to an assert, which was seen as a timeout error on APP core side. Fix #2: It is possible for nrf_802154_spinel_send function to be preempted resulting in the static frame buffer being reused. The buffer size was reduced accordingly to 802.15.4 frame size and possible additional data. Fix #3: Radio driver's API call using serialization can be preempted after issuing a serialized call request to NET core, but before preparing the notifier for an awaited property. This results in receiving a property that no one waits for and dropping the property as an unwanted. In current implementation the awaited property is prepared during the notifier lock. Re-fix #4: The issue which manifests itself in disabled NVIC interrupts in SED roles. Signed-off-by: Pawel Kwiek <[email protected]>
1 parent 031065e commit 8e132fe

File tree

10 files changed

+68
-64
lines changed

10 files changed

+68
-64
lines changed

drivers/nrf_802154_serialization/src/include/nrf_802154_spinel.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,20 @@ extern "C" {
5555
#define CONFIG_NRF_802154_SER_DEFAULT_RESPONSE_TIMEOUT 100
5656
#endif /* CONFIG_NRF_802154_SER_DEFAULT_RESPONSE_TIMEOUT */
5757

58+
/**
59+
* @brief Maximal size of a Spinel frame in 802.15.4 serializaiton.
60+
*/
61+
#define NRF_802154_SPINEL_FRAME_MAX_SIZE 256
62+
63+
/**
64+
* @brief Buffer size for Spinel frame in 802.15.4 serializaiton.
65+
*
66+
* This macro can used as a replacement for @ref SPINEL_FRAME_BUFFER_SIZE in 802.15.4 serialization
67+
* to reduce memory required for Spinel frame processing.
68+
*/
69+
#define NRF_802154_SPINEL_FRAME_BUFFER_SIZE (NRF_802154_SPINEL_FRAME_MAX_SIZE + \
70+
SPINEL_ENCRYPTER_EXTRA_DATA_SIZE)
71+
5872
/**
5973
* @brief Serializes data according to format string and sends it over spinel backend.
6074
*

drivers/nrf_802154_serialization/src/include/nrf_802154_spinel_response_notifier.h

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,23 +79,27 @@ void nrf_802154_spinel_response_notifier_init(void);
7979
* implemented. Because of that before a new request is sent, the previous
8080
* response must be received.
8181
*
82-
* This function shall be used before sending a request that will require
83-
* awaiting for a response.
82+
* This function shall be used before sending a request that will require awaiting for a response.
83+
*
84+
* An awaited property is an identificatior of a response that is to be returned for a serialized
85+
* call that takes place after the notifier lock. The property shall be awaited with
86+
* @ref nrf_802154_spinel_response_notifier_property_await.
87+
*
88+
* @param[in] property Awaited property.
89+
*
8490
*/
85-
void nrf_802154_spinel_response_notifier_lock_before_request(void);
91+
void nrf_802154_spinel_response_notifier_lock_before_request(spinel_prop_key_t property);
8692

8793
/**
88-
* @brief Wait with timeout for given property to be notified.
94+
* @brief Wait with timeout for property to be notified.
8995
*
90-
* @param[in] property Awaited property.
9196
* @param[in] timeout Timeout in us.
9297
*
9398
* @returns pointer to @ref nrf_802154_spinel_notify_buff_t with notified property data
9499
* or NULL in case of timeout.
95100
*
96101
*/
97102
nrf_802154_spinel_notify_buff_t * nrf_802154_spinel_response_notifier_property_await(
98-
spinel_prop_key_t property,
99103
uint32_t timeout);
100104

101105
/**

drivers/nrf_802154_serialization/src/nrf_802154_spinel.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
*
2929
*/
3030

31+
#include "nrf_802154_spinel.h"
32+
3133
#include <stdint.h>
3234
#include <stddef.h>
3335

@@ -85,9 +87,7 @@ void nrf_802154_serialization_init(void)
8587

8688
nrf_802154_ser_err_t nrf_802154_spinel_send(const char * p_fmt, ...)
8789
{
88-
// TODO: This makes this function non reentrant.
89-
// We may want to shrink this buffer and put it on stack.
90-
static uint8_t command_buff[SPINEL_FRAME_BUFFER_SIZE];
90+
uint8_t command_buff[NRF_802154_SPINEL_FRAME_BUFFER_SIZE];
9191
spinel_ssize_t siz;
9292

9393
va_list args;

drivers/nrf_802154_serialization/src/nrf_802154_spinel_app.c

Lines changed: 23 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,7 @@ static nrf_802154_ser_err_t status_ok_await(uint32_t timeout)
7575

7676
SERIALIZATION_ERROR_INIT(error);
7777

78-
p_notify_data = nrf_802154_spinel_response_notifier_property_await(SPINEL_PROP_LAST_STATUS,
79-
timeout);
78+
p_notify_data = nrf_802154_spinel_response_notifier_property_await(timeout);
8079

8180
SERIALIZATION_ERROR_IF(p_notify_data == NULL,
8281
NRF_802154_SERIALIZATION_ERROR_RESPONSE_TIMEOUT,
@@ -117,16 +116,14 @@ static nrf_802154_ser_err_t status_ok_await(uint32_t timeout)
117116
*/
118117
static nrf_802154_ser_err_t net_generic_bool_response_await(
119118
bool * p_net_response,
120-
spinel_prop_key_t property_id,
121119
uint32_t timeout)
122120
{
123121
nrf_802154_ser_err_t res;
124122
nrf_802154_spinel_notify_buff_t * p_notify_data = NULL;
125123

126124
SERIALIZATION_ERROR_INIT(error);
127125

128-
p_notify_data = nrf_802154_spinel_response_notifier_property_await(property_id,
129-
timeout);
126+
p_notify_data = nrf_802154_spinel_response_notifier_property_await(timeout);
130127

131128
SERIALIZATION_ERROR_IF(p_notify_data == NULL,
132129
NRF_802154_SERIALIZATION_ERROR_RESPONSE_TIMEOUT,
@@ -168,7 +165,6 @@ static nrf_802154_ser_err_t channel_await(uint32_t timeout, uint8_t * p_channel)
168165
SERIALIZATION_ERROR_INIT(error);
169166

170167
p_notify_data = nrf_802154_spinel_response_notifier_property_await(
171-
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_CHANNEL_GET,
172168
timeout);
173169

174170
SERIALIZATION_ERROR_IF(p_notify_data == NULL,
@@ -211,7 +207,6 @@ static nrf_802154_ser_err_t tx_power_await(uint32_t timeout, int8_t * p_power)
211207
SERIALIZATION_ERROR_INIT(error);
212208

213209
p_notify_data = nrf_802154_spinel_response_notifier_property_await(
214-
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_TX_POWER_GET,
215210
timeout);
216211

217212
SERIALIZATION_ERROR_IF(p_notify_data == NULL,
@@ -251,7 +246,7 @@ bool nrf_802154_sleep(void)
251246

252247
NRF_802154_SPINEL_LOG_BANNER_CALLING();
253248

254-
nrf_802154_spinel_response_notifier_lock_before_request();
249+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_VENDOR_NORDIC_NRF_802154_SLEEP);
255250

256251
res = nrf_802154_spinel_send_cmd_prop_value_set(
257252
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_SLEEP,
@@ -261,7 +256,6 @@ bool nrf_802154_sleep(void)
261256
SERIALIZATION_ERROR_CHECK(res, error, bail);
262257

263258
res = net_generic_bool_response_await(&sleep_remote_resp,
264-
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_SLEEP,
265259
CONFIG_NRF_802154_SER_DEFAULT_RESPONSE_TIMEOUT);
266260

267261
SERIALIZATION_ERROR_CHECK(res, error, bail);
@@ -281,7 +275,7 @@ bool nrf_802154_receive(void)
281275

282276
NRF_802154_SPINEL_LOG_BANNER_CALLING();
283277

284-
nrf_802154_spinel_response_notifier_lock_before_request();
278+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_VENDOR_NORDIC_NRF_802154_RECEIVE);
285279

286280
res = nrf_802154_spinel_send_cmd_prop_value_set(
287281
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_RECEIVE,
@@ -291,7 +285,6 @@ bool nrf_802154_receive(void)
291285
SERIALIZATION_ERROR_CHECK(res, error, bail);
292286

293287
res = net_generic_bool_response_await(&receive_remote_resp,
294-
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_RECEIVE,
295288
CONFIG_NRF_802154_SER_DEFAULT_RESPONSE_TIMEOUT);
296289

297290
SERIALIZATION_ERROR_CHECK(res, error, bail);
@@ -311,7 +304,7 @@ void nrf_802154_pan_id_set(const uint8_t * p_pan_id)
311304
NRF_802154_SPINEL_LOG_BANNER_CALLING();
312305
NRF_802154_SPINEL_LOG_BUFF(p_pan_id, PAN_ID_SIZE);
313306

314-
nrf_802154_spinel_response_notifier_lock_before_request();
307+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_LAST_STATUS);
315308

316309
res = nrf_802154_spinel_send_cmd_prop_value_set(
317310
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_PAN_ID_SET,
@@ -339,7 +332,7 @@ void nrf_802154_short_address_set(const uint8_t * p_short_address)
339332
NRF_802154_SPINEL_LOG_BANNER_CALLING();
340333
NRF_802154_SPINEL_LOG_BUFF(p_short_address, SHORT_ADDRESS_SIZE);
341334

342-
nrf_802154_spinel_response_notifier_lock_before_request();
335+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_LAST_STATUS);
343336

344337
res = nrf_802154_spinel_send_cmd_prop_value_set(
345338
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_SHORT_ADDRESS_SET,
@@ -367,7 +360,7 @@ void nrf_802154_extended_address_set(const uint8_t * p_extended_address)
367360
NRF_802154_SPINEL_LOG_BANNER_CALLING();
368361
NRF_802154_SPINEL_LOG_BUFF(p_extended_address, EXTENDED_ADDRESS_SIZE);
369362

370-
nrf_802154_spinel_response_notifier_lock_before_request();
363+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_LAST_STATUS);
371364

372365
res = nrf_802154_spinel_send_cmd_prop_value_set(
373366
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_EXTENDED_ADDRESS_SET,
@@ -395,7 +388,7 @@ void nrf_802154_pan_coord_set(bool enabled)
395388
NRF_802154_SPINEL_LOG_BANNER_CALLING();
396389
NRF_802154_SPINEL_LOG_VAR_NAMED("%s", enabled ? "true" : "false", "enabled");
397390

398-
nrf_802154_spinel_response_notifier_lock_before_request();
391+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_LAST_STATUS);
399392

400393
res = nrf_802154_spinel_send_cmd_prop_value_set(
401394
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_PAN_COORD_SET,
@@ -422,7 +415,7 @@ void nrf_802154_promiscuous_set(bool enabled)
422415
NRF_802154_SPINEL_LOG_BANNER_CALLING();
423416
NRF_802154_SPINEL_LOG_VAR_NAMED("%s", enabled ? "true" : "false", "enabled");
424417

425-
nrf_802154_spinel_response_notifier_lock_before_request();
418+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_LAST_STATUS);
426419

427420
res = nrf_802154_spinel_send_cmd_prop_value_set(
428421
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_PROMISCUOUS_SET,
@@ -447,7 +440,7 @@ void nrf_802154_src_addr_matching_method_set(nrf_802154_src_addr_match_t match_m
447440
NRF_802154_SPINEL_LOG_BANNER_CALLING();
448441
NRF_802154_SPINEL_LOG_VAR("%u", match_method);
449442

450-
nrf_802154_spinel_response_notifier_lock_before_request();
443+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_LAST_STATUS);
451444

452445
res = nrf_802154_spinel_send_cmd_prop_value_set(
453446
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_SRC_ADDR_MATCHING_METHOD_SET,
@@ -472,7 +465,7 @@ void nrf_802154_auto_pending_bit_set(bool enabled)
472465
NRF_802154_SPINEL_LOG_BANNER_CALLING();
473466
NRF_802154_SPINEL_LOG_VAR_NAMED("%s", (enabled ? "true" : "false"), "enabled");
474467

475-
nrf_802154_spinel_response_notifier_lock_before_request();
468+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_LAST_STATUS);
476469

477470
res = nrf_802154_spinel_send_cmd_prop_value_set(
478471
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_AUTO_PENDING_BIT_SET,
@@ -499,7 +492,7 @@ bool nrf_802154_pending_bit_for_addr_set(const uint8_t * p_addr, bool extended)
499492
NRF_802154_SPINEL_LOG_BUFF(p_addr, extended ? 8 : 2);
500493
NRF_802154_SPINEL_LOG_VAR_NAMED("%s", (extended ? "true" : "false"), "extended");
501494

502-
nrf_802154_spinel_response_notifier_lock_before_request();
495+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_VENDOR_NORDIC_NRF_802154_PENDING_BIT_FOR_ADDR_SET);
503496

504497
res = nrf_802154_spinel_send_cmd_prop_value_set(
505498
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_PENDING_BIT_FOR_ADDR_SET,
@@ -510,7 +503,6 @@ bool nrf_802154_pending_bit_for_addr_set(const uint8_t * p_addr, bool extended)
510503
SERIALIZATION_ERROR_CHECK(res, error, bail);
511504

512505
res = net_generic_bool_response_await(&addr_set_res,
513-
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_PENDING_BIT_FOR_ADDR_SET,
514506
CONFIG_NRF_802154_SER_DEFAULT_RESPONSE_TIMEOUT);
515507

516508
SERIALIZATION_ERROR_CHECK(res, error, bail);
@@ -532,7 +524,7 @@ bool nrf_802154_pending_bit_for_addr_clear(const uint8_t * p_addr, bool extended
532524
NRF_802154_SPINEL_LOG_BUFF(p_addr, extended ? 8 : 2);
533525
NRF_802154_SPINEL_LOG_VAR_NAMED("%s", (extended ? "true" : "false"), "extended");
534526

535-
nrf_802154_spinel_response_notifier_lock_before_request();
527+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_VENDOR_NORDIC_NRF_802154_PENDING_BIT_FOR_ADDR_CLEAR);
536528

537529
res = nrf_802154_spinel_send_cmd_prop_value_set(
538530
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_PENDING_BIT_FOR_ADDR_CLEAR,
@@ -543,7 +535,6 @@ bool nrf_802154_pending_bit_for_addr_clear(const uint8_t * p_addr, bool extended
543535
SERIALIZATION_ERROR_CHECK(res, error, bail);
544536

545537
res = net_generic_bool_response_await(&addr_clr_res,
546-
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_PENDING_BIT_FOR_ADDR_CLEAR,
547538
CONFIG_NRF_802154_SER_DEFAULT_RESPONSE_TIMEOUT);
548539

549540
SERIALIZATION_ERROR_CHECK(res, error, bail);
@@ -563,7 +554,7 @@ void nrf_802154_pending_bit_for_addr_reset(bool extended)
563554
NRF_802154_SPINEL_LOG_BANNER_CALLING();
564555
NRF_802154_SPINEL_LOG_VAR_NAMED("%s", (extended ? "true" : "false"), "extended");
565556

566-
nrf_802154_spinel_response_notifier_lock_before_request();
557+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_LAST_STATUS);
567558

568559
res = nrf_802154_spinel_send_cmd_prop_value_set(
569560
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_PENDING_BIT_FOR_ADDR_RESET,
@@ -589,7 +580,7 @@ void nrf_802154_channel_set(uint8_t channel)
589580
NRF_802154_SPINEL_LOG_BANNER_CALLING();
590581
NRF_802154_SPINEL_LOG_VAR("%u", channel);
591582

592-
nrf_802154_spinel_response_notifier_lock_before_request();
583+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_LAST_STATUS);
593584

594585
res = nrf_802154_spinel_send_cmd_prop_value_set(
595586
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_CHANNEL_SET,
@@ -616,7 +607,7 @@ uint8_t nrf_802154_channel_get(void)
616607

617608
NRF_802154_SPINEL_LOG_BANNER_CALLING();
618609

619-
nrf_802154_spinel_response_notifier_lock_before_request();
610+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_VENDOR_NORDIC_NRF_802154_CHANNEL_GET);
620611

621612
res = nrf_802154_spinel_send_cmd_prop_value_set(
622613
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_CHANNEL_GET,
@@ -643,7 +634,7 @@ bool nrf_802154_cca(void)
643634

644635
NRF_802154_SPINEL_LOG_BANNER_CALLING();
645636

646-
nrf_802154_spinel_response_notifier_lock_before_request();
637+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_VENDOR_NORDIC_NRF_802154_CCA);
647638

648639
res = nrf_802154_spinel_send_cmd_prop_value_set(
649640
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_CCA,
@@ -653,7 +644,6 @@ bool nrf_802154_cca(void)
653644
SERIALIZATION_ERROR_CHECK(res, error, bail);
654645

655646
res = net_generic_bool_response_await(&cca_result,
656-
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_CCA,
657647
CONFIG_NRF_802154_SER_DEFAULT_RESPONSE_TIMEOUT);
658648

659649
SERIALIZATION_ERROR_CHECK(res, error, bail);
@@ -673,7 +663,7 @@ bool nrf_802154_energy_detection(uint32_t time_us)
673663

674664
NRF_802154_SPINEL_LOG_BANNER_CALLING();
675665

676-
nrf_802154_spinel_response_notifier_lock_before_request();
666+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_VENDOR_NORDIC_NRF_802154_ENERGY_DETECTION);
677667

678668
res = nrf_802154_spinel_send_cmd_prop_value_set(
679669
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_ENERGY_DETECTION,
@@ -684,7 +674,6 @@ bool nrf_802154_energy_detection(uint32_t time_us)
684674

685675
res = net_generic_bool_response_await(
686676
&ed_result,
687-
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_ENERGY_DETECTION,
688677
CONFIG_NRF_802154_SER_DEFAULT_RESPONSE_TIMEOUT);
689678

690679
SERIALIZATION_ERROR_CHECK(res, error, bail);
@@ -710,7 +699,7 @@ void nrf_802154_transmit_csma_ca_raw(const uint8_t * p_data)
710699

711700
SERIALIZATION_ERROR_IF(!handle_added, NRF_802154_SERIALIZATION_ERROR_NO_MEMORY, error, bail);
712701

713-
nrf_802154_spinel_response_notifier_lock_before_request();
702+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_VENDOR_NORDIC_NRF_802154_TRANSMIT_CSMA_CA_RAW);
714703

715704
res = nrf_802154_spinel_send_cmd_prop_value_set(
716705
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_TRANSMIT_CSMA_CA_RAW,
@@ -744,7 +733,7 @@ bool nrf_802154_transmit_raw(const uint8_t * p_data, bool cca)
744733

745734
SERIALIZATION_ERROR_IF(!handle_added, NRF_802154_SERIALIZATION_ERROR_NO_MEMORY, error, bail);
746735

747-
nrf_802154_spinel_response_notifier_lock_before_request();
736+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_VENDOR_NORDIC_NRF_802154_TRANSMIT_RAW);
748737

749738
res = nrf_802154_spinel_send_cmd_prop_value_set(
750739
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_TRANSMIT_RAW,
@@ -756,7 +745,6 @@ bool nrf_802154_transmit_raw(const uint8_t * p_data, bool cca)
756745

757746
res = net_generic_bool_response_await(
758747
&transmit_result,
759-
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_TRANSMIT_RAW,
760748
CONFIG_NRF_802154_SER_DEFAULT_RESPONSE_TIMEOUT);
761749

762750
SERIALIZATION_ERROR_CHECK(res, error, bail);
@@ -792,7 +780,7 @@ void nrf_802154_buffer_free_raw(uint8_t * p_data)
792780
SERIALIZATION_ERROR_IF(
793781
!handle_found, NRF_802154_SERIALIZATION_ERROR_INVALID_BUFFER, error, bail);
794782

795-
nrf_802154_spinel_response_notifier_lock_before_request();
783+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_LAST_STATUS);
796784

797785
res = nrf_802154_spinel_send_cmd_prop_value_set(
798786
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_BUFFER_FREE_RAW,
@@ -821,7 +809,7 @@ void nrf_802154_tx_power_set(int8_t power)
821809

822810
NRF_802154_SPINEL_LOG_BANNER_CALLING();
823811

824-
nrf_802154_spinel_response_notifier_lock_before_request();
812+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_LAST_STATUS);
825813

826814
res = nrf_802154_spinel_send_cmd_prop_value_set(
827815
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_TX_POWER_SET,
@@ -848,7 +836,7 @@ int8_t nrf_802154_tx_power_get(void)
848836

849837
NRF_802154_SPINEL_LOG_BANNER_CALLING();
850838

851-
nrf_802154_spinel_response_notifier_lock_before_request();
839+
nrf_802154_spinel_response_notifier_lock_before_request(SPINEL_PROP_VENDOR_NORDIC_NRF_802154_TX_POWER_GET);
852840

853841
res = nrf_802154_spinel_send_cmd_prop_value_set(
854842
SPINEL_PROP_VENDOR_NORDIC_NRF_802154_TX_POWER_GET,

drivers/nrf_802154_serialization/src/nrf_802154_spinel_dec_net.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,12 @@ static nrf_802154_ser_err_t spinel_decode_prop_nrf_802154_transmit_raw(
621621

622622
bool result = nrf_802154_transmit_raw(p_local_frame_ptr, cca);
623623

624+
if (!result)
625+
{
626+
nrf_802154_buffer_mgr_dst_remove_by_local_pointer(nrf_802154_spinel_dst_buffer_mgr_get(),
627+
p_local_frame_ptr);
628+
}
629+
624630
return nrf_802154_spinel_send_cmd_prop_value_is(SPINEL_PROP_VENDOR_NORDIC_NRF_802154_TRANSMIT_RAW,
625631
SPINEL_DATATYPE_NRF_802154_TRANSMIT_RAW_RET,
626632
result);

drivers/nrf_802154_serialization/src/platform/zephyr/nrf_802154_spinel_backend_ipc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ static K_SEM_DEFINE(ready_sem, 0, 1);
5656
#define VRING_ALIGNMENT 4
5757
#define VRING_SIZE 16
5858

59-
#define IPM_WORK_QUEUE_STACK_SIZE 512
59+
#define IPM_WORK_QUEUE_STACK_SIZE 2048
6060

6161
#if IS_ENABLED(CONFIG_COOP_ENABLED)
6262
#define IPM_WORK_QUEUE_PRIORITY -1

0 commit comments

Comments
 (0)