* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-17 13:01 ` Will Deacon
0 siblings, 0 replies; 36+ messages in thread
From: Will Deacon @ 2012-10-17 13:01 UTC (permalink / raw)
To: Andrew Morton
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, mhocko@suse.cz, kirill@shutemov.name,
Andrea Arcangeli, Chris Metcalf, Steve Capper
Hi Andrew,
On Tue, Oct 02, 2012 at 11:01:04PM +0100, Andrew Morton wrote:
> On Tue, 2 Oct 2012 17:59:11 +0100
> Will Deacon <will.deacon@arm.com> wrote:
>
> > On x86 memory accesses to pages without the ACCESSED flag set result in the
> > ACCESSED flag being set automatically. With the ARM architecture a page access
> > fault is raised instead (and it will continue to be raised until the ACCESSED
> > flag is set for the appropriate PTE/PMD).
> >
> > For normal memory pages, handle_pte_fault will call pte_mkyoung (effectively
> > setting the ACCESSED flag). For transparent huge pages, pmd_mkyoung will only
> > be called for a write fault.
> >
> > This patch ensures that faults on transparent hugepages which do not result
> > in a CoW update the access flags for the faulting pmd.
>
> Alas, the code you're altering has changed so much in linux-next that I
> am reluctant to force this fix in there myself. Can you please
> redo/retest/resend? You can do that on 3.7-rc1 if you like, then we
> can feed this into -rc2.
Here's the updated patch against -rc1...
Cheers,
Will
--->8
>From 16b73aea010832cd3d6f22ada60ae055937ef6c0 Mon Sep 17 00:00:00 2001
From: Will Deacon <will.deacon@arm.com>
Date: Tue, 2 Oct 2012 11:18:52 +0100
Subject: [PATCH] mm: thp: Set the accessed flag for old pages on access fault.
On x86 memory accesses to pages without the ACCESSED flag set result in the
ACCESSED flag being set automatically. With the ARM architecture a page access
fault is raised instead (and it will continue to be raised until the ACCESSED
flag is set for the appropriate PTE/PMD).
For normal memory pages, handle_pte_fault will call pte_mkyoung (effectively
setting the ACCESSED flag). For transparent huge pages, pmd_mkyoung will only
be called for a write fault.
This patch ensures that faults on transparent hugepages which do not result
in a CoW update the access flags for the faulting pmd.
Cc: Chris Metcalf <cmetcalf@tilera.com>
Acked-by: Kirill A. Shutemov <kirill@shutemov.name>
Reviewed-by: Andrea Arcangeli <aarcange@redhat.com>
Signed-off-by: Steve Capper <steve.capper@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
include/linux/huge_mm.h | 2 ++
mm/huge_memory.c | 8 ++++++++
mm/memory.c | 9 ++++++++-
3 files changed, 18 insertions(+), 1 deletions(-)
diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h
index b31cb7d..62a0d5a 100644
--- a/include/linux/huge_mm.h
+++ b/include/linux/huge_mm.h
@@ -8,6 +8,8 @@ extern int do_huge_pmd_anonymous_page(struct mm_struct *mm,
extern int copy_huge_pmd(struct mm_struct *dst_mm, struct mm_struct *src_mm,
pmd_t *dst_pmd, pmd_t *src_pmd, unsigned long addr,
struct vm_area_struct *vma);
+extern void huge_pmd_set_accessed(struct vm_area_struct *vma,
+ unsigned long address, pmd_t *pmd, int dirty);
extern int do_huge_pmd_wp_page(struct mm_struct *mm, struct vm_area_struct *vma,
unsigned long address, pmd_t *pmd,
pmd_t orig_pmd);
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index a863af2..5a7ce24 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -878,6 +878,14 @@ out_free_pages:
goto out;
}
+void huge_pmd_set_accessed(struct vm_area_struct *vma, unsigned long address,
+ pmd_t *pmd, int dirty)
+{
+ pmd_t entry = pmd_mkyoung(*pmd);
+ if (pmdp_set_access_flags(vma, address & HPAGE_PMD_MASK, pmd, entry, dirty))
+ update_mmu_cache(vma, address, pmd);
+}
+
int do_huge_pmd_wp_page(struct mm_struct *mm, struct vm_area_struct *vma,
unsigned long address, pmd_t *pmd, pmd_t orig_pmd)
{
diff --git a/mm/memory.c b/mm/memory.c
index fb135ba..c55c17c 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -3539,7 +3539,8 @@ retry:
barrier();
if (pmd_trans_huge(orig_pmd)) {
- if (flags & FAULT_FLAG_WRITE &&
+ unsigned int dirty = flags & FAULT_FLAG_WRITE;
+ if (dirty &&
!pmd_write(orig_pmd) &&
!pmd_trans_splitting(orig_pmd)) {
ret = do_huge_pmd_wp_page(mm, vma, address, pmd,
@@ -3552,7 +3553,13 @@ retry:
if (unlikely(ret & VM_FAULT_OOM))
goto retry;
return ret;
+ } else if (pmd_trans_huge_lock(pmd, vma) == 1) {
+ if (likely(pmd_same(*pmd, orig_pmd)))
+ huge_pmd_set_accessed(vma, address, pmd,
+ dirty);
+ spin_unlock(&mm->page_table_lock);
}
+
return 0;
}
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 36+ messages in thread* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-17 13:01 ` Will Deacon
0 siblings, 0 replies; 36+ messages in thread
From: Will Deacon @ 2012-10-17 13:01 UTC (permalink / raw)
To: Andrew Morton
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, mhocko@suse.cz, kirill@shutemov.name,
Andrea Arcangeli, Chris Metcalf, Steve Capper
Hi Andrew,
On Tue, Oct 02, 2012 at 11:01:04PM +0100, Andrew Morton wrote:
> On Tue, 2 Oct 2012 17:59:11 +0100
> Will Deacon <will.deacon@arm.com> wrote:
>
> > On x86 memory accesses to pages without the ACCESSED flag set result in the
> > ACCESSED flag being set automatically. With the ARM architecture a page access
> > fault is raised instead (and it will continue to be raised until the ACCESSED
> > flag is set for the appropriate PTE/PMD).
> >
> > For normal memory pages, handle_pte_fault will call pte_mkyoung (effectively
> > setting the ACCESSED flag). For transparent huge pages, pmd_mkyoung will only
> > be called for a write fault.
> >
> > This patch ensures that faults on transparent hugepages which do not result
> > in a CoW update the access flags for the faulting pmd.
>
> Alas, the code you're altering has changed so much in linux-next that I
> am reluctant to force this fix in there myself. Can you please
> redo/retest/resend? You can do that on 3.7-rc1 if you like, then we
> can feed this into -rc2.
Here's the updated patch against -rc1...
Cheers,
Will
--->8
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-17 13:01 ` Will Deacon
0 siblings, 0 replies; 36+ messages in thread
From: Will Deacon @ 2012-10-17 13:01 UTC (permalink / raw)
To: Andrew Morton
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, mhocko@suse.cz, kirill@shutemov.name,
Andrea Arcangeli, Chris Metcalf, Steve Capper
Hi Andrew,
On Tue, Oct 02, 2012 at 11:01:04PM +0100, Andrew Morton wrote:
> On Tue, 2 Oct 2012 17:59:11 +0100
> Will Deacon <will.deacon@arm.com> wrote:
>
> > On x86 memory accesses to pages without the ACCESSED flag set result in the
> > ACCESSED flag being set automatically. With the ARM architecture a page access
> > fault is raised instead (and it will continue to be raised until the ACCESSED
> > flag is set for the appropriate PTE/PMD).
> >
> > For normal memory pages, handle_pte_fault will call pte_mkyoung (effectively
> > setting the ACCESSED flag). For transparent huge pages, pmd_mkyoung will only
> > be called for a write fault.
> >
> > This patch ensures that faults on transparent hugepages which do not result
> > in a CoW update the access flags for the faulting pmd.
>
> Alas, the code you're altering has changed so much in linux-next that I
> am reluctant to force this fix in there myself. Can you please
> redo/retest/resend? You can do that on 3.7-rc1 if you like, then we
> can feed this into -rc2.
Here's the updated patch against -rc1...
Cheers,
Will
--->8
From 16b73aea010832cd3d6f22ada60ae055937ef6c0 Mon Sep 17 00:00:00 2001
From: Will Deacon <will.deacon@arm.com>
Date: Tue, 2 Oct 2012 11:18:52 +0100
Subject: [PATCH] mm: thp: Set the accessed flag for old pages on access fault.
On x86 memory accesses to pages without the ACCESSED flag set result in the
ACCESSED flag being set automatically. With the ARM architecture a page access
fault is raised instead (and it will continue to be raised until the ACCESSED
flag is set for the appropriate PTE/PMD).
For normal memory pages, handle_pte_fault will call pte_mkyoung (effectively
setting the ACCESSED flag). For transparent huge pages, pmd_mkyoung will only
be called for a write fault.
This patch ensures that faults on transparent hugepages which do not result
in a CoW update the access flags for the faulting pmd.
Cc: Chris Metcalf <cmetcalf@tilera.com>
Acked-by: Kirill A. Shutemov <kirill@shutemov.name>
Reviewed-by: Andrea Arcangeli <aarcange@redhat.com>
Signed-off-by: Steve Capper <steve.capper@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
include/linux/huge_mm.h | 2 ++
mm/huge_memory.c | 8 ++++++++
mm/memory.c | 9 ++++++++-
3 files changed, 18 insertions(+), 1 deletions(-)
diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h
index b31cb7d..62a0d5a 100644
--- a/include/linux/huge_mm.h
+++ b/include/linux/huge_mm.h
@@ -8,6 +8,8 @@ extern int do_huge_pmd_anonymous_page(struct mm_struct *mm,
extern int copy_huge_pmd(struct mm_struct *dst_mm, struct mm_struct *src_mm,
pmd_t *dst_pmd, pmd_t *src_pmd, unsigned long addr,
struct vm_area_struct *vma);
+extern void huge_pmd_set_accessed(struct vm_area_struct *vma,
+ unsigned long address, pmd_t *pmd, int dirty);
extern int do_huge_pmd_wp_page(struct mm_struct *mm, struct vm_area_struct *vma,
unsigned long address, pmd_t *pmd,
pmd_t orig_pmd);
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index a863af2..5a7ce24 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -878,6 +878,14 @@ out_free_pages:
goto out;
}
+void huge_pmd_set_accessed(struct vm_area_struct *vma, unsigned long address,
+ pmd_t *pmd, int dirty)
+{
+ pmd_t entry = pmd_mkyoung(*pmd);
+ if (pmdp_set_access_flags(vma, address & HPAGE_PMD_MASK, pmd, entry, dirty))
+ update_mmu_cache(vma, address, pmd);
+}
+
int do_huge_pmd_wp_page(struct mm_struct *mm, struct vm_area_struct *vma,
unsigned long address, pmd_t *pmd, pmd_t orig_pmd)
{
diff --git a/mm/memory.c b/mm/memory.c
index fb135ba..c55c17c 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -3539,7 +3539,8 @@ retry:
barrier();
if (pmd_trans_huge(orig_pmd)) {
- if (flags & FAULT_FLAG_WRITE &&
+ unsigned int dirty = flags & FAULT_FLAG_WRITE;
+ if (dirty &&
!pmd_write(orig_pmd) &&
!pmd_trans_splitting(orig_pmd)) {
ret = do_huge_pmd_wp_page(mm, vma, address, pmd,
@@ -3552,7 +3553,13 @@ retry:
if (unlikely(ret & VM_FAULT_OOM))
goto retry;
return ret;
+ } else if (pmd_trans_huge_lock(pmd, vma) == 1) {
+ if (likely(pmd_same(*pmd, orig_pmd)))
+ huge_pmd_set_accessed(vma, address, pmd,
+ dirty);
+ spin_unlock(&mm->page_table_lock);
}
+
return 0;
}
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 36+ messages in thread* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
2012-10-17 13:01 ` Will Deacon
@ 2012-10-17 15:26 ` David Miller
-1 siblings, 0 replies; 36+ messages in thread
From: David Miller @ 2012-10-17 15:26 UTC (permalink / raw)
To: will.deacon
Cc: akpm, linux-mm, linux-kernel, linux-arch, mhocko, kirill,
aarcange, cmetcalf, Steve.Capper
From: Will Deacon <will.deacon@arm.com>
Date: Wed, 17 Oct 2012 14:01:25 +0100
> + update_mmu_cache(vma, address, pmd);
This won't build, use update_mmu_cache_pmd().
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-17 15:26 ` David Miller
0 siblings, 0 replies; 36+ messages in thread
From: David Miller @ 2012-10-17 15:26 UTC (permalink / raw)
To: will.deacon
Cc: akpm, linux-mm, linux-kernel, linux-arch, mhocko, kirill,
aarcange, cmetcalf, Steve.Capper
From: Will Deacon <will.deacon@arm.com>
Date: Wed, 17 Oct 2012 14:01:25 +0100
> + update_mmu_cache(vma, address, pmd);
This won't build, use update_mmu_cache_pmd().
--
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>
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-17 15:54 ` Will Deacon
0 siblings, 0 replies; 36+ messages in thread
From: Will Deacon @ 2012-10-17 15:54 UTC (permalink / raw)
To: David Miller
Cc: akpm@linux-foundation.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
mhocko@suse.cz, kirill@shutemov.name, aarcange@redhat.com,
cmetcalf@tilera.com, Steve Capper
On Wed, Oct 17, 2012 at 04:26:20PM +0100, David Miller wrote:
> From: Will Deacon <will.deacon@arm.com>
> Date: Wed, 17 Oct 2012 14:01:25 +0100
>
> > + update_mmu_cache(vma, address, pmd);
>
> This won't build, use update_mmu_cache_pmd().
Good catch. They're both empty macros on ARM, so the typechecker didn't spot
it. Updated patch below.
Cheers,
Will
--->8
From a548127ac12c14c178d4d817fa454baec9043d89 Mon Sep 17 00:00:00 2001
From: Will Deacon <will.deacon@arm.com>
Date: Tue, 2 Oct 2012 11:18:52 +0100
Subject: [PATCH] mm: thp: Set the accessed flag for old pages on access fault.
On x86 memory accesses to pages without the ACCESSED flag set result in the
ACCESSED flag being set automatically. With the ARM architecture a page access
fault is raised instead (and it will continue to be raised until the ACCESSED
flag is set for the appropriate PTE/PMD).
For normal memory pages, handle_pte_fault will call pte_mkyoung (effectively
setting the ACCESSED flag). For transparent huge pages, pmd_mkyoung will only
be called for a write fault.
This patch ensures that faults on transparent hugepages which do not result
in a CoW update the access flags for the faulting pmd.
Cc: Chris Metcalf <cmetcalf@tilera.com>
Acked-by: Kirill A. Shutemov <kirill@shutemov.name>
Reviewed-by: Andrea Arcangeli <aarcange@redhat.com>
Signed-off-by: Steve Capper <steve.capper@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
include/linux/huge_mm.h | 2 ++
mm/huge_memory.c | 8 ++++++++
mm/memory.c | 9 ++++++++-
3 files changed, 18 insertions(+), 1 deletions(-)
diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h
index b31cb7d..62a0d5a 100644
--- a/include/linux/huge_mm.h
+++ b/include/linux/huge_mm.h
@@ -8,6 +8,8 @@ extern int do_huge_pmd_anonymous_page(struct mm_struct *mm,
extern int copy_huge_pmd(struct mm_struct *dst_mm, struct mm_struct *src_mm,
pmd_t *dst_pmd, pmd_t *src_pmd, unsigned long addr,
struct vm_area_struct *vma);
+extern void huge_pmd_set_accessed(struct vm_area_struct *vma,
+ unsigned long address, pmd_t *pmd, int dirty);
extern int do_huge_pmd_wp_page(struct mm_struct *mm, struct vm_area_struct *vma,
unsigned long address, pmd_t *pmd,
pmd_t orig_pmd);
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index a863af2..d9aa402 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -878,6 +878,14 @@ out_free_pages:
goto out;
}
+void huge_pmd_set_accessed(struct vm_area_struct *vma, unsigned long address,
+ pmd_t *pmd, int dirty)
+{
+ pmd_t entry = pmd_mkyoung(*pmd);
+ if (pmdp_set_access_flags(vma, address & HPAGE_PMD_MASK, pmd, entry, dirty))
+ update_mmu_cache_pmd(vma, address, pmd);
+}
+
int do_huge_pmd_wp_page(struct mm_struct *mm, struct vm_area_struct *vma,
unsigned long address, pmd_t *pmd, pmd_t orig_pmd)
{
diff --git a/mm/memory.c b/mm/memory.c
index fb135ba..c55c17c 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -3539,7 +3539,8 @@ retry:
barrier();
if (pmd_trans_huge(orig_pmd)) {
- if (flags & FAULT_FLAG_WRITE &&
+ unsigned int dirty = flags & FAULT_FLAG_WRITE;
+ if (dirty &&
!pmd_write(orig_pmd) &&
!pmd_trans_splitting(orig_pmd)) {
ret = do_huge_pmd_wp_page(mm, vma, address, pmd,
@@ -3552,7 +3553,13 @@ retry:
if (unlikely(ret & VM_FAULT_OOM))
goto retry;
return ret;
+ } else if (pmd_trans_huge_lock(pmd, vma) == 1) {
+ if (likely(pmd_same(*pmd, orig_pmd)))
+ huge_pmd_set_accessed(vma, address, pmd,
+ dirty);
+ spin_unlock(&mm->page_table_lock);
}
+
return 0;
}
}
--
1.7.4.1
--
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>
^ permalink raw reply related [flat|nested] 36+ messages in thread* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-17 15:54 ` Will Deacon
0 siblings, 0 replies; 36+ messages in thread
From: Will Deacon @ 2012-10-17 15:54 UTC (permalink / raw)
To: David Miller
Cc: akpm@linux-foundation.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
mhocko@suse.cz, kirill@shutemov.name, aarcange@redhat.com,
cmetcalf@tilera.com, Steve Capper
On Wed, Oct 17, 2012 at 04:26:20PM +0100, David Miller wrote:
> From: Will Deacon <will.deacon@arm.com>
> Date: Wed, 17 Oct 2012 14:01:25 +0100
>
> > + update_mmu_cache(vma, address, pmd);
>
> This won't build, use update_mmu_cache_pmd().
Good catch. They're both empty macros on ARM, so the typechecker didn't spot
it. Updated patch below.
Cheers,
Will
--->8
>From a548127ac12c14c178d4d817fa454baec9043d89 Mon Sep 17 00:00:00 2001
From: Will Deacon <will.deacon@arm.com>
Date: Tue, 2 Oct 2012 11:18:52 +0100
Subject: [PATCH] mm: thp: Set the accessed flag for old pages on access fault.
On x86 memory accesses to pages without the ACCESSED flag set result in the
ACCESSED flag being set automatically. With the ARM architecture a page access
fault is raised instead (and it will continue to be raised until the ACCESSED
flag is set for the appropriate PTE/PMD).
For normal memory pages, handle_pte_fault will call pte_mkyoung (effectively
setting the ACCESSED flag). For transparent huge pages, pmd_mkyoung will only
be called for a write fault.
This patch ensures that faults on transparent hugepages which do not result
in a CoW update the access flags for the faulting pmd.
Cc: Chris Metcalf <cmetcalf@tilera.com>
Acked-by: Kirill A. Shutemov <kirill@shutemov.name>
Reviewed-by: Andrea Arcangeli <aarcange@redhat.com>
Signed-off-by: Steve Capper <steve.capper@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
include/linux/huge_mm.h | 2 ++
mm/huge_memory.c | 8 ++++++++
mm/memory.c | 9 ++++++++-
3 files changed, 18 insertions(+), 1 deletions(-)
diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h
index b31cb7d..62a0d5a 100644
--- a/include/linux/huge_mm.h
+++ b/include/linux/huge_mm.h
@@ -8,6 +8,8 @@ extern int do_huge_pmd_anonymous_page(struct mm_struct *mm,
extern int copy_huge_pmd(struct mm_struct *dst_mm, struct mm_struct *src_mm,
pmd_t *dst_pmd, pmd_t *src_pmd, unsigned long addr,
struct vm_area_struct *vma);
+extern void huge_pmd_set_accessed(struct vm_area_struct *vma,
+ unsigned long address, pmd_t *pmd, int dirty);
extern int do_huge_pmd_wp_page(struct mm_struct *mm, struct vm_area_struct *vma,
unsigned long address, pmd_t *pmd,
pmd_t orig_pmd);
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index a863af2..d9aa402 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -878,6 +878,14 @@ out_free_pages:
goto out;
}
+void huge_pmd_set_accessed(struct vm_area_struct *vma, unsigned long address,
+ pmd_t *pmd, int dirty)
+{
+ pmd_t entry = pmd_mkyoung(*pmd);
+ if (pmdp_set_access_flags(vma, address & HPAGE_PMD_MASK, pmd, entry, dirty))
+ update_mmu_cache_pmd(vma, address, pmd);
+}
+
int do_huge_pmd_wp_page(struct mm_struct *mm, struct vm_area_struct *vma,
unsigned long address, pmd_t *pmd, pmd_t orig_pmd)
{
diff --git a/mm/memory.c b/mm/memory.c
index fb135ba..c55c17c 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -3539,7 +3539,8 @@ retry:
barrier();
if (pmd_trans_huge(orig_pmd)) {
- if (flags & FAULT_FLAG_WRITE &&
+ unsigned int dirty = flags & FAULT_FLAG_WRITE;
+ if (dirty &&
!pmd_write(orig_pmd) &&
!pmd_trans_splitting(orig_pmd)) {
ret = do_huge_pmd_wp_page(mm, vma, address, pmd,
@@ -3552,7 +3553,13 @@ retry:
if (unlikely(ret & VM_FAULT_OOM))
goto retry;
return ret;
+ } else if (pmd_trans_huge_lock(pmd, vma) == 1) {
+ if (likely(pmd_same(*pmd, orig_pmd)))
+ huge_pmd_set_accessed(vma, address, pmd,
+ dirty);
+ spin_unlock(&mm->page_table_lock);
}
+
return 0;
}
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 36+ messages in thread* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-17 15:54 ` Will Deacon
0 siblings, 0 replies; 36+ messages in thread
From: Will Deacon @ 2012-10-17 15:54 UTC (permalink / raw)
To: David Miller
Cc: akpm@linux-foundation.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
mhocko@suse.cz, kirill@shutemov.name, aarcange@redhat.com,
cmetcalf@tilera.com, Steve Capper
On Wed, Oct 17, 2012 at 04:26:20PM +0100, David Miller wrote:
> From: Will Deacon <will.deacon@arm.com>
> Date: Wed, 17 Oct 2012 14:01:25 +0100
>
> > + update_mmu_cache(vma, address, pmd);
>
> This won't build, use update_mmu_cache_pmd().
Good catch. They're both empty macros on ARM, so the typechecker didn't spot
it. Updated patch below.
Cheers,
Will
--->8
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-17 15:54 ` Will Deacon
0 siblings, 0 replies; 36+ messages in thread
From: Will Deacon @ 2012-10-17 15:54 UTC (permalink / raw)
To: David Miller
Cc: akpm@linux-foundation.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
mhocko@suse.cz, kirill@shutemov.name, aarcange@redhat.com,
cmetcalf@tilera.com, Steve Capper
On Wed, Oct 17, 2012 at 04:26:20PM +0100, David Miller wrote:
> From: Will Deacon <will.deacon@arm.com>
> Date: Wed, 17 Oct 2012 14:01:25 +0100
>
> > + update_mmu_cache(vma, address, pmd);
>
> This won't build, use update_mmu_cache_pmd().
Good catch. They're both empty macros on ARM, so the typechecker didn't spot
it. Updated patch below.
Cheers,
Will
--->8
From a548127ac12c14c178d4d817fa454baec9043d89 Mon Sep 17 00:00:00 2001
From: Will Deacon <will.deacon@arm.com>
Date: Tue, 2 Oct 2012 11:18:52 +0100
Subject: [PATCH] mm: thp: Set the accessed flag for old pages on access fault.
On x86 memory accesses to pages without the ACCESSED flag set result in the
ACCESSED flag being set automatically. With the ARM architecture a page access
fault is raised instead (and it will continue to be raised until the ACCESSED
flag is set for the appropriate PTE/PMD).
For normal memory pages, handle_pte_fault will call pte_mkyoung (effectively
setting the ACCESSED flag). For transparent huge pages, pmd_mkyoung will only
be called for a write fault.
This patch ensures that faults on transparent hugepages which do not result
in a CoW update the access flags for the faulting pmd.
Cc: Chris Metcalf <cmetcalf@tilera.com>
Acked-by: Kirill A. Shutemov <kirill@shutemov.name>
Reviewed-by: Andrea Arcangeli <aarcange@redhat.com>
Signed-off-by: Steve Capper <steve.capper@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
include/linux/huge_mm.h | 2 ++
mm/huge_memory.c | 8 ++++++++
mm/memory.c | 9 ++++++++-
3 files changed, 18 insertions(+), 1 deletions(-)
diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h
index b31cb7d..62a0d5a 100644
--- a/include/linux/huge_mm.h
+++ b/include/linux/huge_mm.h
@@ -8,6 +8,8 @@ extern int do_huge_pmd_anonymous_page(struct mm_struct *mm,
extern int copy_huge_pmd(struct mm_struct *dst_mm, struct mm_struct *src_mm,
pmd_t *dst_pmd, pmd_t *src_pmd, unsigned long addr,
struct vm_area_struct *vma);
+extern void huge_pmd_set_accessed(struct vm_area_struct *vma,
+ unsigned long address, pmd_t *pmd, int dirty);
extern int do_huge_pmd_wp_page(struct mm_struct *mm, struct vm_area_struct *vma,
unsigned long address, pmd_t *pmd,
pmd_t orig_pmd);
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index a863af2..d9aa402 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -878,6 +878,14 @@ out_free_pages:
goto out;
}
+void huge_pmd_set_accessed(struct vm_area_struct *vma, unsigned long address,
+ pmd_t *pmd, int dirty)
+{
+ pmd_t entry = pmd_mkyoung(*pmd);
+ if (pmdp_set_access_flags(vma, address & HPAGE_PMD_MASK, pmd, entry, dirty))
+ update_mmu_cache_pmd(vma, address, pmd);
+}
+
int do_huge_pmd_wp_page(struct mm_struct *mm, struct vm_area_struct *vma,
unsigned long address, pmd_t *pmd, pmd_t orig_pmd)
{
diff --git a/mm/memory.c b/mm/memory.c
index fb135ba..c55c17c 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -3539,7 +3539,8 @@ retry:
barrier();
if (pmd_trans_huge(orig_pmd)) {
- if (flags & FAULT_FLAG_WRITE &&
+ unsigned int dirty = flags & FAULT_FLAG_WRITE;
+ if (dirty &&
!pmd_write(orig_pmd) &&
!pmd_trans_splitting(orig_pmd)) {
ret = do_huge_pmd_wp_page(mm, vma, address, pmd,
@@ -3552,7 +3553,13 @@ retry:
if (unlikely(ret & VM_FAULT_OOM))
goto retry;
return ret;
+ } else if (pmd_trans_huge_lock(pmd, vma) == 1) {
+ if (likely(pmd_same(*pmd, orig_pmd)))
+ huge_pmd_set_accessed(vma, address, pmd,
+ dirty);
+ spin_unlock(&mm->page_table_lock);
}
+
return 0;
}
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 36+ messages in thread* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-18 22:05 ` Andrew Morton
0 siblings, 0 replies; 36+ messages in thread
From: Andrew Morton @ 2012-10-18 22:05 UTC (permalink / raw)
To: Will Deacon
Cc: David Miller, linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, mhocko@suse.cz, kirill@shutemov.name,
aarcange@redhat.com, cmetcalf@tilera.com, Steve Capper
On Wed, 17 Oct 2012 16:54:02 +0100
Will Deacon <will.deacon@arm.com> wrote:
> On x86 memory accesses to pages without the ACCESSED flag set result in the
> ACCESSED flag being set automatically. With the ARM architecture a page access
> fault is raised instead (and it will continue to be raised until the ACCESSED
> flag is set for the appropriate PTE/PMD).
>
> For normal memory pages, handle_pte_fault will call pte_mkyoung (effectively
> setting the ACCESSED flag). For transparent huge pages, pmd_mkyoung will only
> be called for a write fault.
>
> This patch ensures that faults on transparent hugepages which do not result
> in a CoW update the access flags for the faulting pmd.
Confused. Where is the arm implementation of update_mmu_cache_pmd()?
--
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>
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-18 22:05 ` Andrew Morton
0 siblings, 0 replies; 36+ messages in thread
From: Andrew Morton @ 2012-10-18 22:05 UTC (permalink / raw)
To: Will Deacon
Cc: David Miller, linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, mhocko@suse.cz, kirill@shutemov.name,
aarcange@redhat.com, cmetcalf@tilera.com, Steve Capper
On Wed, 17 Oct 2012 16:54:02 +0100
Will Deacon <will.deacon@arm.com> wrote:
> On x86 memory accesses to pages without the ACCESSED flag set result in the
> ACCESSED flag being set automatically. With the ARM architecture a page access
> fault is raised instead (and it will continue to be raised until the ACCESSED
> flag is set for the appropriate PTE/PMD).
>
> For normal memory pages, handle_pte_fault will call pte_mkyoung (effectively
> setting the ACCESSED flag). For transparent huge pages, pmd_mkyoung will only
> be called for a write fault.
>
> This patch ensures that faults on transparent hugepages which do not result
> in a CoW update the access flags for the faulting pmd.
Confused. Where is the arm implementation of update_mmu_cache_pmd()?
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-19 9:10 ` Will Deacon
0 siblings, 0 replies; 36+ messages in thread
From: Will Deacon @ 2012-10-19 9:10 UTC (permalink / raw)
To: Andrew Morton
Cc: David Miller, linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, mhocko@suse.cz, kirill@shutemov.name,
aarcange@redhat.com, cmetcalf@tilera.com, Steve Capper
On Thu, Oct 18, 2012 at 11:05:02PM +0100, Andrew Morton wrote:
> On Wed, 17 Oct 2012 16:54:02 +0100
> Will Deacon <will.deacon@arm.com> wrote:
>
> > On x86 memory accesses to pages without the ACCESSED flag set result in the
> > ACCESSED flag being set automatically. With the ARM architecture a page access
> > fault is raised instead (and it will continue to be raised until the ACCESSED
> > flag is set for the appropriate PTE/PMD).
> >
> > For normal memory pages, handle_pte_fault will call pte_mkyoung (effectively
> > setting the ACCESSED flag). For transparent huge pages, pmd_mkyoung will only
> > be called for a write fault.
> >
> > This patch ensures that faults on transparent hugepages which do not result
> > in a CoW update the access flags for the faulting pmd.
>
> Confused. Where is the arm implementation of update_mmu_cache_pmd()?
Right at the end of this patch, which was posted to the ARM list yesterday:
http://lists.infradead.org/pipermail/linux-arm-kernel/2012-October/126387.html
Cheers,
Will
--
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>
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-19 9:10 ` Will Deacon
0 siblings, 0 replies; 36+ messages in thread
From: Will Deacon @ 2012-10-19 9:10 UTC (permalink / raw)
To: Andrew Morton
Cc: David Miller, linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, mhocko@suse.cz, kirill@shutemov.name,
aarcange@redhat.com, cmetcalf@tilera.com, Steve Capper
On Thu, Oct 18, 2012 at 11:05:02PM +0100, Andrew Morton wrote:
> On Wed, 17 Oct 2012 16:54:02 +0100
> Will Deacon <will.deacon@arm.com> wrote:
>
> > On x86 memory accesses to pages without the ACCESSED flag set result in the
> > ACCESSED flag being set automatically. With the ARM architecture a page access
> > fault is raised instead (and it will continue to be raised until the ACCESSED
> > flag is set for the appropriate PTE/PMD).
> >
> > For normal memory pages, handle_pte_fault will call pte_mkyoung (effectively
> > setting the ACCESSED flag). For transparent huge pages, pmd_mkyoung will only
> > be called for a write fault.
> >
> > This patch ensures that faults on transparent hugepages which do not result
> > in a CoW update the access flags for the faulting pmd.
>
> Confused. Where is the arm implementation of update_mmu_cache_pmd()?
Right at the end of this patch, which was posted to the ARM list yesterday:
http://lists.infradead.org/pipermail/linux-arm-kernel/2012-October/126387.html
Cheers,
Will
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-19 18:49 ` Andrew Morton
0 siblings, 0 replies; 36+ messages in thread
From: Andrew Morton @ 2012-10-19 18:49 UTC (permalink / raw)
To: Will Deacon
Cc: David Miller, linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, mhocko@suse.cz, kirill@shutemov.name,
aarcange@redhat.com, cmetcalf@tilera.com, Steve Capper
On Fri, 19 Oct 2012 10:10:16 +0100
Will Deacon <will.deacon@arm.com> wrote:
> On Thu, Oct 18, 2012 at 11:05:02PM +0100, Andrew Morton wrote:
> > On Wed, 17 Oct 2012 16:54:02 +0100
> > Will Deacon <will.deacon@arm.com> wrote:
> >
> > > On x86 memory accesses to pages without the ACCESSED flag set result in the
> > > ACCESSED flag being set automatically. With the ARM architecture a page access
> > > fault is raised instead (and it will continue to be raised until the ACCESSED
> > > flag is set for the appropriate PTE/PMD).
> > >
> > > For normal memory pages, handle_pte_fault will call pte_mkyoung (effectively
> > > setting the ACCESSED flag). For transparent huge pages, pmd_mkyoung will only
> > > be called for a write fault.
> > >
> > > This patch ensures that faults on transparent hugepages which do not result
> > > in a CoW update the access flags for the faulting pmd.
> >
> > Confused. Where is the arm implementation of update_mmu_cache_pmd()?
>
> Right at the end of this patch, which was posted to the ARM list yesterday:
>
> http://lists.infradead.org/pipermail/linux-arm-kernel/2012-October/126387.html
I received and then merged a patch which won't compile!
Ho hum. I'll drop
mm-thp-set-the-accessed-flag-for-old-pages-on-access-fault.patch and
shall assume that you'll sort things out at the appropriate time.
--
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>
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-19 18:49 ` Andrew Morton
0 siblings, 0 replies; 36+ messages in thread
From: Andrew Morton @ 2012-10-19 18:49 UTC (permalink / raw)
To: Will Deacon
Cc: David Miller, linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, mhocko@suse.cz, kirill@shutemov.name,
aarcange@redhat.com, cmetcalf@tilera.com, Steve Capper
On Fri, 19 Oct 2012 10:10:16 +0100
Will Deacon <will.deacon@arm.com> wrote:
> On Thu, Oct 18, 2012 at 11:05:02PM +0100, Andrew Morton wrote:
> > On Wed, 17 Oct 2012 16:54:02 +0100
> > Will Deacon <will.deacon@arm.com> wrote:
> >
> > > On x86 memory accesses to pages without the ACCESSED flag set result in the
> > > ACCESSED flag being set automatically. With the ARM architecture a page access
> > > fault is raised instead (and it will continue to be raised until the ACCESSED
> > > flag is set for the appropriate PTE/PMD).
> > >
> > > For normal memory pages, handle_pte_fault will call pte_mkyoung (effectively
> > > setting the ACCESSED flag). For transparent huge pages, pmd_mkyoung will only
> > > be called for a write fault.
> > >
> > > This patch ensures that faults on transparent hugepages which do not result
> > > in a CoW update the access flags for the faulting pmd.
> >
> > Confused. Where is the arm implementation of update_mmu_cache_pmd()?
>
> Right at the end of this patch, which was posted to the ARM list yesterday:
>
> http://lists.infradead.org/pipermail/linux-arm-kernel/2012-October/126387.html
I received and then merged a patch which won't compile!
Ho hum. I'll drop
mm-thp-set-the-accessed-flag-for-old-pages-on-access-fault.patch and
shall assume that you'll sort things out at the appropriate time.
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-22 10:35 ` Will Deacon
0 siblings, 0 replies; 36+ messages in thread
From: Will Deacon @ 2012-10-22 10:35 UTC (permalink / raw)
To: Andrew Morton
Cc: David Miller, linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, mhocko@suse.cz, kirill@shutemov.name,
aarcange@redhat.com, cmetcalf@tilera.com, Steve Capper
On Fri, Oct 19, 2012 at 07:49:55PM +0100, Andrew Morton wrote:
> On Fri, 19 Oct 2012 10:10:16 +0100
> Will Deacon <will.deacon@arm.com> wrote:
>
> > On Thu, Oct 18, 2012 at 11:05:02PM +0100, Andrew Morton wrote:
> > > On Wed, 17 Oct 2012 16:54:02 +0100
> > > Will Deacon <will.deacon@arm.com> wrote:
> > >
> > > > On x86 memory accesses to pages without the ACCESSED flag set result in the
> > > > ACCESSED flag being set automatically. With the ARM architecture a page access
> > > > fault is raised instead (and it will continue to be raised until the ACCESSED
> > > > flag is set for the appropriate PTE/PMD).
> > > >
> > > > For normal memory pages, handle_pte_fault will call pte_mkyoung (effectively
> > > > setting the ACCESSED flag). For transparent huge pages, pmd_mkyoung will only
> > > > be called for a write fault.
> > > >
> > > > This patch ensures that faults on transparent hugepages which do not result
> > > > in a CoW update the access flags for the faulting pmd.
> > >
> > > Confused. Where is the arm implementation of update_mmu_cache_pmd()?
> >
> > Right at the end of this patch, which was posted to the ARM list yesterday:
> >
> > http://lists.infradead.org/pipermail/linux-arm-kernel/2012-October/126387.html
>
> I received and then merged a patch which won't compile!
Eek, that certainly wasn't intentional and it's compiling fine for me on
-rc1 and -rc2 for both ARM (no THP) and x86 (with and without THP).
Please can you send the build failure?
> Ho hum. I'll drop
> mm-thp-set-the-accessed-flag-for-old-pages-on-access-fault.patch and
> shall assume that you'll sort things out at the appropriate time.
Happy to sort it out once I work out what's going wrong!
Cheers,
Will
--
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>
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-22 10:35 ` Will Deacon
0 siblings, 0 replies; 36+ messages in thread
From: Will Deacon @ 2012-10-22 10:35 UTC (permalink / raw)
To: Andrew Morton
Cc: David Miller, linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, mhocko@suse.cz, kirill@shutemov.name,
aarcange@redhat.com, cmetcalf@tilera.com, Steve Capper
On Fri, Oct 19, 2012 at 07:49:55PM +0100, Andrew Morton wrote:
> On Fri, 19 Oct 2012 10:10:16 +0100
> Will Deacon <will.deacon@arm.com> wrote:
>
> > On Thu, Oct 18, 2012 at 11:05:02PM +0100, Andrew Morton wrote:
> > > On Wed, 17 Oct 2012 16:54:02 +0100
> > > Will Deacon <will.deacon@arm.com> wrote:
> > >
> > > > On x86 memory accesses to pages without the ACCESSED flag set result in the
> > > > ACCESSED flag being set automatically. With the ARM architecture a page access
> > > > fault is raised instead (and it will continue to be raised until the ACCESSED
> > > > flag is set for the appropriate PTE/PMD).
> > > >
> > > > For normal memory pages, handle_pte_fault will call pte_mkyoung (effectively
> > > > setting the ACCESSED flag). For transparent huge pages, pmd_mkyoung will only
> > > > be called for a write fault.
> > > >
> > > > This patch ensures that faults on transparent hugepages which do not result
> > > > in a CoW update the access flags for the faulting pmd.
> > >
> > > Confused. Where is the arm implementation of update_mmu_cache_pmd()?
> >
> > Right at the end of this patch, which was posted to the ARM list yesterday:
> >
> > http://lists.infradead.org/pipermail/linux-arm-kernel/2012-October/126387.html
>
> I received and then merged a patch which won't compile!
Eek, that certainly wasn't intentional and it's compiling fine for me on
-rc1 and -rc2 for both ARM (no THP) and x86 (with and without THP).
Please can you send the build failure?
> Ho hum. I'll drop
> mm-thp-set-the-accessed-flag-for-old-pages-on-access-fault.patch and
> shall assume that you'll sort things out at the appropriate time.
Happy to sort it out once I work out what's going wrong!
Cheers,
Will
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
2012-10-22 10:35 ` Will Deacon
@ 2012-10-22 18:18 ` Andrew Morton
-1 siblings, 0 replies; 36+ messages in thread
From: Andrew Morton @ 2012-10-22 18:18 UTC (permalink / raw)
To: Will Deacon
Cc: David Miller, linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, mhocko@suse.cz, kirill@shutemov.name,
aarcange@redhat.com, cmetcalf@tilera.com, Steve Capper
On Mon, 22 Oct 2012 11:35:03 +0100
Will Deacon <will.deacon@arm.com> wrote:
> On Fri, Oct 19, 2012 at 07:49:55PM +0100, Andrew Morton wrote:
> > On Fri, 19 Oct 2012 10:10:16 +0100
> > Will Deacon <will.deacon@arm.com> wrote:
> >
> > > On Thu, Oct 18, 2012 at 11:05:02PM +0100, Andrew Morton wrote:
> > > > On Wed, 17 Oct 2012 16:54:02 +0100
> > > > Will Deacon <will.deacon@arm.com> wrote:
> > > >
> > > > > On x86 memory accesses to pages without the ACCESSED flag set result in the
> > > > > ACCESSED flag being set automatically. With the ARM architecture a page access
> > > > > fault is raised instead (and it will continue to be raised until the ACCESSED
> > > > > flag is set for the appropriate PTE/PMD).
> > > > >
> > > > > For normal memory pages, handle_pte_fault will call pte_mkyoung (effectively
> > > > > setting the ACCESSED flag). For transparent huge pages, pmd_mkyoung will only
> > > > > be called for a write fault.
> > > > >
> > > > > This patch ensures that faults on transparent hugepages which do not result
> > > > > in a CoW update the access flags for the faulting pmd.
> > > >
> > > > Confused. Where is the arm implementation of update_mmu_cache_pmd()?
> > >
> > > Right at the end of this patch, which was posted to the ARM list yesterday:
> > >
> > > http://lists.infradead.org/pipermail/linux-arm-kernel/2012-October/126387.html
> >
> > I received and then merged a patch which won't compile!
>
> Eek, that certainly wasn't intentional and it's compiling fine for me on
> -rc1 and -rc2 for both ARM (no THP) and x86 (with and without THP).
>
> Please can you send the build failure?
>
> > Ho hum. I'll drop
> > mm-thp-set-the-accessed-flag-for-old-pages-on-access-fault.patch and
> > shall assume that you'll sort things out at the appropriate time.
>
> Happy to sort it out once I work out what's going wrong!
The patch "ARM: mm: Transparent huge page support for LPAE systems" is
not present in linux-next, so this patch ("mm: thp: Set the accessed
flag for old pages on access fault") will not compile?
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-22 18:18 ` Andrew Morton
0 siblings, 0 replies; 36+ messages in thread
From: Andrew Morton @ 2012-10-22 18:18 UTC (permalink / raw)
To: Will Deacon
Cc: David Miller, linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, mhocko@suse.cz, kirill@shutemov.name,
aarcange@redhat.com, cmetcalf@tilera.com, Steve Capper
On Mon, 22 Oct 2012 11:35:03 +0100
Will Deacon <will.deacon@arm.com> wrote:
> On Fri, Oct 19, 2012 at 07:49:55PM +0100, Andrew Morton wrote:
> > On Fri, 19 Oct 2012 10:10:16 +0100
> > Will Deacon <will.deacon@arm.com> wrote:
> >
> > > On Thu, Oct 18, 2012 at 11:05:02PM +0100, Andrew Morton wrote:
> > > > On Wed, 17 Oct 2012 16:54:02 +0100
> > > > Will Deacon <will.deacon@arm.com> wrote:
> > > >
> > > > > On x86 memory accesses to pages without the ACCESSED flag set result in the
> > > > > ACCESSED flag being set automatically. With the ARM architecture a page access
> > > > > fault is raised instead (and it will continue to be raised until the ACCESSED
> > > > > flag is set for the appropriate PTE/PMD).
> > > > >
> > > > > For normal memory pages, handle_pte_fault will call pte_mkyoung (effectively
> > > > > setting the ACCESSED flag). For transparent huge pages, pmd_mkyoung will only
> > > > > be called for a write fault.
> > > > >
> > > > > This patch ensures that faults on transparent hugepages which do not result
> > > > > in a CoW update the access flags for the faulting pmd.
> > > >
> > > > Confused. Where is the arm implementation of update_mmu_cache_pmd()?
> > >
> > > Right at the end of this patch, which was posted to the ARM list yesterday:
> > >
> > > http://lists.infradead.org/pipermail/linux-arm-kernel/2012-October/126387.html
> >
> > I received and then merged a patch which won't compile!
>
> Eek, that certainly wasn't intentional and it's compiling fine for me on
> -rc1 and -rc2 for both ARM (no THP) and x86 (with and without THP).
>
> Please can you send the build failure?
>
> > Ho hum. I'll drop
> > mm-thp-set-the-accessed-flag-for-old-pages-on-access-fault.patch and
> > shall assume that you'll sort things out at the appropriate time.
>
> Happy to sort it out once I work out what's going wrong!
The patch "ARM: mm: Transparent huge page support for LPAE systems" is
not present in linux-next, so this patch ("mm: thp: Set the accessed
flag for old pages on access fault") will not compile?
--
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>
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-23 10:11 ` Will Deacon
0 siblings, 0 replies; 36+ messages in thread
From: Will Deacon @ 2012-10-23 10:11 UTC (permalink / raw)
To: Andrew Morton
Cc: David Miller, linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, mhocko@suse.cz, kirill@shutemov.name,
aarcange@redhat.com, cmetcalf@tilera.com, Steve Capper
On Mon, Oct 22, 2012 at 07:18:43PM +0100, Andrew Morton wrote:
> On Mon, 22 Oct 2012 11:35:03 +0100
> Will Deacon <will.deacon@arm.com> wrote:
>
> > On Fri, Oct 19, 2012 at 07:49:55PM +0100, Andrew Morton wrote:
> > > Ho hum. I'll drop
> > > mm-thp-set-the-accessed-flag-for-old-pages-on-access-fault.patch and
> > > shall assume that you'll sort things out at the appropriate time.
> >
> > Happy to sort it out once I work out what's going wrong!
>
> The patch "ARM: mm: Transparent huge page support for LPAE systems" is
> not present in linux-next, so this patch ("mm: thp: Set the accessed
> flag for old pages on access fault") will not compile?
This patch ("mm: thp: Set the accessed flag for old pages on access fault")
doesn't depend on "ARM: mm: Transparent huge page support for LPAE systems"
because currently transparent huge pages cannot be enabled for ARM in
mainline (or linux-next). update_mmu_cache_pmd is only called from
mm/huge_memory.c, which depends on CONFIG_TRANSPARENT_HUGEPAGE=y.
As for the new huge_pmd_set_accessed function... there's a similar situation
for the do_huge_pmd_wp_page function: it's called from mm/memory.c but is
only defined in mm/huge_memory.c. Looks like the compiler optimises those
calls away because pmd_trans_huge and friends constant-fold to 0.
Will
--
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>
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-23 10:11 ` Will Deacon
0 siblings, 0 replies; 36+ messages in thread
From: Will Deacon @ 2012-10-23 10:11 UTC (permalink / raw)
To: Andrew Morton
Cc: David Miller, linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, mhocko@suse.cz, kirill@shutemov.name,
aarcange@redhat.com, cmetcalf@tilera.com, Steve Capper
On Mon, Oct 22, 2012 at 07:18:43PM +0100, Andrew Morton wrote:
> On Mon, 22 Oct 2012 11:35:03 +0100
> Will Deacon <will.deacon@arm.com> wrote:
>
> > On Fri, Oct 19, 2012 at 07:49:55PM +0100, Andrew Morton wrote:
> > > Ho hum. I'll drop
> > > mm-thp-set-the-accessed-flag-for-old-pages-on-access-fault.patch and
> > > shall assume that you'll sort things out at the appropriate time.
> >
> > Happy to sort it out once I work out what's going wrong!
>
> The patch "ARM: mm: Transparent huge page support for LPAE systems" is
> not present in linux-next, so this patch ("mm: thp: Set the accessed
> flag for old pages on access fault") will not compile?
This patch ("mm: thp: Set the accessed flag for old pages on access fault")
doesn't depend on "ARM: mm: Transparent huge page support for LPAE systems"
because currently transparent huge pages cannot be enabled for ARM in
mainline (or linux-next). update_mmu_cache_pmd is only called from
mm/huge_memory.c, which depends on CONFIG_TRANSPARENT_HUGEPAGE=y.
As for the new huge_pmd_set_accessed function... there's a similar situation
for the do_huge_pmd_wp_page function: it's called from mm/memory.c but is
only defined in mm/huge_memory.c. Looks like the compiler optimises those
calls away because pmd_trans_huge and friends constant-fold to 0.
Will
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
2012-10-23 10:11 ` Will Deacon
@ 2012-10-23 21:50 ` Andrew Morton
-1 siblings, 0 replies; 36+ messages in thread
From: Andrew Morton @ 2012-10-23 21:50 UTC (permalink / raw)
To: Will Deacon
Cc: David Miller, linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, mhocko@suse.cz, kirill@shutemov.name,
aarcange@redhat.com, cmetcalf@tilera.com, Steve Capper
On Tue, 23 Oct 2012 11:11:25 +0100
Will Deacon <will.deacon@arm.com> wrote:
> On Mon, Oct 22, 2012 at 07:18:43PM +0100, Andrew Morton wrote:
> > On Mon, 22 Oct 2012 11:35:03 +0100
> > Will Deacon <will.deacon@arm.com> wrote:
> >
> > > On Fri, Oct 19, 2012 at 07:49:55PM +0100, Andrew Morton wrote:
> > > > Ho hum. I'll drop
> > > > mm-thp-set-the-accessed-flag-for-old-pages-on-access-fault.patch and
> > > > shall assume that you'll sort things out at the appropriate time.
> > >
> > > Happy to sort it out once I work out what's going wrong!
> >
> > The patch "ARM: mm: Transparent huge page support for LPAE systems" is
> > not present in linux-next, so this patch ("mm: thp: Set the accessed
> > flag for old pages on access fault") will not compile?
>
> This patch ("mm: thp: Set the accessed flag for old pages on access fault")
> doesn't depend on "ARM: mm: Transparent huge page support for LPAE systems"
> because currently transparent huge pages cannot be enabled for ARM in
> mainline (or linux-next). update_mmu_cache_pmd is only called from
> mm/huge_memory.c, which depends on CONFIG_TRANSPARENT_HUGEPAGE=y.
>
> As for the new huge_pmd_set_accessed function... there's a similar situation
> for the do_huge_pmd_wp_page function: it's called from mm/memory.c but is
> only defined in mm/huge_memory.c. Looks like the compiler optimises those
> calls away because pmd_trans_huge and friends constant-fold to 0.
Ah, OK.
"mm: thp: Set the accessed flag for old pages on access fault" clashes
in a non-trivial way with linux-next changes, due to the sched-numa
changes (sigh). This is a problem for me, because I either need to
significantly alter your patch (so it isn't applicable to mainline) or
I need to stage your patch ahead of linux-next, then fix up linux-next
every day after I've pulled and re-merged it.
I'm unsure what your timing is. Can you carry "mm: thp: Set the
accessed flag for old pages on access fault" until either the whole
patchset is ready to merge or until the sched-numa situation has been
cleared up?
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-23 21:50 ` Andrew Morton
0 siblings, 0 replies; 36+ messages in thread
From: Andrew Morton @ 2012-10-23 21:50 UTC (permalink / raw)
To: Will Deacon
Cc: David Miller, linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, mhocko@suse.cz, kirill@shutemov.name,
aarcange@redhat.com, cmetcalf@tilera.com, Steve Capper
On Tue, 23 Oct 2012 11:11:25 +0100
Will Deacon <will.deacon@arm.com> wrote:
> On Mon, Oct 22, 2012 at 07:18:43PM +0100, Andrew Morton wrote:
> > On Mon, 22 Oct 2012 11:35:03 +0100
> > Will Deacon <will.deacon@arm.com> wrote:
> >
> > > On Fri, Oct 19, 2012 at 07:49:55PM +0100, Andrew Morton wrote:
> > > > Ho hum. I'll drop
> > > > mm-thp-set-the-accessed-flag-for-old-pages-on-access-fault.patch and
> > > > shall assume that you'll sort things out at the appropriate time.
> > >
> > > Happy to sort it out once I work out what's going wrong!
> >
> > The patch "ARM: mm: Transparent huge page support for LPAE systems" is
> > not present in linux-next, so this patch ("mm: thp: Set the accessed
> > flag for old pages on access fault") will not compile?
>
> This patch ("mm: thp: Set the accessed flag for old pages on access fault")
> doesn't depend on "ARM: mm: Transparent huge page support for LPAE systems"
> because currently transparent huge pages cannot be enabled for ARM in
> mainline (or linux-next). update_mmu_cache_pmd is only called from
> mm/huge_memory.c, which depends on CONFIG_TRANSPARENT_HUGEPAGE=y.
>
> As for the new huge_pmd_set_accessed function... there's a similar situation
> for the do_huge_pmd_wp_page function: it's called from mm/memory.c but is
> only defined in mm/huge_memory.c. Looks like the compiler optimises those
> calls away because pmd_trans_huge and friends constant-fold to 0.
Ah, OK.
"mm: thp: Set the accessed flag for old pages on access fault" clashes
in a non-trivial way with linux-next changes, due to the sched-numa
changes (sigh). This is a problem for me, because I either need to
significantly alter your patch (so it isn't applicable to mainline) or
I need to stage your patch ahead of linux-next, then fix up linux-next
every day after I've pulled and re-merged it.
I'm unsure what your timing is. Can you carry "mm: thp: Set the
accessed flag for old pages on access fault" until either the whole
patchset is ready to merge or until the sched-numa situation has been
cleared up?
--
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>
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-24 9:35 ` Will Deacon
0 siblings, 0 replies; 36+ messages in thread
From: Will Deacon @ 2012-10-24 9:35 UTC (permalink / raw)
To: Andrew Morton
Cc: David Miller, linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, mhocko@suse.cz, kirill@shutemov.name,
aarcange@redhat.com, cmetcalf@tilera.com, Steve Capper
On Tue, Oct 23, 2012 at 10:50:27PM +0100, Andrew Morton wrote:
> On Tue, 23 Oct 2012 11:11:25 +0100
> Will Deacon <will.deacon@arm.com> wrote:
> > This patch ("mm: thp: Set the accessed flag for old pages on access fault")
> > doesn't depend on "ARM: mm: Transparent huge page support for LPAE systems"
> > because currently transparent huge pages cannot be enabled for ARM in
> > mainline (or linux-next). update_mmu_cache_pmd is only called from
> > mm/huge_memory.c, which depends on CONFIG_TRANSPARENT_HUGEPAGE=y.
> >
> > As for the new huge_pmd_set_accessed function... there's a similar situation
> > for the do_huge_pmd_wp_page function: it's called from mm/memory.c but is
> > only defined in mm/huge_memory.c. Looks like the compiler optimises those
> > calls away because pmd_trans_huge and friends constant-fold to 0.
>
> Ah, OK.
>
> "mm: thp: Set the accessed flag for old pages on access fault" clashes
> in a non-trivial way with linux-next changes, due to the sched-numa
> changes (sigh). This is a problem for me, because I either need to
> significantly alter your patch (so it isn't applicable to mainline) or
> I need to stage your patch ahead of linux-next, then fix up linux-next
> every day after I've pulled and re-merged it.
>
> I'm unsure what your timing is. Can you carry "mm: thp: Set the
> accessed flag for old pages on access fault" until either the whole
> patchset is ready to merge or until the sched-numa situation has been
> cleared up?
I think DaveM may want this patch for sparc, so I'll keep it separate from
the ARM patches and have a go at reworking it when the sched-numa stuff has
settled down. Is that all in linux-next btw? If so, I can use that as a
starting point to dealing with the mess.
Cheers,
Will
--
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>
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH v2] mm: thp: Set the accessed flag for old pages on access fault.
@ 2012-10-24 9:35 ` Will Deacon
0 siblings, 0 replies; 36+ messages in thread
From: Will Deacon @ 2012-10-24 9:35 UTC (permalink / raw)
To: Andrew Morton
Cc: David Miller, linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, mhocko@suse.cz, kirill@shutemov.name,
aarcange@redhat.com, cmetcalf@tilera.com, Steve Capper
On Tue, Oct 23, 2012 at 10:50:27PM +0100, Andrew Morton wrote:
> On Tue, 23 Oct 2012 11:11:25 +0100
> Will Deacon <will.deacon@arm.com> wrote:
> > This patch ("mm: thp: Set the accessed flag for old pages on access fault")
> > doesn't depend on "ARM: mm: Transparent huge page support for LPAE systems"
> > because currently transparent huge pages cannot be enabled for ARM in
> > mainline (or linux-next). update_mmu_cache_pmd is only called from
> > mm/huge_memory.c, which depends on CONFIG_TRANSPARENT_HUGEPAGE=y.
> >
> > As for the new huge_pmd_set_accessed function... there's a similar situation
> > for the do_huge_pmd_wp_page function: it's called from mm/memory.c but is
> > only defined in mm/huge_memory.c. Looks like the compiler optimises those
> > calls away because pmd_trans_huge and friends constant-fold to 0.
>
> Ah, OK.
>
> "mm: thp: Set the accessed flag for old pages on access fault" clashes
> in a non-trivial way with linux-next changes, due to the sched-numa
> changes (sigh). This is a problem for me, because I either need to
> significantly alter your patch (so it isn't applicable to mainline) or
> I need to stage your patch ahead of linux-next, then fix up linux-next
> every day after I've pulled and re-merged it.
>
> I'm unsure what your timing is. Can you carry "mm: thp: Set the
> accessed flag for old pages on access fault" until either the whole
> patchset is ready to merge or until the sched-numa situation has been
> cleared up?
I think DaveM may want this patch for sparc, so I'll keep it separate from
the ARM patches and have a go at reworking it when the sched-numa stuff has
settled down. Is that all in linux-next btw? If so, I can use that as a
starting point to dealing with the mess.
Cheers,
Will
^ permalink raw reply [flat|nested] 36+ messages in thread