Messages in this thread | | | Date | Fri, 15 Jan 2010 13:31:55 -0800 | From | Jesse Barnes <> | Subject | Re: [PATCH 07/14] pci: don't shrink bridge resources |
| |
On Fri, 15 Jan 2010 13:09:31 -0800 Yinghai Lu <yinghai@kernel.org> wrote:
> On 01/15/2010 11:04 AM, Jesse Barnes wrote: > > On Tue, 22 Dec 2009 15:02:27 -0800 > > Yinghai Lu <yinghai@kernel.org> wrote: > > > >> when we are clearing leaf bridge resource and try to get big one, > >> we could shrink the bridge if there is no resource under it. > >> > >> let check with old resource size and make sure we are trying to get > >> big one. > >> > >> -v2: keep disable window print out, still could happen on non pci > >> hotplug system > >> > >> Signed-off-by: Yinghai Lu <yinghai@kernel.org> > >> --- > >> drivers/pci/setup-bus.c | 14 ++++++++++++-- > >> 1 files changed, 12 insertions(+), 2 deletions(-) > >> > >> diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c > >> index 9bb4435..d53b42e 100644 > >> --- a/drivers/pci/setup-bus.c > >> +++ b/drivers/pci/setup-bus.c > >> @@ -387,7 +387,7 @@ static void pbus_size_io(struct pci_bus *bus, > >> resource_size_t min_size) { > >> struct pci_dev *dev; > >> struct resource *b_res = find_free_bus_resource(bus, > >> IORESOURCE_IO); > >> - unsigned long size = 0, size1 = 0; > >> + unsigned long size = 0, size1 = 0, old_size; > >> > >> if (!b_res) > >> return; > >> @@ -412,12 +412,17 @@ static void pbus_size_io(struct pci_bus *bus, > >> resource_size_t min_size) } > >> if (size < min_size) > >> size = min_size; > >> + old_size = resource_size(b_res); > >> + if (old_size == 1) > >> + old_size = 0; > > > > Do we even need these == 1 checks? If old_size really was 1, it > > means we had a very small decode range. Might make more sense to > > do... > > when start=0 and end =0, will get old_size = 1
... if (old_size == 1) old_size = 0 ... if (size < old_size) size = old_size ...
If old_size > 1 we'll make sure size doesn't decrease.
If old_size == 1, we'll never touch the changed size because size < 0 will never be true for size (unsigned).
However, if old_size == 1 and we left it at 1, we'd only set size = old_size if size was 0, which is why I suggested the size check.
What am I missing? When will size shrink? I know it's just nitpicking, I just want to make sure the code is clear, and that it's obvious that we're preventing size from decreasing.
-- Jesse Barnes, Intel Open Source Technology Center
| |