public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Russell King <rmk+lkml@arm.linux.org.uk>
To: Linus Torvalds <torvalds@osdl.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	ralf@linux-mips.org,
	Linux Kernel list <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@osdl.org>, Greg KH <greg@kroah.com>
Subject: Re: [RFC] Changing pci_iounmap to take 'bar' argument
Date: Sat, 28 May 2005 21:08:00 +0100	[thread overview]
Message-ID: <20050528210759.A10904@flint.arm.linux.org.uk> (raw)
In-Reply-To: <Pine.LNX.4.58.0505260813510.2307@ppc970.osdl.org>; from torvalds@osdl.org on Thu, May 26, 2005 at 08:21:07AM -0700

On Thu, May 26, 2005 at 08:21:07AM -0700, Linus Torvalds wrote:
> 
> 
> On Thu, 26 May 2005, Benjamin Herrenschmidt wrote:
> > 
> > 	foo = pci_iomap(dev, bar, pci_resource_len(dev, bar));
> 
> Btw, this kind of code should be just
> 
> 	foo = pci_iomap(dev, bar, 0);
> 
> because the third argument is _not_ a length, it's a _maximum_ length we 
> need to map, with zero meaning "everything" (as does ~0ul, of course, but 
> zero is obviously easier).
> 
> The only people who want to use non-zero are things like frame-buffers
> that might have hundreds of megabytes of memory, but the kernel only needs
> to map the actual thing visible on the screen.

Note also that framebuffer drivers may also wish to map a bar from a
specific offset and length.  Eg, CyberPro has one BAR which is something
like 16MB large, with the framebuffer in the low addresses and the
registers at 8MB in.  (poor example I know.)

I believe the IXP folk have issues similar to this though, but more
extreme.

> Yeah. It shouldn't be a problem on 64-bit architectures, and even on 
> 32-bit ones the IO-port range really _should_ be fairly small, and a small 
> amount of special casing should hopefully fix it.
> 
> A lot of architectures end up having to separate PIO and MMIO anyway,
> which is - together with hysterical raisins, of course - why the existing
> interfaces just assumed that was possible.

Maybe the interface is just wrong.  Maybe it should be:

struct map {
	void __iomem *cpu;
	/* whatever platform data is required */
};

	err = pci_iomap(dev, bar, size, &map);
...
	pci_iounmap(&map);

The reason I suggest this is that we've had problems with the PCI DMA API -
remember that driver people whinged about having to store the dma_addr_t
cookie and we introduced the following crap:

#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)       dma_addr_t ADDR_NAME;
#define DECLARE_PCI_UNMAP_LEN(LEN_NAME)         __u32 LEN_NAME;
#define pci_unmap_addr(PTR, ADDR_NAME)          ((PTR)->ADDR_NAME)
#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) (((PTR)->ADDR_NAME) = (VAL))
#define pci_unmap_len(PTR, LEN_NAME)            ((PTR)->LEN_NAME)
#define pci_unmap_len_set(PTR, LEN_NAME, VAL)   (((PTR)->LEN_NAME) = (VAL))

Let's not make this same mistake again!  (just like we unknowingly
repeated it for the new DMA API... which should have contained the
returned cookies - the platform specific data which may be just the
CPU address for trivial x86 cases - inside a structure with macros
for accessing them.  Magically all the above mess vanishes.)


-- 
Russell King
 Linux kernel    2.6 ARM Linux   - http://www.arm.linux.org.uk/
 maintainer of:  2.6 Serial core

  reply	other threads:[~2005-05-28 20:08 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-05-26  4:07 [RFC] Changing pci_iounmap to take 'bar' argument Benjamin Herrenschmidt
2005-05-26  4:25 ` Linus Torvalds
2005-05-26  4:27   ` Benjamin Herrenschmidt
2005-05-26  4:30     ` Benjamin Herrenschmidt
2005-05-26  4:55       ` Benjamin Herrenschmidt
2005-05-26 15:21         ` Linus Torvalds
2005-05-28 20:08           ` Russell King [this message]
2005-05-26 22:53 ` Greg KH

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=20050528210759.A10904@flint.arm.linux.org.uk \
    --to=rmk+lkml@arm.linux.org.uk \
    --cc=akpm@osdl.org \
    --cc=benh@kernel.crashing.org \
    --cc=greg@kroah.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ralf@linux-mips.org \
    --cc=torvalds@osdl.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