LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Randy Dunlap <randy.dunlap@oracle.com>
To: Keith Packard <keithp@keithp.com>
Cc: Ingo Molnar <mingo@elte.hu>,
Jesse Barnes <jbarnes@virtuousgeek.org>,
Nick Piggin <nickpiggin@yahoo.com.au>,
Dave Airlie <airlied@linux.ie>, Yinghai Lu <yinghai@kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] Add io-mapping functions to dynamically map large device apertures
Date: Thu, 23 Oct 2008 21:49:48 -0700 [thread overview]
Message-ID: <20081023214948.0c248345.randy.dunlap@oracle.com> (raw)
In-Reply-To: <1224746087-13991-2-git-send-email-keithp@keithp.com>
On Thu, 23 Oct 2008 00:14:46 -0700 Keith Packard wrote:
> Documentation/io-mapping.txt | 84 ++++++++++++++++++++++++++++
> include/linux/io-mapping.h | 125 ++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 209 insertions(+), 0 deletions(-)
> create mode 100644 Documentation/io-mapping.txt
> create mode 100644 include/linux/io-mapping.h
>
> diff --git a/Documentation/io-mapping.txt b/Documentation/io-mapping.txt
> new file mode 100644
> index 0000000..ebf6dc5
> --- /dev/null
> +++ b/Documentation/io-mapping.txt
> @@ -0,0 +1,84 @@
> +The io_mapping functions in linux/io.h provide an abstraction for
io-mapping.h ?
> +efficiently mapping small regions of an io device to the CPU. The initial
IO or I/O, please
> +usage is to support the large graphics aperture on 32-bit processors where
> +ioremap_wc cannot be used to statically map the entire aperture to the CPU
> +as it would consume too much of the kernel address space.
> +
> +A mapping object is created during driver initialization using
> +
> + struct io_mapping *
> + io_mapping_create_wc(unsigned long base, unsigned long size)
> +
> + 'base' is the bus address of the region to be made
> + mappable, while 'size' indicates how large a mapping region to
> + enable. Both are in bytes.
> +
> + This _wc variant provides a mapping which may only be used
> + with the io_mapping_map_atomic_wc or io_mapping_map_wc.
> +
> +With this mapping object, individual pages can be mapped either atomically
> +or not, depending on the necessary scheduling environment. Of course, atomic
> +maps are more efficient:
> +
> + void *
> + io_mapping_map_atomic_wc(struct io_mapping *mapping, unsigned long offset)
> +
> + 'offset' is the offset within the defined mapping region.
> + Accessing addresses beyond the region specified in the
> + creation function yields undefined results. Using an offset
> + which is not page aligned yields an undefined result. The
> + return value points to a single page in CPU address space.
> +
> + This _wc variant returns a write-combining map to the
> + page and may only be used with
with <TBD>...
> +
> + Note that the task may not sleep while holding this page
> + mapped.
> +
> + void
> + io_mapping_unmap_atomic(void *vaddr)
> +
> + 'vaddr' must be the the value returned by the last
> + io_mapping_map_atomic_wc call. This unmaps the specified
> + page, and allows the task to sleep once again.
s/,//
> +
> +If you need to sleep while holding the lock, you can use the non-atomic
> +variant, although they may be significantly slower;
s/;/./
> +
> + void *
> + io_mapping_map_wc(struct io_mapping *mapping, unsigned long offset)
> +
> + This works like io_mapping_map_atomic_wc except it allows
> + the task to sleep while holding the page mapped.
> +
> + void
> + io_mapping_unmap(void *vaddr)
> +
> + This works like io_mapping_unmap_atomic, except it is used
> + for pages mapped with io_mapping_map_wc.
> +
> +At driver close time, the io_mapping object must be freed:
> +
> + void
> + io_mapping_free(struct io_mapping *mapping)
> +
> +Current Implementation:
> +
> +The initial implementation of these functions use existing mapping
uses
> +mechanisms and so provide only an abstraction layer and no new
provides
> +functionality.
> +
> +On 64-bit processors, io_mapping_create_wc calls ioremap_wc for the whole
> +range, creating a permanent kernel-visible mapping to the resource. The
> +map_atomic and map functions add the requested offset to the base of the
> +virtual address returned by ioremap_wc.
> +
> +On 32-bit processors with HIGHMEM defined, io_mapping_map_atomic_wc uses
> +kmap_atomic_pfn to map the specified page in an atomic fashion;
> +kmap_atomic_pfn isn't really supposed to be used with device pages, but it
> +provides an efficient mapping for this usage.
> +
> +On 32-bit processors without HIGHMEM defined, io_mapping_map_atomic_wc and
> +io_mapping_map_wc both use ioremap_wc, a terribly inefficient function which
> +performs an IPI to inform all processors about the new mapping. This results
> +in a significant performance penalty.
And I wish you could lose that horrible (non-Linux kernel) style of function
return type on a separate line.
---
~Randy
next prev parent reply other threads:[~2008-10-24 4:51 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-17 21:29 [git pull] drm patches for 2.6.27-rc1 Dave Airlie
2008-10-17 22:43 ` Linus Torvalds
2008-10-18 2:10 ` Eric Anholt
2008-10-18 2:47 ` Linus Torvalds
2008-10-18 3:49 ` Keith Packard
2008-10-18 6:44 ` Corbin Simpson
2008-10-18 7:49 ` Eric Anholt
2008-10-19 17:52 ` Peter Zijlstra
2008-10-20 4:17 ` Steven J Newbury
2008-10-20 16:31 ` Linus Torvalds
2008-10-20 20:04 ` Jesse Barnes
2008-10-18 9:11 ` Dave Airlie
2008-10-18 1:37 ` Nick Piggin
2008-10-18 19:11 ` Keith Packard
2008-10-18 19:31 ` Linus Torvalds
2008-10-18 20:07 ` Thomas Hellström
2008-10-18 20:20 ` Keith Packard
2008-10-18 20:37 ` Ingo Molnar
2008-10-18 21:51 ` Keith Packard
2008-10-18 22:32 ` Ingo Molnar
2008-10-18 22:47 ` Jon Smirl
2008-10-18 22:53 ` Linus Torvalds
2008-10-19 0:38 ` Keith Packard
2008-10-19 1:06 ` Arjan van de Ven
2008-10-19 1:15 ` Keith Packard
2008-10-20 10:01 ` Ingo Molnar
2008-10-19 4:14 ` Keith Packard
2008-10-19 6:41 ` Keith Packard
2008-10-19 17:53 ` io resources and cached mappings (was: [git pull] drm patches for 2.6.27-rc1) Ingo Molnar
2008-10-19 18:00 ` Arjan van de Ven
2008-10-19 19:07 ` Eric Anholt
2008-10-20 11:55 ` Ingo Molnar
2008-10-20 12:20 ` Ingo Molnar
2008-10-19 21:04 ` Keith Packard
2008-10-20 11:58 ` Ingo Molnar
2008-10-20 15:49 ` Keith Packard
2008-10-22 9:36 ` Ingo Molnar
2008-10-23 7:14 ` Keith Packard
2008-10-23 7:14 ` [PATCH] Add io-mapping functions to dynamically map large device apertures Keith Packard
2008-10-23 7:14 ` [PATCH] [drm/i915] Use io-mapping interfaces instead of a variety of mapping kludges Keith Packard
2008-10-24 4:49 ` Randy Dunlap [this message]
2008-10-24 6:26 ` [PATCH] Add io-mapping functions to dynamically map large device apertures Keith Packard
2008-10-23 8:05 ` io resources and cached mappings (was: [git pull] drm patches for 2.6.27-rc1) Ingo Molnar
2008-10-23 15:39 ` Keith Packard
2008-11-03 7:00 ` Dave Airlie
2008-11-03 10:48 ` Ingo Molnar
2008-11-03 16:36 ` Linus Torvalds
2008-11-03 16:53 ` Ingo Molnar
2008-11-03 17:29 ` [git pull] IO mappings, #2 Ingo Molnar
2008-11-04 22:36 ` Jonathan Corbet
2008-11-05 9:01 ` Ingo Molnar
2008-10-23 20:22 ` Adding kmap_atomic_prot_pfn (was: [git pull] drm patches for 2.6.27-rc1) Keith Packard
2008-10-23 20:38 ` Andrew Morton
2008-10-23 21:03 ` Keith Packard
2008-10-23 21:24 ` Linus Torvalds
2008-10-24 1:50 ` Keith Packard
2008-10-24 2:48 ` Linus Torvalds
2008-10-24 3:24 ` Benjamin Herrenschmidt
2008-10-24 5:37 ` Keith Packard
2008-10-24 14:53 ` Linus Torvalds
2008-10-24 15:45 ` Keith Packard
2008-10-24 4:29 ` Keith Packard
2008-10-24 6:22 ` Keith Packard
2008-10-24 7:33 ` Adding kmap_atomic_prot_pfn Thomas Hellström
2008-10-24 8:38 ` Ingo Molnar
2008-10-24 9:19 ` Thomas Hellström
2008-10-24 9:32 ` Ingo Molnar
2008-10-24 11:04 ` Thomas Hellström
2008-10-24 15:48 ` Keith Packard
2008-10-24 10:18 ` Thomas Hellström
2008-10-24 9:14 ` Adding kmap_atomic_prot_pfn (was: [git pull] drm patches for 2.6.27-rc1) Ingo Molnar
2008-10-24 3:21 ` Benjamin Herrenschmidt
2008-10-20 10:10 ` io resources and cached mappings " Ingo Molnar
2008-10-19 4:28 ` [git pull] drm patches for 2.6.27-rc1 Yinghai Lu
2008-10-19 3:14 ` Nick Piggin
[not found] <1225392985-6832-1-git-send-email-eric@anholt.net>
2008-10-31 2:38 ` [PATCH] Add io-mapping functions to dynamically map large device apertures Eric Anholt
2008-10-31 9:21 ` Ingo Molnar
2008-10-31 16:59 ` Keith Packard
2008-11-03 8:37 ` Ingo Molnar
2008-11-03 17:09 [PATCH] [x86_32] Add io_map_atomic using fixmaps Keith Packard
2008-11-03 17:09 ` [PATCH] Add io-mapping functions to dynamically map large device apertures Keith Packard
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=20081023214948.0c248345.randy.dunlap@oracle.com \
--to=randy.dunlap@oracle.com \
--cc=airlied@linux.ie \
--cc=jbarnes@virtuousgeek.org \
--cc=keithp@keithp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=nickpiggin@yahoo.com.au \
--cc=yinghai@kernel.org \
--subject='Re: [PATCH] Add io-mapping functions to dynamically map large device apertures' \
/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
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).