From: Minchan Kim <minchan@kernel.org>
To: Steve Capper <steve.capper@linaro.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Michael Kerrisk <mtk.manpages@gmail.com>,
Linux API <linux-api@vger.kernel.org>,
Hugh Dickins <hughd@google.com>,
Johannes Weiner <hannes@cmpxchg.org>,
Rik van Riel <riel@redhat.com>,
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
Mel Gorman <mgorman@suse.de>, Jason Evans <je@fb.com>,
Zhang Yanfei <zhangyanfei@cn.fujitsu.com>,
"Kirill A. Shutemov" <kirill@shutemov.name>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will.deacon@arm.com>,
Russell King <linux@arm.linux.org.uk>,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v10 6/7] ARM: add pmd_[dirty|mkclean] for THP
Date: Tue, 8 Jul 2014 10:09:36 +0900 [thread overview]
Message-ID: <20140708010936.GC6076@bbox> (raw)
In-Reply-To: <20140707092247.GA15168@linaro.org>
[-- Attachment #1: Type: text/plain, Size: 3346 bytes --]
On Mon, Jul 07, 2014 at 10:22:48AM +0100, Steve Capper wrote:
> On Mon, Jul 07, 2014 at 09:53:57AM +0900, Minchan Kim wrote:
> > MADV_FREE needs pmd_dirty and pmd_mkclean for detecting recent
> > overwrite of the contents since MADV_FREE syscall is called for
> > THP page.
> >
> > This patch adds pmd_dirty and pmd_mkclean for THP page MADV_FREE
> > support.
> >
> > Cc: Catalin Marinas <catalin.marinas@arm.com>
> > Cc: Will Deacon <will.deacon@arm.com>
> > Cc: Steve Capper <steve.capper@linaro.org>
> > Cc: Russell King <linux@arm.linux.org.uk>
> > Cc: linux-arm-kernel@lists.infradead.org
> > Signed-off-by: Minchan Kim <minchan@kernel.org>
> > ---
> > arch/arm64/include/asm/pgtable.h | 2 ++
> > 1 file changed, 2 insertions(+)
> >
> > diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
> > index 579702086488..f3ec01cef04f 100644
> > --- a/arch/arm64/include/asm/pgtable.h
> > +++ b/arch/arm64/include/asm/pgtable.h
> > @@ -240,10 +240,12 @@ static inline pmd_t pte_pmd(pte_t pte)
> > #endif
> >
> > #define pmd_young(pmd) pte_young(pmd_pte(pmd))
> > +#define pmd_dirty(pmd) pte_dirty(pmd_pte(pmd))
> > #define pmd_wrprotect(pmd) pte_pmd(pte_wrprotect(pmd_pte(pmd)))
> > #define pmd_mksplitting(pmd) pte_pmd(pte_mkspecial(pmd_pte(pmd)))
> > #define pmd_mkold(pmd) pte_pmd(pte_mkold(pmd_pte(pmd)))
> > #define pmd_mkwrite(pmd) pte_pmd(pte_mkwrite(pmd_pte(pmd)))
> > +#define pmd_mkclean(pmd) pte_pmd(pte_mkclean(pmd_pte(pmd)))
> > #define pmd_mkdirty(pmd) pte_pmd(pte_mkdirty(pmd_pte(pmd)))
> > #define pmd_mkyoung(pmd) pte_pmd(pte_mkyoung(pmd_pte(pmd)))
> > #define pmd_mknotpresent(pmd) (__pmd(pmd_val(pmd) & ~PMD_TYPE_MASK))
> > --
> > 2.0.0
> >
>
> Hi Minchan,
Hello Steve and Will,
>
> This looks good to me too.
> As Will said this applies to arm64, we will also need a version for:
> arch/arm/include/asm/pgtable-3level.h.
Does it work?
diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h
index 85c60adc8b60..3a7bb8dc7d05 100644
--- a/arch/arm/include/asm/pgtable-3level.h
+++ b/arch/arm/include/asm/pgtable-3level.h
@@ -220,6 +220,8 @@ static inline pmd_t *pmd_offset(pud_t *pud, unsigned long addr)
#define pmd_trans_splitting(pmd) (pmd_val(pmd) & PMD_SECT_SPLITTING)
#endif
+#define pmd_dirty (pmd_val(pmd) & PMD_SECT_DIRTY)
+
#define PMD_BIT_FUNC(fn,op) \
static inline pmd_t pmd_##fn(pmd_t pmd) { pmd_val(pmd) op; return pmd; }
@@ -228,6 +230,7 @@ PMD_BIT_FUNC(mkold, &= ~PMD_SECT_AF);
PMD_BIT_FUNC(mksplitting, |= PMD_SECT_SPLITTING);
PMD_BIT_FUNC(mkwrite, &= ~PMD_SECT_RDONLY);
PMD_BIT_FUNC(mkdirty, |= PMD_SECT_DIRTY);
+PMD_BIT_FUNC(mkclean, &= ~PMD_SECT_DIRTY);
PMD_BIT_FUNC(mkyoung, |= PMD_SECT_AF);
#define pmd_mkhuge(pmd) (__pmd(pmd_val(pmd) & ~PMD_TABLE_BIT))
--
2.0.0
>
> Is there a testcase we can run to check that this patch set is working
> well for arm/arm64?
I just run several instance of attached simple stress with heavy kernel
build in parallel on 1G RAM machine.
Thanks for the review!
>
> Cheers,
> --
> Steve
>
> --
> 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>
--
Kind regards,
Minchan Kim
[-- Attachment #2: thp_alloc.c --]
[-- Type: text/x-csrc, Size: 1328 bytes --]
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>
#define CHUNK_SIZE (20<<20)
#define SLEEP_TIME_SEC 2
#define NUM_THREAD 12
#define QUIT 1000
int quit;
void alloc_thp()
{
int i;
int ret;
char *ptr;
/* should be aligned with 2M which is THP page size */
ret = posix_memalign((void**)&ptr, 2<<20, CHUNK_SIZE);
if (ret) {
fprintf(stderr, "fail to allocate\n");
return;
}
memset(ptr, 'a', CHUNK_SIZE);
ret = madvise(ptr, CHUNK_SIZE, 5);
if (ret) {
perror("fail to madvise");
return;
}
sleep(SLEEP_TIME_SEC);
memset(ptr, 'b', CHUNK_SIZE);
sleep(SLEEP_TIME_SEC);
for (i = 0; i < CHUNK_SIZE; i++) {
if (ptr[i] != 'b') {
fprintf(stderr, "fail to verify\n");
fprintf(stderr, "Something wrong\n");
return;
}
}
free(ptr);
}
void *thread_alloc(void *priv)
{
int n = 0;
while(!quit) {
alloc_thp();
if (!(n++ % 5))
printf("I'm working\n");
if (n == QUIT)
return;
}
}
int main()
{
int i, ret;
pthread_t thread[NUM_THREAD];
for (i = 0; i < NUM_THREAD; i++) {
ret = pthread_create(&thread[i], NULL, thread_alloc, NULL);
if (ret) {
perror("fail to create thread\n");
return 1;
}
}
scanf("%d", &quit);
for (i = 0; i < NUM_THREAD; i++)
pthread_join(thread[i], NULL);
printf("Test Done\n");
return 0;
}
WARNING: multiple messages have this Message-ID (diff)
From: minchan@kernel.org (Minchan Kim)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v10 6/7] ARM: add pmd_[dirty|mkclean] for THP
Date: Tue, 8 Jul 2014 10:09:36 +0900 [thread overview]
Message-ID: <20140708010936.GC6076@bbox> (raw)
In-Reply-To: <20140707092247.GA15168@linaro.org>
On Mon, Jul 07, 2014 at 10:22:48AM +0100, Steve Capper wrote:
> On Mon, Jul 07, 2014 at 09:53:57AM +0900, Minchan Kim wrote:
> > MADV_FREE needs pmd_dirty and pmd_mkclean for detecting recent
> > overwrite of the contents since MADV_FREE syscall is called for
> > THP page.
> >
> > This patch adds pmd_dirty and pmd_mkclean for THP page MADV_FREE
> > support.
> >
> > Cc: Catalin Marinas <catalin.marinas@arm.com>
> > Cc: Will Deacon <will.deacon@arm.com>
> > Cc: Steve Capper <steve.capper@linaro.org>
> > Cc: Russell King <linux@arm.linux.org.uk>
> > Cc: linux-arm-kernel at lists.infradead.org
> > Signed-off-by: Minchan Kim <minchan@kernel.org>
> > ---
> > arch/arm64/include/asm/pgtable.h | 2 ++
> > 1 file changed, 2 insertions(+)
> >
> > diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
> > index 579702086488..f3ec01cef04f 100644
> > --- a/arch/arm64/include/asm/pgtable.h
> > +++ b/arch/arm64/include/asm/pgtable.h
> > @@ -240,10 +240,12 @@ static inline pmd_t pte_pmd(pte_t pte)
> > #endif
> >
> > #define pmd_young(pmd) pte_young(pmd_pte(pmd))
> > +#define pmd_dirty(pmd) pte_dirty(pmd_pte(pmd))
> > #define pmd_wrprotect(pmd) pte_pmd(pte_wrprotect(pmd_pte(pmd)))
> > #define pmd_mksplitting(pmd) pte_pmd(pte_mkspecial(pmd_pte(pmd)))
> > #define pmd_mkold(pmd) pte_pmd(pte_mkold(pmd_pte(pmd)))
> > #define pmd_mkwrite(pmd) pte_pmd(pte_mkwrite(pmd_pte(pmd)))
> > +#define pmd_mkclean(pmd) pte_pmd(pte_mkclean(pmd_pte(pmd)))
> > #define pmd_mkdirty(pmd) pte_pmd(pte_mkdirty(pmd_pte(pmd)))
> > #define pmd_mkyoung(pmd) pte_pmd(pte_mkyoung(pmd_pte(pmd)))
> > #define pmd_mknotpresent(pmd) (__pmd(pmd_val(pmd) & ~PMD_TYPE_MASK))
> > --
> > 2.0.0
> >
>
> Hi Minchan,
Hello Steve and Will,
>
> This looks good to me too.
> As Will said this applies to arm64, we will also need a version for:
> arch/arm/include/asm/pgtable-3level.h.
Does it work?
diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h
index 85c60adc8b60..3a7bb8dc7d05 100644
--- a/arch/arm/include/asm/pgtable-3level.h
+++ b/arch/arm/include/asm/pgtable-3level.h
@@ -220,6 +220,8 @@ static inline pmd_t *pmd_offset(pud_t *pud, unsigned long addr)
#define pmd_trans_splitting(pmd) (pmd_val(pmd) & PMD_SECT_SPLITTING)
#endif
+#define pmd_dirty (pmd_val(pmd) & PMD_SECT_DIRTY)
+
#define PMD_BIT_FUNC(fn,op) \
static inline pmd_t pmd_##fn(pmd_t pmd) { pmd_val(pmd) op; return pmd; }
@@ -228,6 +230,7 @@ PMD_BIT_FUNC(mkold, &= ~PMD_SECT_AF);
PMD_BIT_FUNC(mksplitting, |= PMD_SECT_SPLITTING);
PMD_BIT_FUNC(mkwrite, &= ~PMD_SECT_RDONLY);
PMD_BIT_FUNC(mkdirty, |= PMD_SECT_DIRTY);
+PMD_BIT_FUNC(mkclean, &= ~PMD_SECT_DIRTY);
PMD_BIT_FUNC(mkyoung, |= PMD_SECT_AF);
#define pmd_mkhuge(pmd) (__pmd(pmd_val(pmd) & ~PMD_TABLE_BIT))
--
2.0.0
>
> Is there a testcase we can run to check that this patch set is working
> well for arm/arm64?
I just run several instance of attached simple stress with heavy kernel
build in parallel on 1G RAM machine.
Thanks for the review!
>
> Cheers,
> --
> Steve
>
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo at kvack.org. For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"dont@kvack.org"> email at kvack.org </a>
--
Kind regards,
Minchan Kim
-------------- next part --------------
A non-text attachment was scrubbed...
Name: thp_alloc.c
Type: text/x-csrc
Size: 1328 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140708/db0fab14/attachment.bin>
next prev parent reply other threads:[~2014-07-08 1:09 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-07 0:53 [PATCH v10 0/7] MADV_FREE support Minchan Kim
2014-07-07 0:53 ` Minchan Kim
2014-07-07 0:53 ` Minchan Kim
2014-07-07 0:53 ` [PATCH v10 1/7] mm: support madvise(MADV_FREE) Minchan Kim
2014-07-07 0:53 ` Minchan Kim
2014-07-07 10:41 ` Kirill A. Shutemov
2014-07-07 10:41 ` Kirill A. Shutemov
2014-07-08 0:36 ` Minchan Kim
2014-07-08 0:36 ` Minchan Kim
[not found] ` <1404694438-10272-2-git-send-email-minchan-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2014-07-08 3:54 ` Zhang Yanfei
2014-07-08 3:54 ` Zhang Yanfei
2014-07-08 3:54 ` Zhang Yanfei
[not found] ` <53BB6B64.1080807-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2014-07-08 4:45 ` Minchan Kim
2014-07-08 4:45 ` Minchan Kim
2014-07-08 4:45 ` Minchan Kim
2014-07-07 0:53 ` [PATCH v10 2/7] x86: add pmd_[dirty|mkclean] for THP Minchan Kim
2014-07-07 0:53 ` Minchan Kim
2014-07-07 10:44 ` Kirill A. Shutemov
2014-07-07 10:44 ` Kirill A. Shutemov
2014-07-07 0:53 ` [PATCH v10 3/7] sparc: " Minchan Kim
2014-07-07 0:53 ` Minchan Kim
2014-07-07 0:53 ` Minchan Kim
2014-07-07 0:53 ` [PATCH v10 4/7] powerpc: " Minchan Kim
2014-07-07 0:53 ` Minchan Kim
2014-07-07 0:53 ` Minchan Kim
2014-07-07 0:53 ` [PATCH v10 5/7] s390: " Minchan Kim
2014-07-07 0:53 ` Minchan Kim
[not found] ` <1404694438-10272-6-git-send-email-minchan-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2014-07-07 15:31 ` Gerald Schaefer
2014-07-07 15:31 ` Gerald Schaefer
2014-07-07 15:31 ` Gerald Schaefer
2014-07-07 0:53 ` [PATCH v10 6/7] ARM: " Minchan Kim
2014-07-07 0:53 ` Minchan Kim
2014-07-07 0:53 ` Minchan Kim
[not found] ` <1404694438-10272-7-git-send-email-minchan-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2014-07-07 9:12 ` Will Deacon
2014-07-07 9:12 ` Will Deacon
2014-07-07 9:12 ` Will Deacon
2014-07-07 9:12 ` Will Deacon
2014-07-07 9:22 ` Steve Capper
2014-07-07 9:22 ` Steve Capper
2014-07-07 9:22 ` Steve Capper
2014-07-07 9:22 ` Steve Capper
2014-07-08 1:09 ` Minchan Kim [this message]
2014-07-08 1:09 ` Minchan Kim
2014-07-07 0:53 ` [PATCH v10 7/7] mm: Don't split THP page when syscall is called Minchan Kim
2014-07-07 0:53 ` Minchan Kim
2014-07-07 11:13 ` Kirill A. Shutemov
2014-07-07 11:13 ` Kirill A. Shutemov
[not found] ` <20140707111303.GC23150-nhfs4B5ZimeFUdmeq17FyvUpdFzICT1y@public.gmane.org>
2014-07-08 1:30 ` Minchan Kim
2014-07-08 1:30 ` Minchan Kim
2014-07-08 1:30 ` Minchan Kim
2014-07-08 6:10 ` Minchan Kim
2014-07-08 6:10 ` Minchan Kim
2014-07-08 6:10 ` Minchan Kim
2014-07-08 9:48 ` Kirill A. Shutemov
2014-07-08 9:48 ` Kirill A. Shutemov
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=20140708010936.GC6076@bbox \
--to=minchan@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=catalin.marinas@arm.com \
--cc=hannes@cmpxchg.org \
--cc=hughd@google.com \
--cc=je@fb.com \
--cc=kirill@shutemov.name \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-api@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux@arm.linux.org.uk \
--cc=mgorman@suse.de \
--cc=mtk.manpages@gmail.com \
--cc=riel@redhat.com \
--cc=steve.capper@linaro.org \
--cc=will.deacon@arm.com \
--cc=zhangyanfei@cn.fujitsu.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.