public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Terence Ripperda <tripperda@nvidia.com>
From: <tripperda@nvidia.com>
To: Andi Kleen <ak@muc.de>
Cc: Terence Ripperda <tripperda@nvidia.com>, linux-kernel@vger.kernel.org
Subject: Re: pat support in the kernel
Date: Tue, 20 May 2003 15:18:55 -0500	[thread overview]
Message-ID: <20030520201855.GE1050@hygelac> (raw)
In-Reply-To: <m38yt1igdh.fsf@averell.firstfloor.org>

On Tue, May 20, 2003 at 09:10:18PM +0200, ak@muc.de wrote:
> change_page_attr() will already do it for the kernel mappings. Just
> define a PAGE_KERNEL_WC.

correct. that was the intent.

> But the tricky part of it is that you need to make sure all mappings
> to that memory have the same caching attribute, otherwise you invoke
> undefined x86 behaviour and risk cache corruptions on some CPUs. 

yes. implementing the basic PAT support is pretty trivial. it's dealing with these cache attribute issues that is the hard part. 

> For normal memory you would need to find a way to synchronize the
> attributes in all mappers (e.g. setting a flag in struct page or
> similar).

are you refering to generic memory that might have shared mappings between multiple processes? I had really only thought of memory explicitly allocated by a driver and mapped to a process, in which this wouldn't be an issue (or is an issue isolated to the specific driver).

it seems it would be easy enough to add a flag to struct page indicating that any future mappings of this memory must be marked with the given attribute. But you'd need to also worry about previous mappings of that page. wouldn't that require a fairly exhaustive scan of who has the physical memory mapped?

would it make sense to limit this functionality to memory mmapped with MAP_PRIVATE rather than MAP_SHARED?

what if process 1 mapped a region WC, forcing process 2 to later map it the same way even though process 2 doesn't care. then process 1 exits and process 3 decides to map the memory. does the caching attribute remain sticky with process 2 (causing process 3 to also need the memory WC), or revert to cached/whatever when the requestor's mapping is removed?

what if 2 processes ask for conflicting mappings? process 1 wants the framebuffer mapped WC, but process 2 asks for it cacheable. or process 1 maps 1/2 of the framebuffer WC and process 2 asks for the full framebuffer uncached.

a lot of these are corner cases that are unlikely to be desirable, but probably should be protected against.

> For frame buffer you also need to handle it in all mmap'ers
> (like fbcon or /dev/mem). I think handling these generic cases will
> need a few VM changes.

yes, this was the case I was more worried about, but it looks like the case above will have the same issues.

I don't think there's any way currently to determine if anyone already has a mapping to a given address range. And it seems that scanning for pre-existing mappings would be pretty ugly. are there any other suggestions for how to handle this?

Thanks,
Terence

  reply	other threads:[~2003-05-20 20:06 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20030520190017$773c@gated-at.bofh.it>
2003-05-20 19:10 ` pat support in the kernel Andi Kleen
2003-05-20 20:18   ` Terence Ripperda, tripperda [this message]
2003-05-21  9:33     ` Andi Kleen
2003-05-22 18:23       ` Terence Ripperda, tripperda
     [not found] <20030520185409.GB941@hygelac.suse.lists.linux.kernel>
     [not found] ` <16074.33371.411219.528228@gargle.gargle.HOWL.suse.lists.linux.kernel>
2003-05-21  9:41   ` Andi Kleen
2003-05-21 10:12     ` mikpe
2003-05-21 10:23       ` Andi Kleen
2003-05-20 18:54 Terence Ripperda, tripperda
2003-05-20 19:30 ` mikpe
2003-05-20 20:31   ` Terence Ripperda, tripperda

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=20030520201855.GE1050@hygelac \
    --to=tripperda@nvidia.com \
    --cc=ak@muc.de \
    --cc=linux-kernel@vger.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