MCPcopy Create free account
hub / github.com/F-Stack/f-stack / dlb2_event_release

Function dlb2_event_release

dpdk/drivers/event/dlb2/dlb2.c:3159–3236  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3157}
3158
3159static void
3160dlb2_event_release(struct dlb2_eventdev *dlb2,
3161 uint8_t port_id,
3162 int n)
3163{
3164 struct process_local_port_data *port_data;
3165 struct dlb2_eventdev_port *ev_port;
3166 struct dlb2_port *qm_port;
3167 int i;
3168
3169 if (port_id > dlb2->num_ports) {
3170 DLB2_LOG_ERR("Invalid port id %d in dlb2-event_release",
3171 port_id);
3172 rte_errno = -EINVAL;
3173 return;
3174 }
3175
3176 ev_port = &dlb2->ev_ports[port_id];
3177 qm_port = &ev_port->qm_port;
3178 port_data = &dlb2_port[qm_port->id][PORT_TYPE(qm_port)];
3179
3180 i = 0;
3181
3182 if (qm_port->is_directed) {
3183 i = n;
3184 goto sw_credit_update;
3185 }
3186
3187 while (i < n) {
3188 int pop_offs = 0;
3189 int j = 0;
3190
3191 /* Zero-out QEs */
3192 _mm_storeu_si128((void *)&qm_port->qe4[0], _mm_setzero_si128());
3193 _mm_storeu_si128((void *)&qm_port->qe4[1], _mm_setzero_si128());
3194 _mm_storeu_si128((void *)&qm_port->qe4[2], _mm_setzero_si128());
3195 _mm_storeu_si128((void *)&qm_port->qe4[3], _mm_setzero_si128());
3196
3197
3198 for (; j < DLB2_NUM_QES_PER_CACHE_LINE && (i + j) < n; j++) {
3199 int16_t thresh = qm_port->token_pop_thresh;
3200
3201 if (qm_port->token_pop_mode == RTE_PMD_DLB2_DELAYED_POP &&
3202 qm_port->issued_releases >= thresh - 1) {
3203 /* Insert the token pop QE */
3204 dlb2_construct_token_pop_qe(qm_port, j);
3205
3206 /* Reset the releases for the next QE batch */
3207 qm_port->issued_releases -= thresh;
3208
3209 pop_offs = 1;
3210 j++;
3211 break;
3212 }
3213
3214 qm_port->qe4[j].cmd_byte = DLB2_COMP_CMD_BYTE;
3215 qm_port->issued_releases++;
3216 }

Callers 2

dlb2_event_dequeue_burstFunction · 0.85

Calls 3

dlb2_hw_do_enqueueFunction · 0.85

Tested by

no test coverage detected