On 09/14 11:53:06, Matias Elo wrote:
> +
> +     /* Clear possible locally stored buffers */
> +     odp_schedule_pause();
> +
> +     while (1) {
> +             ev = odp_schedule(&src_queue, ODP_SCHED_NO_WAIT);
> +
> +             if (ev == ODP_EVENT_INVALID)
> +                     break;
> +
> +             if (odp_queue_enq(src_queue, ev)) {
> +                     LOG_ERR("[%i] Queue enqueue failed.\n", thr);
> +                     odp_event_free(ev);
> +                     return -1;
> +             }
> +     }
> +
> +     odp_schedule_resume();

Is it possible to skip this and go straight to draining the queues?

Locally pre-scheduled work is an implementation detail that should be hidden
by the scheduling APIs.

A hardware scheduler may not pre-schedule work to cores the way the current
software implementation does. The ODP implementation for that environment
would have to turn the scheduling call into a nop for that core if it is
paused by use of these APIs. Another way to implement it would be to remove
this core from all queue scheduling groups and leave the schedule call as-is.
If implemented by the first method, the application writer could simply just
not call the API to schedule work. If implemented by the second method, there
are already scheduling group APIs to do this.

Are odp_schedule_pause() and odp_schedule_resume() deprecated?

> +     odp_barrier_wait(&globals->barrier);
> +
> +     clear_sched_queues();

Reply via email to