diff options
author | Thomas Petazzoni <thomas.petazzoni@free-electrons.com> | 2014-09-17 11:58:27 -0400 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2014-09-22 16:40:17 -0400 |
commit | 56fab6e189441d714a2bfc8a64f3df9c0749dff7 (patch) | |
tree | a3b0451c030c9e04f74bd415115eab08a4334216 | |
parent | 52addcf9d6669fa439387610bc65c92fa0980cef (diff) |
PCI: mvebu: Fix uninitialized variable in mvebu_get_tgt_attr()
Geert Uytterhoeven reported a warning when building pci-mvebu:
drivers/pci/host/pci-mvebu.c: In function 'mvebu_get_tgt_attr':
drivers/pci/host/pci-mvebu.c:887:39: warning: 'rtype' may be used uninitialized in this function [-Wmaybe-uninitialized]
if (slot == PCI_SLOT(devfn) && type == rtype) {
^
And indeed, the code of mvebu_get_tgt_attr() may lead to the usage of rtype
when being uninitialized, even though it would only happen if we had
entries other than I/O space and 32 bits memory space.
This commit fixes that by simply skipping the current DT range being
considered, if it doesn't match the resource type we're looking for.
Reported-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
CC: stable@vger.kernel.org # v3.12+
-rw-r--r-- | drivers/pci/host/pci-mvebu.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/pci/host/pci-mvebu.c b/drivers/pci/host/pci-mvebu.c index a8c6f1a92e0f..b1315e197ffb 100644 --- a/drivers/pci/host/pci-mvebu.c +++ b/drivers/pci/host/pci-mvebu.c | |||
@@ -873,7 +873,7 @@ static int mvebu_get_tgt_attr(struct device_node *np, int devfn, | |||
873 | rangesz = pna + na + ns; | 873 | rangesz = pna + na + ns; |
874 | nranges = rlen / sizeof(__be32) / rangesz; | 874 | nranges = rlen / sizeof(__be32) / rangesz; |
875 | 875 | ||
876 | for (i = 0; i < nranges; i++) { | 876 | for (i = 0; i < nranges; i++, range += rangesz) { |
877 | u32 flags = of_read_number(range, 1); | 877 | u32 flags = of_read_number(range, 1); |
878 | u32 slot = of_read_number(range + 1, 1); | 878 | u32 slot = of_read_number(range + 1, 1); |
879 | u64 cpuaddr = of_read_number(range + na, pna); | 879 | u64 cpuaddr = of_read_number(range + na, pna); |
@@ -883,14 +883,14 @@ static int mvebu_get_tgt_attr(struct device_node *np, int devfn, | |||
883 | rtype = IORESOURCE_IO; | 883 | rtype = IORESOURCE_IO; |
884 | else if (DT_FLAGS_TO_TYPE(flags) == DT_TYPE_MEM32) | 884 | else if (DT_FLAGS_TO_TYPE(flags) == DT_TYPE_MEM32) |
885 | rtype = IORESOURCE_MEM; | 885 | rtype = IORESOURCE_MEM; |
886 | else | ||
887 | continue; | ||
886 | 888 | ||
887 | if (slot == PCI_SLOT(devfn) && type == rtype) { | 889 | if (slot == PCI_SLOT(devfn) && type == rtype) { |
888 | *tgt = DT_CPUADDR_TO_TARGET(cpuaddr); | 890 | *tgt = DT_CPUADDR_TO_TARGET(cpuaddr); |
889 | *attr = DT_CPUADDR_TO_ATTR(cpuaddr); | 891 | *attr = DT_CPUADDR_TO_ATTR(cpuaddr); |
890 | return 0; | 892 | return 0; |
891 | } | 893 | } |
892 | |||
893 | range += rangesz; | ||
894 | } | 894 | } |
895 | 895 | ||
896 | return -ENOENT; | 896 | return -ENOENT; |