app/testpmd: fix metering and policing command for RFC4115
[dpdk.git] / app / test / test_dmadev.c
index b206db2..2b097e0 100644 (file)
@@ -686,10 +686,11 @@ test_burst_capacity(int16_t dev_id, uint16_t vchan)
        /* to test capacity, we enqueue elements and check capacity is reduced
         * by one each time - rebaselining the expected value after each burst
         * as the capacity is only for a burst. We enqueue multiple bursts to
-        * fill up half the ring, before emptying it again. We do this twice to
-        * ensure that we get to test scenarios where we get ring wrap-around
+        * fill up half the ring, before emptying it again. We do this multiple
+        * times to ensure that we get to test scenarios where we get ring
+        * wrap-around and wrap-around of the ids returned (at UINT16_MAX).
         */
-       for (iter = 0; iter < 2; iter++) {
+       for (iter = 0; iter < 2 * (((int)UINT16_MAX + 1) / ring_space); iter++) {
                for (i = 0; i < (ring_space / (2 * CAP_TEST_BURST_SIZE)) + 1; i++) {
                        cap = rte_dma_burst_capacity(dev_id, vchan);
 
@@ -774,6 +775,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",
@@ -795,7 +799,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