Merged!

Fixed spell with sed :).

Maxim.

On 11/19/2014 04:13 PM, Ciprian Barbu wrote:
One final nit and you're done :-)

On Wed, Nov 19, 2014 at 2:35 PM, Maxim Uvarov <[email protected]> wrote:
Mostly keep original logic but make function more clear.
In pktin_deq_multi() do not do actual rx if there are enough
packets in the queue.

Signed-off-by: Maxim Uvarov <[email protected]>
Reviewed-and-tested-by: Ciprian Barbu <[email protected]>

---
  v4: - added odp_unlikely()
      - del copy paste not needed line.
  v3: - use pkts instead if i in queue_enq_multi();
      - do not do actual rx if there are enough
packets in the queue.
  v2: - fixes for checks that Ciprian found.

  Tested this patch in lxc with ping -f for both burst and queue modes.

  Maxim.

  platform/linux-generic/odp_packet_io.c | 72 +++++++++++++++++-----------------
  1 file changed, 36 insertions(+), 36 deletions(-)

diff --git a/platform/linux-generic/odp_packet_io.c 
b/platform/linux-generic/odp_packet_io.c
index f35193f..b7d0b3b 100644
--- a/platform/linux-generic/odp_packet_io.c
+++ b/platform/linux-generic/odp_packet_io.c
@@ -416,32 +416,26 @@ int pktin_enqueue(queue_entry_t *qentry, odp_buffer_hdr_t 
*buf_hdr)
  odp_buffer_hdr_t *pktin_dequeue(queue_entry_t *qentry)
  {
         odp_buffer_hdr_t *buf_hdr;
+       odp_buffer_t buf;
+       odp_packet_t pkt_tbl[QUEUE_MULTI_MAX];
+       odp_buffer_hdr_t *tmp_hdr_tbl[QUEUE_MULTI_MAX];
+       int pkts, i;

         buf_hdr = queue_deq(qentry);
+       if (buf_hdr != NULL)
+               return buf_hdr;

-       if (buf_hdr == NULL) {
-               odp_packet_t pkt;
-               odp_buffer_t buf;
-               odp_packet_t pkt_tbl[QUEUE_MULTI_MAX];
-               odp_buffer_hdr_t *tmp_hdr_tbl[QUEUE_MULTI_MAX];
-               int pkts, i, j;
-
-               pkts = odp_pktio_recv(qentry->s.pktin, pkt_tbl,
-                                     QUEUE_MULTI_MAX);
-
-               if (pkts > 0) {
-                       pkt = pkt_tbl[0];
-                       buf = odp_packet_to_buffer(pkt);
-                       buf_hdr = odp_buf_to_hdr(buf);
+       pkts = odp_pktio_recv(qentry->s.pktin, pkt_tbl, QUEUE_MULTI_MAX);
+       if (pkts <= 0)
+               return NULL;

-                       for (i = 1, j = 0; i < pkts; ++i) {
-                               buf = odp_packet_to_buffer(pkt_tbl[i]);
-                               tmp_hdr_tbl[j++] = odp_buf_to_hdr(buf);
-                       }
-                       queue_enq_multi(qentry, tmp_hdr_tbl, j);
-               }
+       for (i = 0; i < pkts; ++i) {
+               buf = odp_packet_to_buffer(pkt_tbl[i]);
+               tmp_hdr_tbl[i] = odp_buf_to_hdr(buf);
         }

+       queue_enq_multi(qentry, tmp_hdr_tbl, pkts);
+       buf_hdr = tmp_hdr_tbl[0];
         return buf_hdr;
  }

@@ -454,25 +448,31 @@ int pktin_enq_multi(queue_entry_t *qentry, 
odp_buffer_hdr_t *buf_hdr[], int num)
  int pktin_deq_multi(queue_entry_t *qentry, odp_buffer_hdr_t *buf_hdr[], int 
num)
  {
         int nbr;
+       odp_packet_t pkt_tbl[QUEUE_MULTI_MAX];
+       odp_buffer_hdr_t *tmp_hdr_tbl[QUEUE_MULTI_MAX];
+       odp_buffer_t buf;
+       int pkts, i;

         nbr = queue_deq_multi(qentry, buf_hdr, num);
-
-       if (nbr < num) {
-               odp_packet_t pkt_tbl[QUEUE_MULTI_MAX];
-               odp_buffer_hdr_t *tmp_hdr_tbl[QUEUE_MULTI_MAX];
-               odp_buffer_t buf;
-               int pkts, i;
-
-               pkts = odp_pktio_recv(qentry->s.pktin, pkt_tbl,
-                                     QUEUE_MULTI_MAX);
-               if (pkts > 0) {
-                       for (i = 0; i < pkts; ++i) {
-                               buf = odp_packet_to_buffer(pkt_tbl[i]);
-                               tmp_hdr_tbl[i] = odp_buf_to_hdr(buf);
-                       }
-                       queue_enq_multi(qentry, tmp_hdr_tbl, pkts);
-               }
+       if (odp_unlikely(nbr > num))
+               ODP_ABORT("queue_deq_multi req: %d, returned %d\n",
+                       num, nbr);
+
+       /** queue already has number of requsted buffers,
+        *  do not do recieve in that case.
nit: s/recieve/receive/g

+        */
+       if (nbr == num)
+               return nbr;
+
+       pkts = odp_pktio_recv(qentry->s.pktin, pkt_tbl, QUEUE_MULTI_MAX);
+       if (pkts <= 0)
+               return nbr;
+
+       for (i = 0; i < pkts; ++i) {
+               buf = odp_packet_to_buffer(pkt_tbl[i]);
+               tmp_hdr_tbl[i] = odp_buf_to_hdr(buf);
         }

+       queue_enq_multi(qentry, tmp_hdr_tbl, pkts);
         return nbr;
  }
--
1.8.5.1.163.gd7aced9


_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp


_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to