| 155 | } |
| 156 | |
| 157 | int |
| 158 | ff_ipc_recv(struct ff_msg **msg, enum FF_MSG_TYPE msg_type) |
| 159 | { |
| 160 | int ret, i; |
| 161 | if (inited == 0) { |
| 162 | printf("ff ipc not inited\n"); |
| 163 | return -1; |
| 164 | } |
| 165 | |
| 166 | char name[RTE_RING_NAMESIZE]; |
| 167 | snprintf(name, RTE_RING_NAMESIZE, "%s%u_%u", |
| 168 | FF_MSG_RING_OUT, ff_proc_id, msg_type); |
| 169 | struct rte_ring *ring = rte_ring_lookup(name); |
| 170 | if (ring == NULL) { |
| 171 | printf("lookup message ring:%s failed!\n", name); |
| 172 | return -1; |
| 173 | } |
| 174 | |
| 175 | void *obj; |
| 176 | #define MAX_ATTEMPTS_NUM 1000 |
| 177 | for (i = 0; i < MAX_ATTEMPTS_NUM; i++) { |
| 178 | ret = rte_ring_dequeue(ring, &obj); |
| 179 | if (ret == 0) { |
| 180 | *msg = (struct ff_msg *)obj; |
| 181 | break; |
| 182 | } |
| 183 | |
| 184 | usleep(1000); |
| 185 | } |
| 186 | |
| 187 | return ret; |
| 188 | } |
no test coverage detected