| From 56fab6e189441d714a2bfc8a64f3df9c0749dff7 Mon Sep 17 00:00:00 2001 |
| From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> |
| Date: Wed, 17 Sep 2014 17:58:27 +0200 |
| Subject: PCI: mvebu: Fix uninitialized variable in mvebu_get_tgt_attr() |
| |
| From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> |
| |
| 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: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/pci/host/pci-mvebu.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| --- 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 dev |
| 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); |
| @@ -883,14 +883,14 @@ static int mvebu_get_tgt_attr(struct dev |
| 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; |