[+cc Krzysztof] On Wed, Oct 28, 2020 at 08:34:45AM +0800, Shawn Lin wrote: > On 2020/10/28 0:16, Bjorn Helgaas wrote: > > Hi Shawn, > > > > Please take a look at this issue reported by Coverity: > > > > 332 static int rockchip_pcie_ep_get_msi(struct pci_epc *epc, u8 fn) > > 333 { > > 334 struct rockchip_pcie_ep *ep = epc_get_drvdata(epc); > > 335 struct rockchip_pcie *rockchip = &ep->rockchip; > > 336 u16 flags; > > 337 > > 338 flags = rockchip_pcie_read(rockchip, > > 339 ROCKCHIP_PCIE_EP_FUNC_BASE(fn) + > > 340 ROCKCHIP_PCIE_EP_MSI_CTRL_REG); > > > > CID 1437163 (#2 of 2): Operands don't affect result > > (CONSTANT_EXPRESSION_RESULT) result_independent_of_operands: flags & > > (65536UL /* 1UL << 16 */) is always 0 regardless of the values of its > > operands. This occurs as the logical operand of !. > > > > 341 if (!(flags & ROCKCHIP_PCIE_EP_MSI_CTRL_ME)) > > 342 return -EINVAL; > > Actually it should be BIT(0) instead of BIT(16), > I will fix it, thanks. Just a quick reminder about this and the similar issue in rockchip_pcie_ep_send_msi_irq(). Your response above didn't seem to make it to the archive, so maybe your patch to fix it also got lost? Krzysztof also pointed out that rockchip_pcie_read() returns u32, while flags is only u16. Bjorn