From: Kevin Laatz Date: Tue, 26 Oct 2021 14:20:45 +0000 (+0000) Subject: dma/idxd: fix truncated error code in status check X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=452c1916b0db;hp=bb4141dbe5da2924d5b9f8554fd022721d2cc127;p=dpdk.git 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 --- 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);