replace zero-length arrays with flexible ones
[dpdk.git] / app / test / test_dmadev.c
index db5aff7..a7651a4 100644 (file)
@@ -177,6 +177,7 @@ do_multi_copies(int16_t dev_id, uint16_t vchan,
 static int
 test_enqueue_copies(int16_t dev_id, uint16_t vchan)
 {
+       enum rte_dma_status_code status;
        unsigned int i;
        uint16_t id;
 
@@ -215,6 +216,20 @@ test_enqueue_copies(int16_t dev_id, uint16_t vchan)
                        ERR_RETURN("Error:incorrect job id received, %u [expected %u]\n",
                                        id, id_count);
 
+               /* check for completed and id when no job done */
+               if (rte_dma_completed(dev_id, vchan, 1, &id, NULL) != 0)
+                       ERR_RETURN("Error with rte_dma_completed when no job done\n");
+               if (id != id_count)
+                       ERR_RETURN("Error:incorrect job id received when no job done, %u [expected %u]\n",
+                                       id, id_count);
+
+               /* check for completed_status and id when no job done */
+               if (rte_dma_completed_status(dev_id, vchan, 1, &id, &status) != 0)
+                       ERR_RETURN("Error with rte_dma_completed_status when no job done\n");
+               if (id != id_count)
+                       ERR_RETURN("Error:incorrect job id received when no job done, %u [expected %u]\n",
+                                       id, id_count);
+
                rte_pktmbuf_free(src);
                rte_pktmbuf_free(dst);
 
@@ -775,6 +790,9 @@ test_dmadev_instance(int16_t dev_id)
        if (rte_dma_stats_get(dev_id, vchan, &stats) != 0)
                ERR_RETURN("Error with rte_dma_stats_get()\n");
 
+       if (rte_dma_burst_capacity(dev_id, vchan) < 32)
+               ERR_RETURN("Error: Device does not have sufficient burst capacity to run tests");
+
        if (stats.completed != 0 || stats.submitted != 0 || stats.errors != 0)
                ERR_RETURN("Error device stats are not all zero: completed = %"PRIu64", "
                                "submitted = %"PRIu64", errors = %"PRIu64"\n",
@@ -796,7 +814,10 @@ test_dmadev_instance(int16_t dev_id)
                goto err;
 
        /* run some burst capacity tests */
-       if (runtest("burst capacity", test_burst_capacity, 1, dev_id, vchan, CHECK_ERRS) < 0)
+       if (rte_dma_burst_capacity(dev_id, vchan) < 64)
+               printf("DMA Dev %u: insufficient burst capacity (64 required), skipping tests\n",
+                               dev_id);
+       else if (runtest("burst capacity", test_burst_capacity, 1, dev_id, vchan, CHECK_ERRS) < 0)
                goto err;
 
        /* to test error handling we can provide null pointers for source or dest in copies. This