]> git.droids-corp.org - dpdk.git/commitdiff
net/dpaa2: prefetch the annotation in event processing
authorNipun Gupta <nipun.gupta@nxp.com>
Tue, 23 Jan 2018 14:17:53 +0000 (19:47 +0530)
committerJerin Jacob <jerin.jacob@caviumnetworks.com>
Wed, 31 Jan 2018 06:19:05 +0000 (07:19 +0100)
This patch adds software prefetching of the annotation which is
accessed by the driver to fetch the parsing results. The changes
also include as many instructions in between prefetching memory
and using it.

Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>
drivers/net/dpaa2/dpaa2_rxtx.c

index 898cf3bd6c2e8d44c949abf7b566e1f1d55b2566..83e0e71762723108517b9ff4d3c13b8ee1f74ac4 100644 (file)
@@ -676,7 +676,8 @@ dpaa2_dev_process_parallel_event(struct qbman_swp *swp,
                                 struct dpaa2_queue *rxq,
                                 struct rte_event *ev)
 {
-       ev->mbuf = eth_fd_to_mbuf(fd);
+       rte_prefetch0((void *)(DPAA2_GET_FD_ADDR(fd) +
+               DPAA2_FD_PTA_SIZE + 16));
 
        ev->flow_id = rxq->ev.flow_id;
        ev->sub_event_type = rxq->ev.sub_event_type;
@@ -686,18 +687,22 @@ dpaa2_dev_process_parallel_event(struct qbman_swp *swp,
        ev->queue_id = rxq->ev.queue_id;
        ev->priority = rxq->ev.priority;
 
+       ev->mbuf = eth_fd_to_mbuf(fd);
+
        qbman_swp_dqrr_consume(swp, dq);
 }
 
-void dpaa2_dev_process_atomic_event(struct qbman_swp *swp __attribute__((unused)),
-                                   const struct qbman_fd *fd,
-                                   const struct qbman_result *dq,
-                                   struct dpaa2_queue *rxq,
-                                   struct rte_event *ev)
+void __attribute__((hot))
+dpaa2_dev_process_atomic_event(struct qbman_swp *swp __attribute__((unused)),
+                              const struct qbman_fd *fd,
+                              const struct qbman_result *dq,
+                              struct dpaa2_queue *rxq,
+                              struct rte_event *ev)
 {
-       uint8_t dqrr_index = qbman_get_dqrr_idx(dq);
+       uint8_t dqrr_index;
 
-       ev->mbuf = eth_fd_to_mbuf(fd);
+       rte_prefetch0((void *)(DPAA2_GET_FD_ADDR(fd) +
+               DPAA2_FD_PTA_SIZE + 16));
 
        ev->flow_id = rxq->ev.flow_id;
        ev->sub_event_type = rxq->ev.sub_event_type;
@@ -707,6 +712,9 @@ void dpaa2_dev_process_atomic_event(struct qbman_swp *swp __attribute__((unused)
        ev->queue_id = rxq->ev.queue_id;
        ev->priority = rxq->ev.priority;
 
+       ev->mbuf = eth_fd_to_mbuf(fd);
+
+       dqrr_index = qbman_get_dqrr_idx(dq);
        ev->mbuf->seqn = dqrr_index + 1;
        DPAA2_PER_LCORE_DQRR_SIZE++;
        DPAA2_PER_LCORE_DQRR_HELD |= 1 << dqrr_index;