All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Thomas Hellström" <thellstrom@vmware.com>
To: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: "Pallipadi, Venkatesh" <venkatesh.pallipadi@intel.com>,
	Linux kernel mailing list <linux-kernel@vger.kernel.org>,
	"Siddha, Suresh B" <suresh.b.siddha@intel.com>
Subject: Re: 2.6.29 pat issue
Date: Fri, 06 Feb 2009 10:43:08 +0100	[thread overview]
Message-ID: <498C062C.201@vmware.com> (raw)
In-Reply-To: <m1tz78pdwy.fsf@fess.ebiederm.org>

Eric W. Biederman wrote:
> Thomas Hellstrom <thellstrom@vmware.com> writes:
>
>
>   
>> Indeed, it's crucial to keep the mappings consistent, but failure to do so is a
>> kernel driver bug, it should never be the result of invalid user data.
>>     
>
> It easily can be.  Think of an X server mmaping frame buffers. Or other
> device bars.
>
>   
Hmm, Yes  you're right, although I'm still a bit doubtful about RAM pages.

Wait. Now I see what's causing the problems. The code is  assuming that  
VM_PFNMAP vmas never map RAM pages. That's also an invalid assumption. 
See comments in mm/memory.c

So probably the attribute check should be done for the insert_pfn path 
of VM_MIXEDMAP as well. That's not done today.

So there are three distinct bugs at this point:

1) VMAs with VM_PFNMAP are incorrectly assumed to be linear if 
vma->vm_pgoff non-null.
2) VM_PFNMAP VMA PTEs are incorrectly assumed to never point to physical 
RAM.
3) There is no check for the insert_pfn  path of vm_insert_mixed().

>   
>> IMHO checking each vm_insert_pfn() for caching attribute correctness is not
>> something that should be enabled by default, due to the CPU overhead. Production
>> drivers should never violate this.
>>     
>
> If it is a problem the implementation should become more efficient.  Userspace
> as well as drivers can generate these mappings so even with a perfect driver
> you cannot guarantee that someone else does not have that area of memory
> mapped differently.
>   
OK, So there seems to be a couple of things that can be done for 
performance here:

1) A fastpath for single pages.
2) RAM pages are tracked with a page bit today.
Why not say "all memory backed by a struct page" should be tracked with 
a page bit. Then pfn_valid() could be used instead of page_is_ram(). 
This, combined with 1) should make tracking struct page backed pages 
extremely fast.
3) If vm_insert_pfn() happens to be used on a linear VMA, it looks like 
the whole VMA is being validated for each vm_insert_pfn(), which seems 
extremely inefficient, considering the extensive tests in pagerame_is_ram().

/Thomas

> Eric
>   



  reply	other threads:[~2009-02-06  9:43 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-05 12:47 2.6.29 pat issue Thomas Hellström
2009-02-05 18:03 ` Pallipadi, Venkatesh
2009-02-05 21:32   ` Thomas Hellstrom
2009-02-05 23:08     ` Pallipadi, Venkatesh
2009-02-06  9:51       ` Thomas Hellström
2009-02-06  1:11     ` Eric W. Biederman
2009-02-06  9:43       ` Thomas Hellström [this message]
2009-03-04  6:08         ` Pallipadi, Venkatesh
2009-03-04  9:56           ` Thomas Hellstrom
2009-03-06 22:38             ` Pallipadi, Venkatesh
2009-03-06 23:44               ` Thomas Hellstrom
2009-03-10  1:39                 ` Pallipadi, Venkatesh
2009-03-10  8:22                   ` Thomas Hellstrom
2009-03-10 17:42                     ` Pallipadi, Venkatesh
2009-03-11  9:17                       ` Thomas Hellstrom
2009-03-11  9:33                         ` Ingo Molnar
2009-03-11 17:54                           ` [PATCH] VM, x86, PAT: Change implementation of is_linear_pfn_mapping Pallipadi, Venkatesh
2009-03-11 22:09                             ` Frans Pop
2009-03-12  0:31                               ` Pallipadi, Venkatesh
2009-03-12  3:22                                 ` Pallipadi, Venkatesh
2009-03-12  5:45                                 ` Frans Pop
2009-03-12 18:59                                   ` Pallipadi, Venkatesh
2009-03-12 20:30                                     ` Frans Pop
2009-03-12 22:48                                       ` Pallipadi, Venkatesh
2009-03-13  0:36                                         ` Ingo Molnar
2009-03-13  0:45                                           ` [PATCH] VM, x86, PAT: Change is_linear_pfn_mapping to not use vm_pgoff Pallipadi, Venkatesh
2009-03-13  4:03                                             ` [tip:x86/urgent] " Pallipadi, Venkatesh
2009-03-13 16:25                                               ` Nick Piggin
2009-03-13 17:00                                                 ` Pallipadi, Venkatesh
2009-03-14  2:52                                                   ` Nick Piggin
2009-03-13 23:35                                                 ` [PATCH] Add a new vm flag to track full pfnmap at mmap Pallipadi, Venkatesh
2009-03-14  2:53                                                   ` Nick Piggin
2009-03-14  8:54                                                   ` [tip:x86/urgent] VM, x86, PAT: add " Pallipadi, Venkatesh

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=498C062C.201@vmware.com \
    --to=thellstrom@vmware.com \
    --cc=ebiederm@xmission.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=suresh.b.siddha@intel.com \
    --cc=venkatesh.pallipadi@intel.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.