From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: linux-pci@atrey.karlin.mff.cuni.cz
Cc: Linux Kernel list <linux-kernel@vger.kernel.org>,
Greg KH <greg@kroah.com>
Subject: pci-sysfs resource mmap broken
Date: Tue, 26 Apr 2005 15:33:29 +1000 [thread overview]
Message-ID: <1114493609.7183.55.camel@gaston> (raw)
Hi !
While chasing an interesting bug in ppc/ppc64 implementation of pci
mmap, I discovered that the pci sysfs code is in fact broken and cannot
be made to work on those archs (well, at least for IO space). In fact,
it can, but then, it would break the /proc code :)
The problem is that they are both calling the same arch routine
(pci_mmap_page_range) with the offset argument having a different
semantic.
In the /proc code, it comes from userland directly, and is supposedly,
the raw BAR value.
In sysfs, it's passing the device resource[]->start value.
The problem is that can only work ... on architectures where the
resources contain the same thing as the BAR values. On ppc, where this
is not the case, it will not work. On ppc, resources are "fixed up" in
various ways (for example, PReP adds a fixed offset to all memory
resources to match the HW translation since PCI isn't 1:1 on those, and
all PPCs with more than one domain play tricks with IO resources).
What would be the proper fix here ? Having pci_mmap_resource() actually
read the BAR value for the resource ?
In a similar vein, the "resource" is exposing directly to userland the
content of "struct resource". This doesn't mean anything. The kernel is
internally playing all sort of offset tricks on these values, so they
can't be used for anything useful, either via /dev/mem, or for io port
accesses, or whatever.
Shouldn't we expose the BAR values & size rather here ? That is,
reconsitutes non-offset'd resources, possibly with arch help, or just
reading BAR to get base, and apply resource size & flags ?
Unless you are on x86 of course ...
There is some serious brokenness in there, it needs to be fixed if we
want things like X.org to be ever properly adapted (and we'll have to
deal with existing broken kernels, gack).
Ben.
next reply other threads:[~2005-04-26 5:33 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-04-26 5:33 Benjamin Herrenschmidt [this message]
2005-04-26 6:09 ` pci-sysfs resource mmap broken Benjamin Herrenschmidt
2005-04-26 6:36 ` Greg KH
2005-04-26 9:24 ` Russell King
2005-04-26 16:30 ` Grant Grundler
2005-04-26 22:47 ` Benjamin Herrenschmidt
2005-04-27 3:55 ` Grant Grundler
2005-04-27 4:30 ` Benjamin Herrenschmidt
2005-04-27 4:28 ` David S. Miller
2005-04-27 4:39 ` Benjamin Herrenschmidt
2005-04-27 4:46 ` pci-sysfs resource mmap broken (and PATCH) Benjamin Herrenschmidt
2005-04-27 23:13 ` Benjamin Herrenschmidt
2005-04-28 5:33 ` Grant Grundler
2005-04-28 5:37 ` David S. Miller
2005-04-28 6:39 ` Benjamin Herrenschmidt
2005-04-28 6:50 ` David S. Miller
2005-04-28 7:21 ` Benjamin Herrenschmidt
2005-04-28 7:22 ` David S. Miller
2005-04-28 7:46 ` Benjamin Herrenschmidt
2005-04-28 15:11 ` Grant Grundler
2005-04-28 22:47 ` Benjamin Herrenschmidt
2005-04-28 23:38 ` Grant Grundler
2005-04-29 15:42 ` David S. Miller
2005-04-29 22:16 ` Jesse Barnes
2005-04-28 6:35 ` Benjamin Herrenschmidt
2005-05-03 5:37 ` pci-sysfs resource mmap broken PATCH#2 Benjamin Herrenschmidt
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=1114493609.7183.55.camel@gaston \
--to=benh@kernel.crashing.org \
--cc=greg@kroah.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@atrey.karlin.mff.cuni.cz \
/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