]> git.hungrycats.org Git - linux/commitdiff
PCI: mvebu: Fix uninitialized variable in mvebu_get_tgt_attr()
authorThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Wed, 17 Sep 2014 15:58:27 +0000 (17:58 +0200)
committerJiri Slaby <jslaby@suse.cz>
Fri, 31 Oct 2014 14:11:21 +0000 (15:11 +0100)
commit 56fab6e189441d714a2bfc8a64f3df9c0749dff7 upstream.

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>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
drivers/pci/host/pci-mvebu.c

index fdd81f24a9cf411ca189368ec10b7c518c495796..1324c3b93ee5320eb974d3d5605e8993711909ad 100644 (file)
@@ -747,7 +747,7 @@ static int mvebu_get_tgt_attr(struct device_node *np, int devfn,
        rangesz = pna + na + ns;
        nranges = rlen / sizeof(__be32) / rangesz;
 
-       for (i = 0; i < nranges; i++) {
+       for (i = 0; i < nranges; i++, range += rangesz) {
                u32 flags = of_read_number(range, 1);
                u32 slot = of_read_number(range + 1, 1);
                u64 cpuaddr = of_read_number(range + na, pna);
@@ -757,14 +757,14 @@ static int mvebu_get_tgt_attr(struct device_node *np, int devfn,
                        rtype = IORESOURCE_IO;
                else if (DT_FLAGS_TO_TYPE(flags) == DT_TYPE_MEM32)
                        rtype = IORESOURCE_MEM;
+               else
+                       continue;
 
                if (slot == PCI_SLOT(devfn) && type == rtype) {
                        *tgt = DT_CPUADDR_TO_TARGET(cpuaddr);
                        *attr = DT_CPUADDR_TO_ATTR(cpuaddr);
                        return 0;
                }
-
-               range += rangesz;
        }
 
        return -ENOENT;