linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Hugh Dickins <hughd@google.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Jan Kara <jack@suse.cz>, Dave Hansen <dave.hansen@intel.com>,
	"linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>,
	linux-mm <linux-mm@kvack.org>,
	Russell King - ARM Linux <linux@arm.linux.org.uk>,
	Tony Luck <tony.luck@intel.com>
Subject: Re: Dirty/Access bits vs. page content
Date: Sun, 27 Apr 2014 05:20:25 -0700 (PDT)	[thread overview]
Message-ID: <alpine.LSU.2.11.1404270459160.2688@eggly.anvils> (raw)
In-Reply-To: <20140427072034.GC1429@laptop.programming.kicks-ass.net>

On Sun, 27 Apr 2014, Peter Zijlstra wrote:
> On Sat, Apr 26, 2014 at 08:07:11PM +0200, Peter Zijlstra wrote:
> > > > I think we could look at mapping_cap_account_dirty(page->mapping) while
> > > > holding the ptelock, the mapping can't go away while we hold that lock.
> > > > 
> > > > And afaict that's the exact differentiator between these two cases.
> > > 
> > > Yes, that's easily done, but I wasn't sure whether it was correct to
> > > skip on shmem or not - just because shmem doesn't participate in the
> > > page_mkclean() protocol, doesn't imply it's free from similar bugs.
> > > 
> > > I haven't seen a precise description of the bug we're anxious to fix:
> > > Dave's MADV_DONTNEED should be easily fixable, that's not a concern;
> > > Linus's first patch wrote of writing racing with cleaning, but didn't
> > > give a concrete example.
> > 
> > The way I understand it is that we observe the PTE dirty and set PAGE
> > dirty before we make the PTE globally unavailable (through a TLB flush),
> > and thereby we can mistakenly loose updates; by thinking a page is in
> > fact clean even though we can still get updates.
> > 
> > But I suspect you got that far..
> 
> OK, so I've been thinking and figured I either mis-understand how the
> hardware works or don't understand how Linus' patch will actually fully
> fix the issue.
> 
> So what both try_to_unmap_one() and zap_pte_range() end up doing is
> clearing the PTE entry and then flushing the TLBs.
> 
> However, that still leaves a window where there are remote TLB entries.
> What if any of those remote entries cause a write (or have a dirty bit
> cached) while we've already removed the PTE entry.
> 
> This means that the remote CPU cannot update the PTE anymore (its not
> there after all).
> 
> Will the hardware fault when it does a translation and needs to update
> the dirty/access bits while the PTE entry is !present?

Yes - but I'm sure you know that, just not while you wrote the mail ;)

But it will not fault while it still has the entry in its TLB,
with dirty (and access) bits set in that entry in its TLB.

The problem is with those entries, which already have dirty set
in the TLB, although it's now cleared in the page table itself.

I'm answering this mail because it only seems to need "Yes";
but well aware that I've not yet answered your yesterday's mail.
Sorry, my yesterday had to be spent on... other stuff.

I'm sleeping at present (well, not quite) and preparing a reply in
the interstices of my sleep - if I don't change my mind before
answering, I still think shmem needs Linus's (or my) patch.

But woke with a panic attack that we have overlooked the question
of how page reclaim's page_mapped() checks are serialized.
Perhaps this concern will evaporate with the morning dew,
perhaps it will not...

Hugh

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  reply	other threads:[~2014-04-27 12:21 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1398032742.19682.11.camel@pasglop>
     [not found] ` <CA+55aFz1sK+PF96LYYZY7OB7PBpxZu-uNLWLvPiRz-tJsBqX3w@mail.gmail.com>
     [not found]   ` <1398054064.19682.32.camel@pasglop>
     [not found]     ` <1398057630.19682.38.camel@pasglop>
     [not found]       ` <CA+55aFwWHBtihC3w9E4+j4pz+6w7iTnYhTf4N3ie15BM9thxLQ@mail.gmail.com>
     [not found]         ` <53558507.9050703@zytor.com>
     [not found]           ` <CA+55aFxGm6J6N=4L7exLUFMr1_siNGHpK=wApd9GPCH1=63PPA@mail.gmail.com>
     [not found]             ` <53559F48.8040808@intel.com>
2014-04-22  0:31               ` Linus Torvalds
2014-04-22  0:44                 ` Linus Torvalds
2014-04-22  5:15                   ` Tony Luck
2014-04-22 14:55                     ` Linus Torvalds
2014-04-22  7:34                   ` Peter Zijlstra
2014-04-22  7:54                   ` Peter Zijlstra
2014-04-22 21:36                     ` Linus Torvalds
2014-04-22 21:46                       ` Dave Hansen
2014-04-22 22:08                         ` Linus Torvalds
2014-04-22 22:41                           ` Dave Hansen
2014-04-23  2:44                         ` Linus Torvalds
2014-04-23  3:08                       ` Hugh Dickins
2014-04-23  4:23                         ` Linus Torvalds
2014-04-23  6:14                           ` Benjamin Herrenschmidt
2014-04-23 18:41                         ` Jan Kara
2014-04-23 19:33                           ` Linus Torvalds
2014-04-24  6:51                             ` Peter Zijlstra
2014-04-24 18:40                               ` Hugh Dickins
2014-04-24 19:45                                 ` Linus Torvalds
2014-04-24 20:02                                   ` Hugh Dickins
2014-04-24 23:46                                     ` Linus Torvalds
2014-04-25  1:37                                       ` Benjamin Herrenschmidt
2014-04-25  2:41                                         ` Benjamin Herrenschmidt
2014-04-25  2:46                                           ` Linus Torvalds
2014-04-25  2:50                                             ` H. Peter Anvin
2014-04-25  3:03                                               ` Linus Torvalds
2014-04-25 12:01                                                 ` Hugh Dickins
2014-04-25 13:51                                                   ` Peter Zijlstra
2014-04-25 19:41                                                     ` Hugh Dickins
2014-04-26 18:07                                                       ` Peter Zijlstra
2014-04-27  7:20                                                         ` Peter Zijlstra
2014-04-27 12:20                                                           ` Hugh Dickins [this message]
2014-04-27 19:33                                                             ` Peter Zijlstra
2014-04-27 19:47                                                               ` Linus Torvalds
2014-04-27 20:09                                                             ` Hugh Dickins
2014-04-28  9:25                                                               ` Peter Zijlstra
2014-04-28 10:14                                                                 ` Peter Zijlstra
2014-04-27 16:21                                                           ` Linus Torvalds
2014-04-27 23:13                                                             ` Benjamin Herrenschmidt
2014-04-25 16:54                                                   ` Dave Hansen
2014-04-25 18:41                                                     ` Hugh Dickins
2014-04-25 22:00                                                       ` Dave Hansen
2014-04-26  3:11                                                         ` Hugh Dickins
2014-04-26  3:48                                                           ` Linus Torvalds
2014-04-25 17:56                                                   ` Linus Torvalds
2014-04-25 19:13                                                     ` Hugh Dickins
2014-04-25 16:30                                       ` Dave Hansen
2014-04-23 20:11                           ` Hugh Dickins
2014-04-24  8:49                             ` Jan Kara

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=alpine.LSU.2.11.1404270459160.2688@eggly.anvils \
    --to=hughd@google.com \
    --cc=benh@kernel.crashing.org \
    --cc=dave.hansen@intel.com \
    --cc=hpa@zytor.com \
    --cc=jack@suse.cz \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux@arm.linux.org.uk \
    --cc=peterz@infradead.org \
    --cc=tony.luck@intel.com \
    --cc=torvalds@linux-foundation.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