mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Richard Henderson <rth@twiddle.net>,
	Chuck Ebbert <cebbert@redhat.com>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	Daniel Ritz <daniel.ritz@gmx.ch>, Greg KH <greg@kroah.com>
Subject: Re: PCI resource problems caused by improper address rounding
Date: Thu, 20 Dec 2007 11:46:16 +0300	[thread overview]
Message-ID: <20071220084616.GA28578@jurassic.park.msu.ru> (raw)
In-Reply-To: <alpine.LFD.0.9999.0712181338150.21557@woody.linux-foundation.org>

On Tue, Dec 18, 2007 at 01:46:56PM -0800, Linus Torvalds wrote:
> Heh, indeed. Good catch - that
> 
> 	Prefetchable memory behind bridge: 0000000000000000-000000000fffffff
> 
> on device 00:01.0 does look totally broken, and it would make more sense 
> if it matched what the device has (and what /proc/iomem resports).

Sigh. The patch was way too incomplete - I somehow missed
PCI_PREF_LIMIT_UPPER32... Corrected patch appended - I think it's
worth applying in either case since a bridge window at address 0 is
an obvious bug and this patch fixes it.

> That said, Intel bridges tend to be transparent even when they *claim* 
> normal decode, so I wonder whether it actually matters in this case. But 
> your patch looks very obviously right. 

I don't think that transparency is the case here - I read specs for some
recent Intel chipsets and it looks like they are pretty accurate now with
a "subtractive decode" flag - over the last couple of years, at least.
There are, of course, some strange "priority decode rules", but they
can be safely ignored as far as the kernel resource management is
concerned.

> So maybe the rest of the kernel and X both already did everything right, 
> and it was just this stupid bridge setup thing that was broken (and 
> forcing the IOMEM resource to below the 4G mark just hid it).

I've just checked the setup-bus code and have to say that its ability to
correctly handle the 64-bit BARs is close to zero...

On the positive side, getting it right doesn't seem to be as complicated
as I thought initially - mainly because only the prefetchable memory
window of p2p bridge is 64-bit. This effectively limits >4G allocations
to prefetchable resources only.

Anyway, using PCI bus space above 4G on x86 seems to be a must these
days, and I have some spare hardware to play with. Maybe I'll be able
to get something working by mid January or so...

Ivan.

---
PCI: do respect full 64-bit address for bridge prefetch window

Prevent the prefetch window from being programmed with a bogus address
when its respective resource gets allocated above the 4G mark.

Note that we cannot yet guarantee correct resource allocations
above 4G, though it might work in some simple cases.

Signed-off-by: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
---
 drivers/pci/setup-bus.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index 401e03c..643e72e 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -208,8 +208,11 @@ pci_setup_bridge(struct pci_bus *bus)
 	}
 	pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE, l);
 
-	/* Clear out the upper 32 bits of PREF base. */
-	pci_write_config_dword(bridge, PCI_PREF_BASE_UPPER32, 0);
+	/* Set up the upper 32 bits of PREF base/limit. */
+	l = region.start >> 16 >> 16;
+	pci_write_config_dword(bridge, PCI_PREF_BASE_UPPER32, l);
+	l = region.end >> 16 >> 16;
+	pci_write_config_dword(bridge, PCI_PREF_LIMIT_UPPER32, l);
 
 	pci_write_config_word(bridge, PCI_BRIDGE_CONTROL, bus->bridge_ctl);
 }

  reply	other threads:[~2007-12-20  8:46 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
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 [this message]
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=20071220084616.GA28578@jurassic.park.msu.ru \
    --to=ink@jurassic.park.msu.ru \
    --cc=cebbert@redhat.com \
    --cc=daniel.ritz@gmx.ch \
    --cc=greg@kroah.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rth@twiddle.net \
    --cc=torvalds@linux-foundation.org \
    /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®