| 3157 | } |
| 3158 | |
| 3159 | static void |
| 3160 | dlb2_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 | } |
no test coverage detected