+
+repeat:
+ is_repeat = 0;
+
+ /* issue the deq command one more time to get another set of packets */
+ if (next_pull) {
+ q_storage->toggle ^= 1;
+ dq_storage1 = q_storage->dq_storage[q_storage->toggle];
+ qbman_pull_desc_clear(&pulldesc);
+
+ if (next_pull > DPAA2_DQRR_RING_SIZE) {
+ qbman_pull_desc_set_numframes(&pulldesc,
+ DPAA2_DQRR_RING_SIZE);
+ next_pull = next_pull - DPAA2_DQRR_RING_SIZE;
+ q_storage->last_num_pkts = DPAA2_DQRR_RING_SIZE;
+ } else {
+ qbman_pull_desc_set_numframes(&pulldesc, next_pull);
+ q_storage->last_num_pkts = next_pull;
+ next_pull = 0;
+ }
+ qbman_pull_desc_set_fq(&pulldesc, fqid);
+ qbman_pull_desc_set_storage(&pulldesc, dq_storage1,
+ (dma_addr_t)(DPAA2_VADDR_TO_IOVA(dq_storage1)), 1);
+ while (1) {
+ if (qbman_swp_pull(swp, &pulldesc)) {
+ PMD_RX_LOG(WARNING,
+ "VDQ command not issued.QBMAN busy\n");
+ /* Portal was busy, try again */
+ continue;
+ }
+ break;
+ }
+ is_repeat = 1;
+ q_storage->active_dqs = dq_storage1;
+ set_swp_active_dqs(DPAA2_PER_LCORE_DPIO->index, dq_storage1);
+ }
+
+ rte_prefetch0((void *)((uint64_t)(dq_storage + 1)));
+
+ num_pulled = 0;
+ pending = 1;
+
+ do {