All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zachary Amsden <zach@vmware.com>
To: Hugh Dickins <hugh@veritas.com>
Cc: David Rientjes <rientjes@google.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Ingo Molnar <mingo@redhat.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [patch -mm 1/2] i386: add ptep_test_and_clear_{dirty,young}
Date: Sun, 25 Mar 2007 23:07:43 -0800	[thread overview]
Message-ID: <4607713F.6010900@vmware.com> (raw)
In-Reply-To: <Pine.LNX.4.64.0703260631150.15998@blonde.wat.veritas.com>

Hugh Dickins wrote:
> On Sun, 25 Mar 2007, David Rientjes wrote:
>   
>> Add ptep_test_and_clear_{dirty,young} to i386.  They advertise that they
>> have it and there is at least one place where it needs to be called
>> without the page table lock: to clear the accessed bit on write to
>>     
>
> Without the page table lock??
>
>   
>> /proc/pid/clear_refs.
>>
>> ptep_clear_flush_{dirty,young} are updated to use the new functions.  The
>> overall net effect to current users of ptep_clear_flush_{dirty,young} is
>> that we introduce an additional branch.
>>     
>
> We need to Cc Zach on this: git blame indicates it was he who replaced
> i386's ptep_test_and_clear_{dirty,young} by that "We don't actually
> have these" comment - it looks a bit as if what you want to do might
> violate the assumptions he wants to make, but I don't grasp it.
>
> Hugh
>
>   
>> Cc: Hugh Dickins <hugh@veritas.com>
>> Cc: Ingo Molnar <mingo@redhat.com>
>> Signed-off-by: David Rientjes <rientjes@google.com>
>> ---
>>  include/asm-i386/pgtable.h |   25 +++++++++++++++++--------
>>  1 files changed, 17 insertions(+), 8 deletions(-)
>>
>> diff --git a/include/asm-i386/pgtable.h b/include/asm-i386/pgtable.h
>> --- a/include/asm-i386/pgtable.h
>> +++ b/include/asm-i386/pgtable.h
>> @@ -283,12 +283,23 @@ do {									\
>>  	}								\
>>  } while (0)
>>  
>> -/*
>> - * We don't actually have these, but we want to advertise them so that
>> - * we can encompass the flush here.
>> - */
>>  #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTY
>> +static inline int ptep_test_and_clear_dirty(struct vm_area_struct *vma,
>> +					    unsigned long addr, pte_t *ptep)
>> +{
>> +	if (!pte_dirty(*ptep))
>> +		return 0;
>>     
>> +	return test_and_clear_bit(_PAGE_BIT_DIRTY, &ptep->pte_low);
>> +}
>> +
>>     

If you actually clear the bit, you need to:

+         pte_update_defer(vma->vm_mm, addr, ptep);

The reason is, when updating PTEs, the hypervisor must be notified.  
Using atomic operations to do this is fine for all hypervisors I am 
aware of.  However, for hypervisors which shadow page tables, if these 
PTE modifications are not trapped, you need a post-modification call to 
fulfill the update of the shadow page table.

>>  #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
>> +static inline int ptep_test_and_clear_young(struct vm_area_struct *vma,
>> +					    unsigned long addr, pte_t *ptep)
>> +{
>> +	if (!pte_young(*ptep))
>> +		return 0;
>> +	return test_and_clear_bit(_PAGE_BIT_ACCESSED, &ptep->pte_low);
>> +}
>>     

Same here.

Hugh, thanks for the cc.

Zach

  reply	other threads:[~2007-03-26  6:07 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-03-26  0:35 [patch -mm 1/2] i386: add ptep_test_and_clear_{dirty,young} David Rientjes
2007-03-26  0:35 ` [patch -mm 2/2] smaps: use ptep_test_and_clear_young David Rientjes
2007-03-26  5:53 ` [patch -mm 1/2] i386: add ptep_test_and_clear_{dirty,young} Hugh Dickins
2007-03-26  7:07   ` Zachary Amsden [this message]
2007-03-26  6:27     ` Hugh Dickins
2007-03-26 20:20       ` Zachary Amsden
2007-03-26  6:35     ` David Rientjes
2007-03-26 20:22       ` Zachary Amsden

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=4607713F.6010900@vmware.com \
    --to=zach@vmware.com \
    --cc=akpm@linux-foundation.org \
    --cc=hugh@veritas.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=rientjes@google.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.