Merge "Fix stacking of rx receive functions"
authorDeepak S <deepak.s@linux.intel.com>
Tue, 16 Jan 2018 12:51:20 +0000 (12:51 +0000)
committerGerrit Code Review <gerrit@opnfv.org>
Tue, 16 Jan 2018 12:51:20 +0000 (12:51 +0000)
VNFs/DPPD-PROX/rx_pkt.c
VNFs/DPPD-PROX/task_base.h

index ec698d9..bd06b26 100644 (file)
@@ -388,13 +388,9 @@ static uint16_t call_prev_rx_pkt(struct task_base *tbase, struct rte_mbuf ***mbu
 {
        uint16_t ret;
 
-       if (tbase->aux->rx_prev_idx + 1 == tbase->aux->rx_prev_count) {
-               ret = tbase->aux->rx_pkt_prev[tbase->aux->rx_prev_idx](tbase, mbufs);
-       } else {
-               tbase->aux->rx_prev_idx++;
-               ret = tbase->aux->rx_pkt_prev[tbase->aux->rx_prev_idx](tbase, mbufs);
-               tbase->aux->rx_prev_idx--;
-       }
+       tbase->aux->rx_prev_idx++;
+       ret = tbase->aux->rx_pkt_prev[tbase->aux->rx_prev_idx - 1](tbase, mbufs);
+       tbase->aux->rx_prev_idx--;
 
        return ret;
 }
index ad00962..f8c0524 100644 (file)
@@ -213,8 +213,8 @@ static void task_base_add_rx_pkt_function(struct task_base *tbase, rx_pkt_func t
                return;
        }
 
-       for (int16_t i = tbase->aux->rx_prev_count; i >= 0; --i) {
-               tbase->aux->rx_pkt_prev[i + 1] = tbase->aux->rx_pkt_prev[i];
+       for (int16_t i = tbase->aux->rx_prev_count; i > 0; --i) {
+               tbase->aux->rx_pkt_prev[i] = tbase->aux->rx_pkt_prev[i - 1];
        }
        tbase->aux->rx_pkt_prev[0] = tbase->rx_pkt;
        tbase->rx_pkt = to_add;
@@ -226,8 +226,13 @@ static void task_base_del_rx_pkt_function(struct task_base *tbase, rx_pkt_func t
        int cur = 0;
        int found = 0;
 
-       if (tbase->aux->rx_prev_count == 1) {
+       if (unlikely(tbase->aux->rx_prev_count == 0)) {
+               return;
+       } else if (tbase->rx_pkt == to_del) {
                tbase->rx_pkt = tbase->aux->rx_pkt_prev[0];
+               for (int16_t i = 0; i < tbase->aux->rx_prev_count - 1; ++i) {
+                       tbase->aux->rx_pkt_prev[i] = tbase->aux->rx_pkt_prev[i + 1];
+               }
                found = 1;
        } else {
                for (int16_t i = 0; i < tbase->aux->rx_prev_count; ++i) {