Skip to content

Commit 81612f2

Browse files
committed
Fix some issues of ff msg.
1 parent 03a3be5 commit 81612f2

File tree

3 files changed

+33
-20
lines changed

3 files changed

+33
-20
lines changed

lib/ff_dpdk_if.c

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1600,17 +1600,33 @@ handle_msg(struct ff_msg *msg, uint16_t proc_id)
16001600
handle_default_msg(msg);
16011601
break;
16021602
}
1603-
rte_ring_enqueue(msg_ring[proc_id].ring[msg->msg_type], msg);
1603+
if (rte_ring_enqueue(msg_ring[proc_id].ring[msg->msg_type], msg) < 0) {
1604+
if (msg->original_buf) {
1605+
rte_free(msg->buf_addr);
1606+
msg->buf_addr = msg->original_buf;
1607+
msg->buf_len = msg->original_buf_len;
1608+
msg->original_buf = NULL;
1609+
}
1610+
1611+
rte_mempool_put(message_pool, msg);
1612+
}
16041613
}
16051614

16061615
static inline int
1607-
process_msg_ring(uint16_t proc_id)
1616+
process_msg_ring(uint16_t proc_id, struct rte_mbuf **pkts_burst)
16081617
{
1609-
void *msg;
1610-
int ret = rte_ring_dequeue(msg_ring[proc_id].ring[0], &msg);
1618+
/* read msg from ring buf and to process */
1619+
uint16_t nb_rb;
1620+
int i;
1621+
1622+
nb_rb = rte_ring_dequeue_burst(msg_ring[proc_id].ring[0],
1623+
(void **)pkts_burst, MAX_PKT_BURST, NULL);
1624+
1625+
if (likely(nb_rb == 0))
1626+
return 0;
16111627

1612-
if (unlikely(ret == 0)) {
1613-
handle_msg((struct ff_msg *)msg, proc_id);
1628+
for (i = 0; i < nb_rb; ++i) {
1629+
handle_msg((struct ff_msg *)pkts_burst[i], proc_id);
16141630
}
16151631

16161632
return 0;
@@ -1902,7 +1918,7 @@ main_loop(void *arg)
19021918
}
19031919
}
19041920

1905-
process_msg_ring(qconf->proc_id);
1921+
process_msg_ring(qconf->proc_id, pkts_burst);
19061922

19071923
div_tsc = rte_rdtsc();
19081924

tools/compat/ff_ipc.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,13 @@ ff_ipc_msg_free(struct ff_msg *msg)
114114
return -1;
115115
}
116116

117+
if (msg->original_buf) {
118+
rte_free(msg->buf_addr);
119+
msg->buf_addr = msg->original_buf;
120+
msg->buf_len = msg->original_buf_len;
121+
msg->original_buf = NULL;
122+
}
123+
117124
rte_mempool_put(message_pool, msg);
118125

119126
return 0;

tools/compat/sysctl.c

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,6 @@
3030

3131
#include "ff_ipc.h"
3232

33-
#define FREE_FF_MSG(m) do { \
34-
if (m->original_buf) { \
35-
rte_free(m->buf_addr); \
36-
m->buf_addr = m->original_buf; \
37-
m->buf_len = m->original_buf_len; \
38-
m->original_buf = NULL; \
39-
} \
40-
ff_ipc_msg_free(m); \
41-
} while (0);
42-
4333
int
4434
sysctl(int *name, unsigned namelen, void *old,
4535
size_t *oldlenp, const void *new, size_t newlen)
@@ -64,7 +54,7 @@ sysctl(int *name, unsigned namelen, void *old,
6454
oldlen = *oldlenp;
6555
}
6656

67-
total_len = namelen + oldlen + newlen;
57+
total_len = namelen * sizeof(int) + sizeof(size_t) + oldlen + newlen;
6858
if (total_len > msg->buf_len) {
6959
extra_buf = rte_malloc(NULL, total_len, 0);
7060
if (extra_buf == NULL) {
@@ -123,7 +113,7 @@ sysctl(int *name, unsigned namelen, void *old,
123113

124114
do {
125115
if (retmsg != NULL) {
126-
FREE_FF_MSG(retmsg)
116+
ff_ipc_msg_free(retmsg);
127117
}
128118
ret = ff_ipc_recv(&retmsg, msg->msg_type);
129119
if (ret < 0) {
@@ -147,7 +137,7 @@ sysctl(int *name, unsigned namelen, void *old,
147137
}
148138

149139
error:
150-
FREE_FF_MSG(msg)
140+
ff_ipc_msg_free(msg);
151141

152142
return ret;
153143
}

0 commit comments

Comments
 (0)