Skip to content

Commit

Permalink
PCI: apple: Initialize pcie->nvecs before use
Browse files Browse the repository at this point in the history
[ Upstream commit d8650c0 ]

The apple_pcie_setup_port() function computes ilog2(pcie->nvecs) to set
up the number of MSIs available for each port. However, it's called
before apple_msi_init(), which initializes pcie->nvecs.

Luckily, pcie->nvecs is part of kzalloc()-ed structure and, as such,
initialized as zero. ilog2(0) happens to be 0xffffffff which then simply
configures more MSIs in hardware than we have. This doesn't break
anything because we never hand out those vectors.

Thus, swap the order of the two calls so that the correctly initialized
value is then used.

[kwilczynski: commit log]
Link: https://lore.kernel.org/linux-pci/20230311133453.63246-1-sven@svenpeter.dev
Fixes: 476c41e ("PCI: apple: Implement MSI support")
Signed-off-by: Sven Peter <sven@svenpeter.dev>
Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
Reviewed-by: Marc Zyngier <maz@kernel.org>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Eric Curtin <ecurtin@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
svenpeter42 authored and gregkh committed Sep 13, 2023
1 parent 7618133 commit c53d530
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion drivers/pci/controller/pcie-apple.c
Expand Up @@ -783,6 +783,10 @@ static int apple_pcie_init(struct pci_config_window *cfg)
cfg->priv = pcie;
INIT_LIST_HEAD(&pcie->ports);

ret = apple_msi_init(pcie);
if (ret)
return ret;

for_each_child_of_node(dev->of_node, of_port) {
ret = apple_pcie_setup_port(pcie, of_port);
if (ret) {
Expand All @@ -792,7 +796,7 @@ static int apple_pcie_init(struct pci_config_window *cfg)
}
}

return apple_msi_init(pcie);
return 0;
}

static int apple_pcie_probe(struct platform_device *pdev)
Expand Down

0 comments on commit c53d530

Please sign in to comment.