All of lore.kernel.org
 help / color / mirror / Atom feed
From: Li Xinhai <lixinhai_lxh@126.com>
To: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>,
	linux-mm@kvack.org, akpm@linux-foundation.org
Cc: mpe@ellerman.id.au, linuxppc-dev@lists.ozlabs.org,
	kaleshsingh@google.com, peterz@infradead.org,
	joel@joelfernandes.org
Subject: Re: [RFC PATCH 1/6] selftest/mremap_test: Update the test to handle pagesize other than 4K
Date: Tue, 2 Feb 2021 21:29:00 +0800	[thread overview]
Message-ID: <19298b0c-2db5-3755-722d-74baeb35f1ef@126.com> (raw)
In-Reply-To: <20210202091116.196134-1-aneesh.kumar@linux.ibm.com>

what is the overall purpose of this patch set? maybe need a cover
letter?

On 2/2/21 5:11 PM, Aneesh Kumar K.V wrote:
> Instead of hardcoding 4K page size fetch it using sysconf(). For the performance
> measurements test still assume 2M and 1G are hugepage sizes.
> 
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
> ---
>   tools/testing/selftests/vm/mremap_test.c | 113 ++++++++++++-----------
>   1 file changed, 61 insertions(+), 52 deletions(-)
> 
> diff --git a/tools/testing/selftests/vm/mremap_test.c b/tools/testing/selftests/vm/mremap_test.c
> index 9c391d016922..c9a5461eb786 100644
> --- a/tools/testing/selftests/vm/mremap_test.c
> +++ b/tools/testing/selftests/vm/mremap_test.c
> @@ -45,14 +45,15 @@ enum {
>   	_4MB = 4ULL << 20,
>   	_1GB = 1ULL << 30,
>   	_2GB = 2ULL << 30,
> -	PTE = _4KB,
>   	PMD = _2MB,
>   	PUD = _1GB,
>   };
>   
> +#define PTE page_size
> +
>   #define MAKE_TEST(source_align, destination_align, size,	\
>   		  overlaps, should_fail, test_name)		\
> -{								\
> +(struct test){							\
>   	.name = test_name,					\
>   	.config = {						\
>   		.src_alignment = source_align,			\
> @@ -252,12 +253,17 @@ static int parse_args(int argc, char **argv, unsigned int *threshold_mb,
>   	return 0;
>   }
>   
> +#define MAX_TEST 13
> +#define MAX_PERF_TEST 3
>   int main(int argc, char **argv)
>   {
>   	int failures = 0;
>   	int i, run_perf_tests;
>   	unsigned int threshold_mb = VALIDATION_DEFAULT_THRESHOLD;
>   	unsigned int pattern_seed;
> +	struct test test_cases[MAX_TEST];
> +	struct test perf_test_cases[MAX_PERF_TEST];
> +	int page_size;
>   	time_t t;
>   
>   	pattern_seed = (unsigned int) time(&t);
> @@ -268,56 +274,59 @@ int main(int argc, char **argv)
>   	ksft_print_msg("Test configs:\n\tthreshold_mb=%u\n\tpattern_seed=%u\n\n",
>   		       threshold_mb, pattern_seed);
>   
> -	struct test test_cases[] = {
> -		/* Expected mremap failures */
> -		MAKE_TEST(_4KB, _4KB, _4KB, OVERLAPPING, EXPECT_FAILURE,
> -		  "mremap - Source and Destination Regions Overlapping"),
> -		MAKE_TEST(_4KB, _1KB, _4KB, NON_OVERLAPPING, EXPECT_FAILURE,
> -		  "mremap - Destination Address Misaligned (1KB-aligned)"),
> -		MAKE_TEST(_1KB, _4KB, _4KB, NON_OVERLAPPING, EXPECT_FAILURE,
> -		  "mremap - Source Address Misaligned (1KB-aligned)"),
> -
> -		/* Src addr PTE aligned */
> -		MAKE_TEST(PTE, PTE, _8KB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "8KB mremap - Source PTE-aligned, Destination PTE-aligned"),
> -
> -		/* Src addr 1MB aligned */
> -		MAKE_TEST(_1MB, PTE, _2MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "2MB mremap - Source 1MB-aligned, Destination PTE-aligned"),
> -		MAKE_TEST(_1MB, _1MB, _2MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "2MB mremap - Source 1MB-aligned, Destination 1MB-aligned"),
> -
> -		/* Src addr PMD aligned */
> -		MAKE_TEST(PMD, PTE, _4MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "4MB mremap - Source PMD-aligned, Destination PTE-aligned"),
> -		MAKE_TEST(PMD, _1MB, _4MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "4MB mremap - Source PMD-aligned, Destination 1MB-aligned"),
> -		MAKE_TEST(PMD, PMD, _4MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "4MB mremap - Source PMD-aligned, Destination PMD-aligned"),
> -
> -		/* Src addr PUD aligned */
> -		MAKE_TEST(PUD, PTE, _2GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "2GB mremap - Source PUD-aligned, Destination PTE-aligned"),
> -		MAKE_TEST(PUD, _1MB, _2GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "2GB mremap - Source PUD-aligned, Destination 1MB-aligned"),
> -		MAKE_TEST(PUD, PMD, _2GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "2GB mremap - Source PUD-aligned, Destination PMD-aligned"),
> -		MAKE_TEST(PUD, PUD, _2GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "2GB mremap - Source PUD-aligned, Destination PUD-aligned"),
> -	};
> -
> -	struct test perf_test_cases[] = {
> -		/*
> -		 * mremap 1GB region - Page table level aligned time
> -		 * comparison.
> -		 */
> -		MAKE_TEST(PTE, PTE, _1GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "1GB mremap - Source PTE-aligned, Destination PTE-aligned"),
> -		MAKE_TEST(PMD, PMD, _1GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "1GB mremap - Source PMD-aligned, Destination PMD-aligned"),
> -		MAKE_TEST(PUD, PUD, _1GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "1GB mremap - Source PUD-aligned, Destination PUD-aligned"),
> -	};
> +	page_size = sysconf(_SC_PAGESIZE);
> +
> +	/* Expected mremap failures */
> +	test_cases[0] =	MAKE_TEST(page_size, page_size, page_size,
> +				  OVERLAPPING, EXPECT_FAILURE,
> +				  "mremap - Source and Destination Regions Overlapping");
> +
> +	test_cases[1] = MAKE_TEST(page_size, page_size/4, page_size,
> +				  NON_OVERLAPPING, EXPECT_FAILURE,
> +				  "mremap - Destination Address Misaligned (1KB-aligned)");
> +	test_cases[2] = MAKE_TEST(page_size/4, page_size, page_size,
> +				  NON_OVERLAPPING, EXPECT_FAILURE,
> +				  "mremap - Source Address Misaligned (1KB-aligned)");
> +
> +	/* Src addr PTE aligned */
> +	test_cases[3] = MAKE_TEST(PTE, PTE, PTE * 2,
> +				  NON_OVERLAPPING, EXPECT_SUCCESS,
> +				  "8KB mremap - Source PTE-aligned, Destination PTE-aligned");
> +
> +	/* Src addr 1MB aligned */
> +	test_cases[4] = MAKE_TEST(_1MB, PTE, _2MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				  "2MB mremap - Source 1MB-aligned, Destination PTE-aligned");
> +	test_cases[5] = MAKE_TEST(_1MB, _1MB, _2MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				  "2MB mremap - Source 1MB-aligned, Destination 1MB-aligned");
> +
> +	/* Src addr PMD aligned */
> +	test_cases[6] = MAKE_TEST(PMD, PTE, _4MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				  "4MB mremap - Source PMD-aligned, Destination PTE-aligned");
> +	test_cases[7] =	MAKE_TEST(PMD, _1MB, _4MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				  "4MB mremap - Source PMD-aligned, Destination 1MB-aligned");
> +	test_cases[8] = MAKE_TEST(PMD, PMD, _4MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				  "4MB mremap - Source PMD-aligned, Destination PMD-aligned");
> +
> +	/* Src addr PUD aligned */
> +	test_cases[9] = MAKE_TEST(PUD, PTE, _2GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				  "2GB mremap - Source PUD-aligned, Destination PTE-aligned");
> +	test_cases[10] = MAKE_TEST(PUD, _1MB, _2GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				   "2GB mremap - Source PUD-aligned, Destination 1MB-aligned");
> +	test_cases[11] = MAKE_TEST(PUD, PMD, _2GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				   "2GB mremap - Source PUD-aligned, Destination PMD-aligned");
> +	test_cases[12] = MAKE_TEST(PUD, PUD, _2GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				   "2GB mremap - Source PUD-aligned, Destination PUD-aligned");
> +
> +	perf_test_cases[0] =  MAKE_TEST(page_size, page_size, _1GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +					"1GB mremap - Source PTE-aligned, Destination PTE-aligned");
> +	/*
> +	 * mremap 1GB region - Page table level aligned time
> +	 * comparison.
> +	 */
> +	perf_test_cases[1] = MAKE_TEST(PMD, PMD, _1GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				       "1GB mremap - Source PMD-aligned, Destination PMD-aligned");
> +	perf_test_cases[2] = MAKE_TEST(PUD, PUD, _1GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				       "1GB mremap - Source PUD-aligned, Destination PUD-aligned");
>   
>   	run_perf_tests =  (threshold_mb == VALIDATION_NO_THRESHOLD) ||
>   				(threshold_mb * _1MB >= _1GB);
> 



WARNING: multiple messages have this Message-ID (diff)
From: Li Xinhai <lixinhai_lxh@126.com>
To: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>,
	linux-mm@kvack.org, akpm@linux-foundation.org
Cc: peterz@infradead.org, linuxppc-dev@lists.ozlabs.org,
	joel@joelfernandes.org, kaleshsingh@google.com
Subject: Re: [RFC PATCH 1/6] selftest/mremap_test: Update the test to handle pagesize other than 4K
Date: Tue, 2 Feb 2021 21:29:00 +0800	[thread overview]
Message-ID: <19298b0c-2db5-3755-722d-74baeb35f1ef@126.com> (raw)
In-Reply-To: <20210202091116.196134-1-aneesh.kumar@linux.ibm.com>

what is the overall purpose of this patch set? maybe need a cover
letter?

On 2/2/21 5:11 PM, Aneesh Kumar K.V wrote:
> Instead of hardcoding 4K page size fetch it using sysconf(). For the performance
> measurements test still assume 2M and 1G are hugepage sizes.
> 
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
> ---
>   tools/testing/selftests/vm/mremap_test.c | 113 ++++++++++++-----------
>   1 file changed, 61 insertions(+), 52 deletions(-)
> 
> diff --git a/tools/testing/selftests/vm/mremap_test.c b/tools/testing/selftests/vm/mremap_test.c
> index 9c391d016922..c9a5461eb786 100644
> --- a/tools/testing/selftests/vm/mremap_test.c
> +++ b/tools/testing/selftests/vm/mremap_test.c
> @@ -45,14 +45,15 @@ enum {
>   	_4MB = 4ULL << 20,
>   	_1GB = 1ULL << 30,
>   	_2GB = 2ULL << 30,
> -	PTE = _4KB,
>   	PMD = _2MB,
>   	PUD = _1GB,
>   };
>   
> +#define PTE page_size
> +
>   #define MAKE_TEST(source_align, destination_align, size,	\
>   		  overlaps, should_fail, test_name)		\
> -{								\
> +(struct test){							\
>   	.name = test_name,					\
>   	.config = {						\
>   		.src_alignment = source_align,			\
> @@ -252,12 +253,17 @@ static int parse_args(int argc, char **argv, unsigned int *threshold_mb,
>   	return 0;
>   }
>   
> +#define MAX_TEST 13
> +#define MAX_PERF_TEST 3
>   int main(int argc, char **argv)
>   {
>   	int failures = 0;
>   	int i, run_perf_tests;
>   	unsigned int threshold_mb = VALIDATION_DEFAULT_THRESHOLD;
>   	unsigned int pattern_seed;
> +	struct test test_cases[MAX_TEST];
> +	struct test perf_test_cases[MAX_PERF_TEST];
> +	int page_size;
>   	time_t t;
>   
>   	pattern_seed = (unsigned int) time(&t);
> @@ -268,56 +274,59 @@ int main(int argc, char **argv)
>   	ksft_print_msg("Test configs:\n\tthreshold_mb=%u\n\tpattern_seed=%u\n\n",
>   		       threshold_mb, pattern_seed);
>   
> -	struct test test_cases[] = {
> -		/* Expected mremap failures */
> -		MAKE_TEST(_4KB, _4KB, _4KB, OVERLAPPING, EXPECT_FAILURE,
> -		  "mremap - Source and Destination Regions Overlapping"),
> -		MAKE_TEST(_4KB, _1KB, _4KB, NON_OVERLAPPING, EXPECT_FAILURE,
> -		  "mremap - Destination Address Misaligned (1KB-aligned)"),
> -		MAKE_TEST(_1KB, _4KB, _4KB, NON_OVERLAPPING, EXPECT_FAILURE,
> -		  "mremap - Source Address Misaligned (1KB-aligned)"),
> -
> -		/* Src addr PTE aligned */
> -		MAKE_TEST(PTE, PTE, _8KB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "8KB mremap - Source PTE-aligned, Destination PTE-aligned"),
> -
> -		/* Src addr 1MB aligned */
> -		MAKE_TEST(_1MB, PTE, _2MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "2MB mremap - Source 1MB-aligned, Destination PTE-aligned"),
> -		MAKE_TEST(_1MB, _1MB, _2MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "2MB mremap - Source 1MB-aligned, Destination 1MB-aligned"),
> -
> -		/* Src addr PMD aligned */
> -		MAKE_TEST(PMD, PTE, _4MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "4MB mremap - Source PMD-aligned, Destination PTE-aligned"),
> -		MAKE_TEST(PMD, _1MB, _4MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "4MB mremap - Source PMD-aligned, Destination 1MB-aligned"),
> -		MAKE_TEST(PMD, PMD, _4MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "4MB mremap - Source PMD-aligned, Destination PMD-aligned"),
> -
> -		/* Src addr PUD aligned */
> -		MAKE_TEST(PUD, PTE, _2GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "2GB mremap - Source PUD-aligned, Destination PTE-aligned"),
> -		MAKE_TEST(PUD, _1MB, _2GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "2GB mremap - Source PUD-aligned, Destination 1MB-aligned"),
> -		MAKE_TEST(PUD, PMD, _2GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "2GB mremap - Source PUD-aligned, Destination PMD-aligned"),
> -		MAKE_TEST(PUD, PUD, _2GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "2GB mremap - Source PUD-aligned, Destination PUD-aligned"),
> -	};
> -
> -	struct test perf_test_cases[] = {
> -		/*
> -		 * mremap 1GB region - Page table level aligned time
> -		 * comparison.
> -		 */
> -		MAKE_TEST(PTE, PTE, _1GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "1GB mremap - Source PTE-aligned, Destination PTE-aligned"),
> -		MAKE_TEST(PMD, PMD, _1GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "1GB mremap - Source PMD-aligned, Destination PMD-aligned"),
> -		MAKE_TEST(PUD, PUD, _1GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> -		  "1GB mremap - Source PUD-aligned, Destination PUD-aligned"),
> -	};
> +	page_size = sysconf(_SC_PAGESIZE);
> +
> +	/* Expected mremap failures */
> +	test_cases[0] =	MAKE_TEST(page_size, page_size, page_size,
> +				  OVERLAPPING, EXPECT_FAILURE,
> +				  "mremap - Source and Destination Regions Overlapping");
> +
> +	test_cases[1] = MAKE_TEST(page_size, page_size/4, page_size,
> +				  NON_OVERLAPPING, EXPECT_FAILURE,
> +				  "mremap - Destination Address Misaligned (1KB-aligned)");
> +	test_cases[2] = MAKE_TEST(page_size/4, page_size, page_size,
> +				  NON_OVERLAPPING, EXPECT_FAILURE,
> +				  "mremap - Source Address Misaligned (1KB-aligned)");
> +
> +	/* Src addr PTE aligned */
> +	test_cases[3] = MAKE_TEST(PTE, PTE, PTE * 2,
> +				  NON_OVERLAPPING, EXPECT_SUCCESS,
> +				  "8KB mremap - Source PTE-aligned, Destination PTE-aligned");
> +
> +	/* Src addr 1MB aligned */
> +	test_cases[4] = MAKE_TEST(_1MB, PTE, _2MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				  "2MB mremap - Source 1MB-aligned, Destination PTE-aligned");
> +	test_cases[5] = MAKE_TEST(_1MB, _1MB, _2MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				  "2MB mremap - Source 1MB-aligned, Destination 1MB-aligned");
> +
> +	/* Src addr PMD aligned */
> +	test_cases[6] = MAKE_TEST(PMD, PTE, _4MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				  "4MB mremap - Source PMD-aligned, Destination PTE-aligned");
> +	test_cases[7] =	MAKE_TEST(PMD, _1MB, _4MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				  "4MB mremap - Source PMD-aligned, Destination 1MB-aligned");
> +	test_cases[8] = MAKE_TEST(PMD, PMD, _4MB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				  "4MB mremap - Source PMD-aligned, Destination PMD-aligned");
> +
> +	/* Src addr PUD aligned */
> +	test_cases[9] = MAKE_TEST(PUD, PTE, _2GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				  "2GB mremap - Source PUD-aligned, Destination PTE-aligned");
> +	test_cases[10] = MAKE_TEST(PUD, _1MB, _2GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				   "2GB mremap - Source PUD-aligned, Destination 1MB-aligned");
> +	test_cases[11] = MAKE_TEST(PUD, PMD, _2GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				   "2GB mremap - Source PUD-aligned, Destination PMD-aligned");
> +	test_cases[12] = MAKE_TEST(PUD, PUD, _2GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				   "2GB mremap - Source PUD-aligned, Destination PUD-aligned");
> +
> +	perf_test_cases[0] =  MAKE_TEST(page_size, page_size, _1GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +					"1GB mremap - Source PTE-aligned, Destination PTE-aligned");
> +	/*
> +	 * mremap 1GB region - Page table level aligned time
> +	 * comparison.
> +	 */
> +	perf_test_cases[1] = MAKE_TEST(PMD, PMD, _1GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				       "1GB mremap - Source PMD-aligned, Destination PMD-aligned");
> +	perf_test_cases[2] = MAKE_TEST(PUD, PUD, _1GB, NON_OVERLAPPING, EXPECT_SUCCESS,
> +				       "1GB mremap - Source PUD-aligned, Destination PUD-aligned");
>   
>   	run_perf_tests =  (threshold_mb == VALIDATION_NO_THRESHOLD) ||
>   				(threshold_mb * _1MB >= _1GB);
> 


  parent reply	other threads:[~2021-02-02 13:32 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-02  9:11 [RFC PATCH 1/6] selftest/mremap_test: Update the test to handle pagesize other than 4K Aneesh Kumar K.V
2021-02-02  9:11 ` Aneesh Kumar K.V
2021-02-02  9:11 ` [RFC PATCH 2/6] selftest/mremap_test: Avoid crash with static build Aneesh Kumar K.V
2021-02-02  9:11   ` Aneesh Kumar K.V
2021-02-02  9:11 ` [RFC PATCH 3/6] mm/mremap: Use pmd/pud_poplulate to update page table entries Aneesh Kumar K.V
2021-02-02  9:11   ` Aneesh Kumar K.V
2021-02-02 10:47   ` Peter Zijlstra
2021-02-02 10:47     ` Peter Zijlstra
2021-02-02 14:50     ` Aneesh Kumar K.V
2021-02-02 14:50       ` Aneesh Kumar K.V
2021-02-02 16:16   ` kernel test robot
2021-02-02  9:11 ` [RFC PATCH 4/6] mm/mremap: Use mmu gather interface instead of flush_tlb_range Aneesh Kumar K.V
2021-02-02  9:11   ` Aneesh Kumar K.V
2021-02-02  9:11 ` [RFC PATCH 5/6] mm/mremap: Allow arch runtime override Aneesh Kumar K.V
2021-02-02  9:11   ` Aneesh Kumar K.V
2021-02-02  9:11 ` [RFC PATCH 6/6] powerpc/mm: Enable move pmd/pud Aneesh Kumar K.V
2021-02-02  9:11   ` Aneesh Kumar K.V
2021-02-02 13:29 ` Li Xinhai [this message]
2021-02-02 13:29   ` [RFC PATCH 1/6] selftest/mremap_test: Update the test to handle pagesize other than 4K Li Xinhai
2021-02-02 14:51   ` Aneesh Kumar K.V
2021-02-02 14:51     ` Aneesh Kumar K.V

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=19298b0c-2db5-3755-722d-74baeb35f1ef@126.com \
    --to=lixinhai_lxh@126.com \
    --cc=akpm@linux-foundation.org \
    --cc=aneesh.kumar@linux.ibm.com \
    --cc=joel@joelfernandes.org \
    --cc=kaleshsingh@google.com \
    --cc=linux-mm@kvack.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mpe@ellerman.id.au \
    --cc=peterz@infradead.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 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.