mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Keith Packard <keithp@keithp.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: keithp@keithp.com, Andrew Morton <akpm@linux-foundation.org>,
	Ingo Molnar <mingo@elte.hu>,
	nickpiggin@yahoo.com.au, airlied@linux.ie,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	jbarnes@virtuousgeek.org, dri-devel@lists.sf.net,
	yinghai@kernel.org, Peter Anvin <hpa@zytor.com>
Subject: Re: Adding kmap_atomic_prot_pfn  (was: [git pull] drm patches for 2.6.27-rc1)
Date: Thu, 23 Oct 2008 21:29:52 -0700	[thread overview]
Message-ID: <1224822592.22877.71.camel@koto.keithp.com> (raw)
In-Reply-To: <alpine.LFD.2.00.0810231934590.3287@nehalem.linux-foundation.org>

[-- Attachment #1: Type: text/plain, Size: 3748 bytes --]

On Thu, 2008-10-23 at 19:48 -0700, Linus Torvalds wrote:

> I'm not entirely sure who wants to own up to owning that particular part 
> of code, and is willing to make kmap_atomic_prot_pfn() also work in the 
> absense of CONFIG_HIGHMEM.

All of the kmap_atomic functions *do* work without CONFIG_HIGHMEM, they
just don't do what we want in this case. Without knowing the history, it
seems fairly clear that the kmap functions are designed to map physical
memory pages into the kernel virtual address space. On small 32-bit
systems, that's trivial, you just use the direct map (as one does on
64-bit systems). The magic fixmap entries make this work with
CONFIG_HIGHMEM as well.

So, I fear touching the kmap API as it appears to have a specific and
useful purpose, irrespective of the memory size the kernel is configured
for.

What I've proposed is that we create a new io-space specific set of
fixmap APIs. On CONFIG_HIGHMEM, they'd just use the existing kmap_atomic
mechanism, but on small 32-bit systems, we'd enable the fixmaps and have
some for that environment as well.

> So I would suspect that if you guys actually write a patch, and make sure 
> that it works on x86-32 even _without_ CONFIG_HIGHMEM, and send it to 
> Ingo, good things will happen.

Ok, we can give this a try.

> and it probably should all work automatically. The kmap_atomic() stuff 
> really should be almost totally independent of CONFIG_HIGHMEM, since it's 
> really much more closely related to fixmaps than HIGHMEM. 

As above, I think kmap_atomic should be left alone as a way of quickly
mapping memory pages. There are a users of both kmap_atomic_prot (xen)
and kmap_atomic_pfn (crash dumps).

> I guess there may be some debugging code that depends on HIGHMEM (eg that 
> whole testing for whether a page is a highmem page or not), so it might be 
> a _bit_ more than just moving code around, but I really didn't look 
> closer.
> 
> Then, there's the issue of 64-bit, and just mapping everything there, and 
> the interface to that. I liked the trivial extension to "struct resource" 
> to have a "cached mapping" pointer. So if we can just make it pass 
> resources around and get a page that way (and not even need kmap() on 
> 64-bit architections), that would be good.

The io_mapping API I proposed does precisely this. On 32-bit systems, it
uses kmap_atomic for each page access while on 64-bit systems it uses
ioremap_wc at device init time and then just uses an offset for each
page access.

Hiding this detail behind an API leaves the driver code independent of
this particular choice.

> It's too late for -rc1 (which I'm planning on cutting within the hour), 
> and if it ends up being complex, I guess that it means this will eb a 
> 2.6.29 issue.

If we do end up pushing this out to 2.6.29, I'd like to see
kmap_atomic_prot_pfn in place as a stop-gap so that PAT performance on
32-bit systems is reasonable. I don't think too many people are running
desktop systems without CONFIG_HIGHMEM at this point, and if so, we can
just suggest that perhaps they change their configuration.

> But if it really is just a matter of mostly just some trivial code 
> movement and both the gfx and x86 people are all happy, I'll happily take 
> it for -rc2, and we can just leave this all behind us.

I'll try to get something working in the next day or so and see how it
looks. My plan at this point is to create new API for 32-bit systems:

void *io_map_atomic_wc(unsigned long pfn)
void io_unmap_atomic(void *addr);

With this, I can switch my existing io_mapping API over to an
io-specific interface and implement those using the fixmap code.

-- 
keith.packard@intel.com

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

  parent reply	other threads:[~2008-10-24  4:30 UTC|newest]

Thread overview: 75+ 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                               ` [PATCH] Add io-mapping functions to dynamically map large device apertures Randy Dunlap
2008-10-24  6:26                                 ` 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 [this message]
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

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=1224822592.22877.71.camel@koto.keithp.com \
    --to=keithp@keithp.com \
    --cc=airlied@linux.ie \
    --cc=akpm@linux-foundation.org \
    --cc=dri-devel@lists.sf.net \
    --cc=hpa@zytor.com \
    --cc=jbarnes@virtuousgeek.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=nickpiggin@yahoo.com.au \
    --cc=torvalds@linux-foundation.org \
    --cc=yinghai@kernel.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

Powered by JetHome