在 2020/12/24 5:04, Bjorn Helgaas 写道:
[+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.
Thanks for reminder. I didn't notice my previous patch hadn't arrived at
the archive but I just sent again a few minutes ago.
Bjorn