raw/ioat: remove special case for no status reporting
authorBruce Richardson <bruce.richardson@intel.com>
Wed, 12 May 2021 14:50:00 +0000 (14:50 +0000)
committerThomas Monjalon <thomas@monjalon.net>
Wed, 12 May 2021 18:48:41 +0000 (20:48 +0200)
The special fast-path for returning completed descriptors without
reporting status or user-handles returns the number of completed ring
slots used, rather than the number of actual user-submitted jobs. This
means that the counts returned are too high, as the batch descriptor
slots would be included in the total. Therefore remove this special
case, and use the normal status-processing path so that the returned
count is correct in all cases.

Fixes: 245efe544d8e ("raw/ioat: report status of completed jobs")

Reported-by: Jiayu Hu <jiayu.hu@intel.com>
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Kevin Laatz <kevin.laatz@intel.com>
drivers/raw/ioat/rte_idxd_rawdev_fns.h

index 0eea536..5754860 100644 (file)
@@ -343,14 +343,6 @@ __idxd_completed_ops(int dev_id, uint8_t max_ops, uint32_t *status, uint8_t *num
                        idxd->batch_idx_read = 0;
        }
 
-       if (idxd->cfg.hdls_disable && status == NULL) {
-               n = (idxd->hdls_avail < idxd->hdls_read) ?
-                               (idxd->hdls_avail + idxd->desc_ring_mask + 1 - idxd->hdls_read) :
-                               (idxd->hdls_avail - idxd->hdls_read);
-               idxd->hdls_read = idxd->hdls_avail;
-               goto out;
-       }
-
        n = 0;
        h_idx = idxd->hdls_read;
        while (h_idx != idxd->hdls_avail) {
@@ -386,7 +378,6 @@ __idxd_completed_ops(int dev_id, uint8_t max_ops, uint32_t *status, uint8_t *num
        }
        idxd->hdls_read = h_idx;
 
-out:
        idxd->xstats.completed += n;
        return n;
 }