raw/ioat: fix missing ring pointer reset
Checks
Commit Message
In the event of a device reconfigure, "hdls_avail" is not being reset. This
can lead to miscalculations in rte_ioat_completed_ops(), causing the
function to report an incorrect amount of completed operations. This patch
fixes the issue by resetting "hdls_avail" during the device configure.
Fixes: 74464005a2af ("raw/ioat: rework SW ring layout")
Signed-off-by: Kevin Laatz <kevin.laatz@intel.com>
---
drivers/raw/ioat/ioat_common.c | 1 +
1 file changed, 1 insertion(+)
Comments
On Thu, Jun 17, 2021 at 02:18:15PM +0000, Kevin Laatz wrote:
> In the event of a device reconfigure, "hdls_avail" is not being reset. This
> can lead to miscalculations in rte_ioat_completed_ops(), causing the
> function to report an incorrect amount of completed operations. This patch
> fixes the issue by resetting "hdls_avail" during the device configure.
>
> Fixes: 74464005a2af ("raw/ioat: rework SW ring layout")
>
> Signed-off-by: Kevin Laatz <kevin.laatz@intel.com>
> ---
To catch more of these reconfigure issues, we should look to add an
appropriate unit test.
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
17/06/2021 16:21, Bruce Richardson:
> On Thu, Jun 17, 2021 at 02:18:15PM +0000, Kevin Laatz wrote:
> > In the event of a device reconfigure, "hdls_avail" is not being reset. This
> > can lead to miscalculations in rte_ioat_completed_ops(), causing the
> > function to report an incorrect amount of completed operations. This patch
> > fixes the issue by resetting "hdls_avail" during the device configure.
> >
> > Fixes: 74464005a2af ("raw/ioat: rework SW ring layout")
> >
> > Signed-off-by: Kevin Laatz <kevin.laatz@intel.com>
> > ---
> To catch more of these reconfigure issues, we should look to add an
> appropriate unit test.
>
> Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Cc: stable@dpdk.org
Applied, thanks
@@ -174,6 +174,7 @@ idxd_dev_configure(const struct rte_rawdev *dev,
}
rte_idxd->hdls_read = rte_idxd->batch_start = 0;
rte_idxd->batch_size = 0;
+ rte_idxd->hdls_avail = 0;
return 0;
}