From: Linus Torvalds <torvalds@linux-foundation.org>
To: Richard Henderson <rth@twiddle.net>
Cc: Chuck Ebbert <cebbert@redhat.com>,
linux-kernel <linux-kernel@vger.kernel.org>,
Ivan Kokshaysky <ink@jurassic.park.msu.ru>,
Daniel Ritz <daniel.ritz@gmx.ch>, Greg KH <greg@kroah.com>,
Keith Packard <keithp@keithp.com>,
Bjorn Helgaas <bjorn.helgaas@hp.com>
Subject: Re: PCI resource problems caused by improper address rounding
Date: Thu, 20 Dec 2007 14:24:48 -0800 (PST) [thread overview]
Message-ID: <alpine.LFD.0.9999.0712201406190.21557@woody.linux-foundation.org> (raw)
In-Reply-To: <20071220215204.GA5636@twiddle.net>
On Thu, 20 Dec 2007, Richard Henderson wrote:
> On Tue, Dec 18, 2007 at 05:38:58PM -0800, Linus Torvalds wrote:
> > That
> >
> > PCI: Cannot allocate resource region 9 of bridge 0000:00:01.0
> > PCI: Cannot allocate resource region 1 of device 0000:01:00.0
> >
> > thing is really starting to bug me.
> >
> > I bet that is the real problem here, but it's not printing out enough
> > information about the resource to actually give us much of a clue about
> > what is wrong.
> >
> > I suspect that it had a bridge mapping (device 0:01.0) that included the
> > range from 0xc0000000 to 0xcfffffff, but there was something stupid wrong
> > with it (eg the BIOS had allocated overlapping regions), so we disabled
> > it. That, in turn, then caused us to also refuse the existing 0xc0000000
> > mapping for the graphics card (device 01:00.0), because now there was no
> > valid resource for it.
>
> That is exactly it. The relevant section of the debug info is
>
> PCI: Bridge 0000:00:01.0
> PCI: Bridge resource 7 00008000-00008fff (%f=100)
> PCI: Bridge resource 8 f7d00000-fddfffff (%f=200)
> PCI: Bridge resource 9 bdf00000-ddefffff (%f=1201)
>
> The bridge was assigned to a piece of the end of physical memory.
Oh, wow. That's just really bogus. So the kernel message about
PCI: Cannot allocate resource region 9 of bridge 0000:00:01.0
was perfectly fine, and we did absolutely the right thing.
But it also says that if the graphics adaptor really had a resource mapped
at 0xc0000000 - 0xcfffffff by the BIOS, then that mapping never worked at
all, since it never had any bridge mapping it could rely on. So our
decision to unmap that one as invalid was _also_ right.
Damn. Very irritating.
You know what? I think this simple (BUT TOTALLY UNTESTED!) patch will get
your case right, and I think it is preferable to just always lowering the
"minimum" starting point.
What it does is to just take the minimum PCI address for new allocations
(which is only used for the case where we don't have an explicit starting
point for the parent bus anyway!), and just saying "we'll always align it
down to the required alignment of the allocation".
I'm not exactly 100% happy with it, but it does mean that if we need a big
area, we'll relax the suggested starting point by that amount. It's not
wonderful, but it essentially admits that the minimum for the allocations
is really just a hint, and if we need lots of space for a resource, we'll
relax the minimum point appropriately.
So in your case, it should *result* in the exact same situation that your
patch did, but at the same time, when dealing with the (more common) case
of smaller allocations, we still continue to try to avoid being too close
to the top-of-memory.
So it's not perfect, but perhaps it is a good compromise between being
careful and having to make room?
Does this work for your case?
Linus
---
drivers/pci/bus.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c
index 9e5ea07..d48d270 100644
--- a/drivers/pci/bus.c
+++ b/drivers/pci/bus.c
@@ -61,7 +61,7 @@ pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res,
/* Ok, try it out.. */
ret = allocate_resource(r, res, size,
- r->start ? : min,
+ r->start ? : min & -align,
-1, align,
alignf, alignf_data);
if (ret == 0)
next prev parent reply other threads:[~2007-12-20 22:26 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-18 0:25 Chuck Ebbert
2007-12-18 0:57 ` Linus Torvalds
2007-12-18 17:34 ` Chuck Ebbert
2007-12-18 18:21 ` Linus Torvalds
2007-12-18 20:22 ` Richard Henderson
2007-12-18 21:09 ` Linus Torvalds
2007-12-18 21:46 ` Chuck Ebbert
2007-12-18 21:56 ` Linus Torvalds
2007-12-18 22:17 ` Richard Henderson
2007-12-18 21:51 ` Richard Henderson
2007-12-18 22:31 ` Linus Torvalds
2007-12-19 1:38 ` Linus Torvalds
2007-12-20 21:52 ` Richard Henderson
2007-12-20 22:24 ` Linus Torvalds [this message]
2007-12-21 0:39 ` Richard Henderson
2007-12-21 1:00 ` Linus Torvalds
2007-12-21 2:28 ` Benjamin Herrenschmidt
2007-12-18 22:16 ` Keith Packard
2007-12-19 0:29 ` Bjorn Helgaas
2007-12-18 21:23 ` Ivan Kokshaysky
2007-12-18 21:46 ` Linus Torvalds
2007-12-20 8:46 ` Ivan Kokshaysky
2007-12-20 21:21 ` Benjamin Herrenschmidt
2007-12-22 9:12 ` Andrew Morton
2007-12-22 9:20 ` Andrew Morton
2007-12-20 21:10 ` Benjamin Herrenschmidt
2007-12-22 9:22 ` Andrew Morton
[not found] <fa.WmGIH8th8MfmciABVSBi6whxeFE@ifi.uio.no>
[not found] ` <fa.Obg5E3fyax+MaF94//uo40q/Zyk@ifi.uio.no>
[not found] ` <fa./6K5nXEIpws4VU8HtJhQjF4AoGg@ifi.uio.no>
[not found] ` <fa.V82IIxMkW3eu+9B44NfoyYYQDP4@ifi.uio.no>
[not found] ` <fa.DM9AyNQQtam66XpKVeXeqS639os@ifi.uio.no>
[not found] ` <fa.f5O3U527Rv8DNk05hDFRjdCaeFE@ifi.uio.no>
2007-12-19 0:11 ` Robert Hancock
2007-12-19 0:55 ` Chuck Ebbert
2007-12-19 1:12 ` Richard Henderson
2007-12-19 3:12 ` Linus Torvalds
[not found] ` <fa.PJGSMm4TIW6lRYng/jDqooIvj8U@ifi.uio.no>
[not found] ` <fa.0UHHdYi5zqyJ2xOPhNk/BhJkxYM@ifi.uio.no>
2007-12-19 0:18 ` Robert Hancock
2007-12-19 0:38 ` Robert Hancock
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.LFD.0.9999.0712201406190.21557@woody.linux-foundation.org \
--to=torvalds@linux-foundation.org \
--cc=bjorn.helgaas@hp.com \
--cc=cebbert@redhat.com \
--cc=daniel.ritz@gmx.ch \
--cc=greg@kroah.com \
--cc=ink@jurassic.park.msu.ru \
--cc=keithp@keithp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rth@twiddle.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®