5
5
*/
6
6
#include <sys/mpsc_pbuf.h>
7
7
8
+ #define MPSC_PBUF_DEBUG 0
9
+
10
+ #define MPSC_PBUF_DBG (buffer , ...) do { \
11
+ if (MPSC_PBUF_DEBUG) { \
12
+ printk(__VA_ARGS__); \
13
+ if (buffer) { \
14
+ mpsc_state_print(buffer); \
15
+ } \
16
+ } \
17
+ } while (0)
18
+
19
+ static inline void mpsc_state_print (struct mpsc_pbuf_buffer * buffer )
20
+ {
21
+ if (MPSC_PBUF_DEBUG ) {
22
+ printk ("wr:%d/%d, rd:%d/%d\n" ,
23
+ buffer -> wr_idx , buffer -> tmp_wr_idx ,
24
+ buffer -> rd_idx , buffer -> tmp_rd_idx );
25
+ }
26
+ }
27
+
8
28
void mpsc_pbuf_init (struct mpsc_pbuf_buffer * buffer ,
9
29
const struct mpsc_pbuf_buffer_config * cfg )
10
30
{
@@ -188,6 +208,7 @@ union mpsc_pbuf_generic *mpsc_pbuf_alloc(struct mpsc_pbuf_buffer *buffer,
188
208
bool cont ;
189
209
uint32_t free_wlen ;
190
210
211
+ MPSC_PBUF_DBG (buffer , "alloc %d words, " , (int )wlen );
191
212
do {
192
213
k_spinlock_key_t key ;
193
214
bool wrap ;
@@ -230,6 +251,13 @@ union mpsc_pbuf_generic *mpsc_pbuf_alloc(struct mpsc_pbuf_buffer *buffer,
230
251
}
231
252
} while (cont );
232
253
254
+ MPSC_PBUF_DBG (buffer , "allocated %p " , item );
255
+
256
+ if (IS_ENABLED (CONFIG_MPSC_CLEAR_ALLOCATED ) && item ) {
257
+ /* During test fill with 0's to simplify message comparison */
258
+ memset (item , 0 , sizeof (int ) * wlen );
259
+ }
260
+
233
261
return item ;
234
262
}
235
263
@@ -243,6 +271,7 @@ void mpsc_pbuf_commit(struct mpsc_pbuf_buffer *buffer,
243
271
item -> hdr .valid = 1 ;
244
272
buffer -> wr_idx = idx_inc (buffer , buffer -> wr_idx , wlen );
245
273
k_spin_unlock (& buffer -> lock , key );
274
+ MPSC_PBUF_DBG (buffer , "committed %p " , item );
246
275
}
247
276
248
277
void mpsc_pbuf_put_word_ext (struct mpsc_pbuf_buffer * buffer ,
@@ -368,6 +397,9 @@ union mpsc_pbuf_generic *mpsc_pbuf_claim(struct mpsc_pbuf_buffer *buffer)
368
397
}
369
398
}
370
399
400
+ if (!cont ) {
401
+ MPSC_PBUF_DBG (buffer , "claimed: %p " , item );
402
+ }
371
403
k_spin_unlock (& buffer -> lock , key );
372
404
} while (cont );
373
405
@@ -388,6 +420,7 @@ void mpsc_pbuf_free(struct mpsc_pbuf_buffer *buffer,
388
420
} else {
389
421
item -> skip .len = wlen ;
390
422
}
423
+ MPSC_PBUF_DBG (buffer , "freed: %p " , item );
391
424
392
425
k_spin_unlock (& buffer -> lock , key );
393
426
k_sem_give (& buffer -> sem );
0 commit comments