From 452c1916b0dbb414a28dff89c995253da1c23c0b Mon Sep 17 00:00:00 2001 From: Kevin Laatz Date: Tue, 26 Oct 2021 14:20:45 +0000 Subject: [PATCH] dma/idxd: fix truncated error code in status check When checking if the DMA device is active, the result of the operand will always be zero since the err_code is truncated to 8 bits which makes checking the 31st bit impossible. This is fixed by changing the type of err_code to uint32_t so that it is not truncated. Coverity issue: 373657 Fixes: 9449330a8458 ("dma/idxd: create dmadev instances on PCI probe") Signed-off-by: Kevin Laatz Acked-by: Bruce Richardson Reviewed-by: Conor Walsh --- drivers/dma/idxd/idxd_pci.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/dma/idxd/idxd_pci.c b/drivers/dma/idxd/idxd_pci.c index 1aabacee41..9ca1ec64e9 100644 --- a/drivers/dma/idxd/idxd_pci.c +++ b/drivers/dma/idxd/idxd_pci.c @@ -22,7 +22,7 @@ const struct rte_pci_id pci_id_idxd_map[] = { static inline int idxd_pci_dev_command(struct idxd_dmadev *idxd, enum rte_idxd_cmds command) { - uint8_t err_code; + uint32_t err_code; uint16_t qid = idxd->qid; int i = 0; @@ -37,7 +37,8 @@ idxd_pci_dev_command(struct idxd_dmadev *idxd, enum rte_idxd_cmds command) if (++i >= 1000) { IDXD_PMD_ERR("Timeout waiting for command response from HW"); rte_spinlock_unlock(&idxd->u.pci->lk); - return err_code; + err_code &= CMDSTATUS_ERR_MASK; + return -err_code; } } while (err_code & CMDSTATUS_ACTIVE_MASK); rte_spinlock_unlock(&idxd->u.pci->lk); -- 2.39.5