eventdev: introduce specialized enqueue forward op variant
Introducing the rte_event_enqueue_new_burst() for enabling the PMD, an optimization opportunity to optimize if all the events in the enqueue burst has the op type of RTE_EVENT_OP_FORWARD. If a PMD does not have any optimization opportunity for this operation then the PMD can choose the generic enqueue burst PMD callback as the fallback. Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> Acked-by: Gage Eads <gage.eads@intel.com> Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
This commit is contained in:
parent
6529378497
commit
5eea2d1076
@ -626,6 +626,7 @@ dpaa2_eventdev_create(const char *name)
|
||||
eventdev->enqueue = dpaa2_eventdev_enqueue;
|
||||
eventdev->enqueue_burst = dpaa2_eventdev_enqueue_burst;
|
||||
eventdev->enqueue_new_burst = dpaa2_eventdev_enqueue_burst;
|
||||
eventdev->enqueue_forward_burst = dpaa2_eventdev_enqueue_burst;
|
||||
eventdev->dequeue = dpaa2_eventdev_dequeue;
|
||||
eventdev->dequeue_burst = dpaa2_eventdev_dequeue_burst;
|
||||
|
||||
|
@ -159,6 +159,7 @@ ssovf_fastpath_fns_set(struct rte_eventdev *dev)
|
||||
dev->enqueue = ssows_enq;
|
||||
dev->enqueue_burst = ssows_enq_burst;
|
||||
dev->enqueue_new_burst = ssows_enq_burst;
|
||||
dev->enqueue_forward_burst = ssows_enq_burst;
|
||||
dev->dequeue = ssows_deq;
|
||||
dev->dequeue_burst = ssows_deq_burst;
|
||||
|
||||
|
@ -797,6 +797,7 @@ sw_probe(struct rte_vdev_device *vdev)
|
||||
dev->enqueue = sw_event_enqueue;
|
||||
dev->enqueue_burst = sw_event_enqueue_burst;
|
||||
dev->enqueue_new_burst = sw_event_enqueue_burst;
|
||||
dev->enqueue_forward_burst = sw_event_enqueue_burst;
|
||||
dev->dequeue = sw_event_dequeue;
|
||||
dev->dequeue_burst = sw_event_dequeue_burst;
|
||||
dev->schedule = sw_event_schedule;
|
||||
|
@ -1067,6 +1067,8 @@ struct rte_eventdev {
|
||||
/**< Pointer to PMD enqueue burst function. */
|
||||
event_enqueue_burst_t enqueue_new_burst;
|
||||
/**< Pointer to PMD enqueue burst function(op new variant) */
|
||||
event_enqueue_burst_t enqueue_forward_burst;
|
||||
/**< Pointer to PMD enqueue burst function(op forward variant) */
|
||||
event_dequeue_t dequeue;
|
||||
/**< Pointer to PMD dequeue function. */
|
||||
event_dequeue_burst_t dequeue_burst;
|
||||
@ -1231,6 +1233,55 @@ rte_event_enqueue_new_burst(uint8_t dev_id, uint8_t port_id,
|
||||
dev->enqueue_new_burst);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueue a burst of events objects of operation type *RTE_EVENT_OP_FORWARD*
|
||||
* on an event device designated by its *dev_id* through the event port
|
||||
* specified by *port_id*.
|
||||
*
|
||||
* Provides the same functionality as rte_event_enqueue_burst(), expect that
|
||||
* application can use this API when the all objects in the burst contains
|
||||
* the enqueue operation of the type *RTE_EVENT_OP_FORWARD*. This specialized
|
||||
* function can provide the additional hint to the PMD and optimize if possible.
|
||||
*
|
||||
* The rte_event_enqueue_new_burst() result is undefined if the enqueue burst
|
||||
* has event object of operation type != RTE_EVENT_OP_FORWARD.
|
||||
*
|
||||
* @param dev_id
|
||||
* The identifier of the device.
|
||||
* @param port_id
|
||||
* The identifier of the event port.
|
||||
* @param ev
|
||||
* Points to an array of *nb_events* objects of type *rte_event* structure
|
||||
* which contain the event object enqueue operations to be processed.
|
||||
* @param nb_events
|
||||
* The number of event objects to enqueue, typically number of
|
||||
* rte_event_port_enqueue_depth() available for this port.
|
||||
*
|
||||
* @return
|
||||
* The number of event objects actually enqueued on the event device. The
|
||||
* return value can be less than the value of the *nb_events* parameter when
|
||||
* the event devices queue is full or if invalid parameters are specified in a
|
||||
* *rte_event*. If the return value is less than *nb_events*, the remaining
|
||||
* events at the end of ev[] are not consumed and the caller has to take care
|
||||
* of them, and rte_errno is set accordingly. Possible errno values include:
|
||||
* - -EINVAL The port ID is invalid, device ID is invalid, an event's queue
|
||||
* ID is invalid, or an event's sched type doesn't match the
|
||||
* capabilities of the destination queue.
|
||||
* - -ENOSPC The event port was backpressured and unable to enqueue
|
||||
* one or more events. This error code is only applicable to
|
||||
* closed systems.
|
||||
* @see rte_event_port_enqueue_depth() rte_event_enqueue_burst()
|
||||
*/
|
||||
static inline uint16_t
|
||||
rte_event_enqueue_forward_burst(uint8_t dev_id, uint8_t port_id,
|
||||
const struct rte_event ev[], uint16_t nb_events)
|
||||
{
|
||||
const struct rte_eventdev *dev = &rte_eventdevs[dev_id];
|
||||
|
||||
return __rte_event_enqueue_burst(dev_id, port_id, ev, nb_events,
|
||||
dev->enqueue_forward_burst);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts nanoseconds to *timeout_ticks* value for rte_event_dequeue_burst()
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user