mm-commits.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: akpm@linux-foundation.org, almasrymina@google.com,
	aneesh.kumar@linux.ibm.com, anshuman.khandual@arm.com,
	arnd@arndb.de, bgeffon@google.com, bp@alien8.de,
	catalin.marinas@arm.com, christian.brauner@ubuntu.com,
	dave.hansen@intel.com, frederic@kernel.org, gshan@redhat.com,
	hnaveed@wavecomp.com, hpa@zytor.com, jhubbard@nvidia.com,
	justin.he@arm.com, kaleshsingh@google.com, keescook@chromium.org,
	kirill.shutemov@linux.intel.com, krzk@kernel.org,
	linux-mm@kvack.org, linuxram@us.ibm.com, lokeshgidra@google.com,
	mark.rutland@arm.com, masahiroy@kernel.org, mhiramat@kernel.org,
	minchan@google.com, mingo@redhat.com, mm-commits@vger.kernel.org,
	peterz@infradead.org, rcampbell@nvidia.com, rppt@kernel.org,
	samitolvanen@google.com, sandipan@linux.ibm.com,
	shuah@kernel.org, sjpark@amazon.de, steven.price@arm.com,
	surenb@google.com, tglx@linutronix.de,
	torvalds@linux-foundation.org, will@kernel.org, ziy@nvidia.com
Subject: [patch 074/200] kselftests: vm: add mremap tests
Date: Mon, 14 Dec 2020 19:07:25 -0800	[thread overview]
Message-ID: <20201215030725.0iV2jluE9%akpm@linux-foundation.org> (raw)
In-Reply-To: <20201214190237.a17b70ae14f129e2dca3d204@linux-foundation.org>

From: Kalesh Singh <kaleshsingh@google.com>
Subject: kselftests: vm: add mremap tests

Patch series "Speed up mremap on large regions", v4.

mremap time can be optimized by moving entries at the PMD/PUD level if the
source and destination addresses are PMD/PUD-aligned and PMD/PUD-sized. 
Enable moving at the PMD and PUD levels on arm64 and x86.  Other
architectures where this type of move is supported and known to be safe
can also opt-in to these optimizations by enabling HAVE_MOVE_PMD and
HAVE_MOVE_PUD.

Observed Performance Improvements for remapping a PUD-aligned 1GB-sized
region on x86 and arm64:

    - HAVE_MOVE_PMD is already enabled on x86 : N/A
    - Enabling HAVE_MOVE_PUD on x86   : ~13x speed up

    - Enabling HAVE_MOVE_PMD on arm64 : ~ 8x speed up
    - Enabling HAVE_MOVE_PUD on arm64 : ~19x speed up

          Altogether, HAVE_MOVE_PMD and HAVE_MOVE_PUD
          give a total of ~150x speed up on arm64.


This patch (of 4):

Test mremap on regions of various sizes and alignments and validate data
after remapping.  Also provide total time for remapping the region which
is useful for performance comparison of the mremap optimizations that move
pages at the PMD/PUD levels if HAVE_MOVE_PMD and/or HAVE_MOVE_PUD are
enabled.

Link: https://lkml.kernel.org/r/20201014005320.2233162-1-kaleshsingh@google.com
Link: https://lkml.kernel.org/r/20201014005320.2233162-2-kaleshsingh@google.com
Signed-off-by: Kalesh Singh <kaleshsingh@google.com>
Reviewed-by: John Hubbard <jhubbard@nvidia.com>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Minchan Kim <minchan@google.com>
Cc: Lokesh Gidra <lokeshgidra@google.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Kees Cook <keescook@chromium.org>
Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Sami Tolvanen <samitolvanen@google.com>
Cc: Masahiro Yamada <masahiroy@kernel.org>
Cc: Krzysztof Kozlowski <krzk@kernel.org>
Cc: Frederic Weisbecker <frederic@kernel.org>
Cc: Hassan Naveed <hnaveed@wavecomp.com>
Cc: Christian Brauner <christian.brauner@ubuntu.com>
Cc: Anshuman Khandual <anshuman.khandual@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Gavin Shan <gshan@redhat.com>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Steven Price <steven.price@arm.com>
Cc: Jia He <justin.he@arm.com>
Cc: Ram Pai <linuxram@us.ibm.com>
Cc: Sandipan Das <sandipan@linux.ibm.com>
Cc: Zi Yan <ziy@nvidia.com>
Cc: Mina Almasry <almasrymina@google.com>
Cc: Ralph Campbell <rcampbell@nvidia.com>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Brian Geffon <bgeffon@google.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: SeongJae Park <sjpark@amazon.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---

 tools/testing/selftests/vm/.gitignore    |    1 
 tools/testing/selftests/vm/Makefile      |    1 
 tools/testing/selftests/vm/mremap_test.c |  344 +++++++++++++++++++++
 tools/testing/selftests/vm/run_vmtests   |   11 
 4 files changed, 357 insertions(+)

--- a/tools/testing/selftests/vm/.gitignore~kselftests-vm-add-mremap-tests
+++ a/tools/testing/selftests/vm/.gitignore
@@ -8,6 +8,7 @@ thuge-gen
 compaction_test
 mlock2-tests
 mremap_dontunmap
+mremap_test
 on-fault-limit
 transhuge-stress
 protection_keys
--- a/tools/testing/selftests/vm/Makefile~kselftests-vm-add-mremap-tests
+++ a/tools/testing/selftests/vm/Makefile
@@ -37,6 +37,7 @@ TEST_GEN_FILES += map_populate
 TEST_GEN_FILES += mlock-random-test
 TEST_GEN_FILES += mlock2-tests
 TEST_GEN_FILES += mremap_dontunmap
+TEST_GEN_FILES += mremap_test
 TEST_GEN_FILES += on-fault-limit
 TEST_GEN_FILES += thuge-gen
 TEST_GEN_FILES += transhuge-stress
--- /dev/null
+++ a/tools/testing/selftests/vm/mremap_test.c
@@ -0,0 +1,344 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2020 Google LLC
+ */
+#define _GNU_SOURCE
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <time.h>
+
+#include "../kselftest.h"
+
+#define EXPECT_SUCCESS 0
+#define EXPECT_FAILURE 1
+#define NON_OVERLAPPING 0
+#define OVERLAPPING 1
+#define NS_PER_SEC 1000000000ULL
+#define VALIDATION_DEFAULT_THRESHOLD 4	/* 4MB */
+#define VALIDATION_NO_THRESHOLD 0	/* Verify the entire region */
+
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
+
+struct config {
+	unsigned long long src_alignment;
+	unsigned long long dest_alignment;
+	unsigned long long region_size;
+	int overlapping;
+};
+
+struct test {
+	const char *name;
+	struct config config;
+	int expect_failure;
+};
+
+enum {
+	_1KB = 1ULL << 10,	/* 1KB -> not page aligned */
+	_4KB = 4ULL << 10,
+	_8KB = 8ULL << 10,
+	_1MB = 1ULL << 20,
+	_2MB = 2ULL << 20,
+	_4MB = 4ULL << 20,
+	_1GB = 1ULL << 30,
+	_2GB = 2ULL << 30,
+	PTE = _4KB,
+	PMD = _2MB,
+	PUD = _1GB,
+};
+
+#define MAKE_TEST(source_align, destination_align, size,	\
+		  overlaps, should_fail, test_name)		\
+{								\
+	.name = test_name,					\
+	.config = {						\
+		.src_alignment = source_align,			\
+		.dest_alignment = destination_align,		\
+		.region_size = size,				\
+		.overlapping = overlaps,			\
+	},							\
+	.expect_failure = should_fail				\
+}
+
+/*
+ * Returns the start address of the mapping on success, else returns
+ * NULL on failure.
+ */
+static void *get_source_mapping(struct config c)
+{
+	unsigned long long addr = 0ULL;
+	void *src_addr = NULL;
+retry:
+	addr += c.src_alignment;
+	src_addr = mmap((void *) addr, c.region_size, PROT_READ | PROT_WRITE,
+			MAP_FIXED | MAP_ANONYMOUS | MAP_SHARED, -1, 0);
+	if (src_addr == MAP_FAILED) {
+		if (errno == EPERM)
+			goto retry;
+		goto error;
+	}
+	/*
+	 * Check that the address is aligned to the specified alignment.
+	 * Addresses which have alignments that are multiples of that
+	 * specified are not considered valid. For instance, 1GB address is
+	 * 2MB-aligned, however it will not be considered valid for a
+	 * requested alignment of 2MB. This is done to reduce coincidental
+	 * alignment in the tests.
+	 */
+	if (((unsigned long long) src_addr & (c.src_alignment - 1)) ||
+			!((unsigned long long) src_addr & c.src_alignment))
+		goto retry;
+
+	if (!src_addr)
+		goto error;
+
+	return src_addr;
+error:
+	ksft_print_msg("Failed to map source region: %s\n",
+			strerror(errno));
+	return NULL;
+}
+
+/* Returns the time taken for the remap on success else returns -1. */
+static long long remap_region(struct config c, unsigned int threshold_mb,
+			      char pattern_seed)
+{
+	void *addr, *src_addr, *dest_addr;
+	unsigned long long i;
+	struct timespec t_start = {0, 0}, t_end = {0, 0};
+	long long  start_ns, end_ns, align_mask, ret, offset;
+	unsigned long long threshold;
+
+	if (threshold_mb == VALIDATION_NO_THRESHOLD)
+		threshold = c.region_size;
+	else
+		threshold = MIN(threshold_mb * _1MB, c.region_size);
+
+	src_addr = get_source_mapping(c);
+	if (!src_addr) {
+		ret = -1;
+		goto out;
+	}
+
+	/* Set byte pattern */
+	srand(pattern_seed);
+	for (i = 0; i < threshold; i++)
+		memset((char *) src_addr + i, (char) rand(), 1);
+
+	/* Mask to zero out lower bits of address for alignment */
+	align_mask = ~(c.dest_alignment - 1);
+	/* Offset of destination address from the end of the source region */
+	offset = (c.overlapping) ? -c.dest_alignment : c.dest_alignment;
+	addr = (void *) (((unsigned long long) src_addr + c.region_size
+			  + offset) & align_mask);
+
+	/* See comment in get_source_mapping() */
+	if (!((unsigned long long) addr & c.dest_alignment))
+		addr = (void *) ((unsigned long long) addr | c.dest_alignment);
+
+	clock_gettime(CLOCK_MONOTONIC, &t_start);
+	dest_addr = mremap(src_addr, c.region_size, c.region_size,
+			MREMAP_MAYMOVE|MREMAP_FIXED, (char *) addr);
+	clock_gettime(CLOCK_MONOTONIC, &t_end);
+
+	if (dest_addr == MAP_FAILED) {
+		ksft_print_msg("mremap failed: %s\n", strerror(errno));
+		ret = -1;
+		goto clean_up_src;
+	}
+
+	/* Verify byte pattern after remapping */
+	srand(pattern_seed);
+	for (i = 0; i < threshold; i++) {
+		char c = (char) rand();
+
+		if (((char *) dest_addr)[i] != c) {
+			ksft_print_msg("Data after remap doesn't match at offset %d\n",
+				       i);
+			ksft_print_msg("Expected: %#x\t Got: %#x\n", c & 0xff,
+					((char *) dest_addr)[i] & 0xff);
+			ret = -1;
+			goto clean_up_dest;
+		}
+	}
+
+	start_ns = t_start.tv_sec * NS_PER_SEC + t_start.tv_nsec;
+	end_ns = t_end.tv_sec * NS_PER_SEC + t_end.tv_nsec;
+	ret = end_ns - start_ns;
+
+/*
+ * Since the destination address is specified using MREMAP_FIXED, subsequent
+ * mremap will unmap any previous mapping at the address range specified by
+ * dest_addr and region_size. This significantly affects the remap time of
+ * subsequent tests. So we clean up mappings after each test.
+ */
+clean_up_dest:
+	munmap(dest_addr, c.region_size);
+clean_up_src:
+	munmap(src_addr, c.region_size);
+out:
+	return ret;
+}
+
+static void run_mremap_test_case(struct test test_case, int *failures,
+				 unsigned int threshold_mb,
+				 unsigned int pattern_seed)
+{
+	long long remap_time = remap_region(test_case.config, threshold_mb,
+					    pattern_seed);
+
+	if (remap_time < 0) {
+		if (test_case.expect_failure)
+			ksft_test_result_pass("%s\n\tExpected mremap failure\n",
+					      test_case.name);
+		else {
+			ksft_test_result_fail("%s\n", test_case.name);
+			*failures += 1;
+		}
+	} else {
+		/*
+		 * Comparing mremap time is only applicable if entire region
+		 * was faulted in.
+		 */
+		if (threshold_mb == VALIDATION_NO_THRESHOLD ||
+		    test_case.config.region_size <= threshold_mb * _1MB)
+			ksft_test_result_pass("%s\n\tmremap time: %12lldns\n",
+					      test_case.name, remap_time);
+		else
+			ksft_test_result_pass("%s\n", test_case.name);
+	}
+}
+
+static void usage(const char *cmd)
+{
+	fprintf(stderr,
+		"Usage: %s [[-t <threshold_mb>] [-p <pattern_seed>]]\n"
+		"-t\t only validate threshold_mb of the remapped region\n"
+		"  \t if 0 is supplied no threshold is used; all tests\n"
+		"  \t are run and remapped regions validated fully.\n"
+		"  \t The default threshold used is 4MB.\n"
+		"-p\t provide a seed to generate the random pattern for\n"
+		"  \t validating the remapped region.\n", cmd);
+}
+
+static int parse_args(int argc, char **argv, unsigned int *threshold_mb,
+		      unsigned int *pattern_seed)
+{
+	const char *optstr = "t:p:";
+	int opt;
+
+	while ((opt = getopt(argc, argv, optstr)) != -1) {
+		switch (opt) {
+		case 't':
+			*threshold_mb = atoi(optarg);
+			break;
+		case 'p':
+			*pattern_seed = atoi(optarg);
+			break;
+		default:
+			usage(argv[0]);
+			return -1;
+		}
+	}
+
+	if (optind < argc) {
+		usage(argv[0]);
+		return -1;
+	}
+
+	return 0;
+}
+
+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;
+	time_t t;
+
+	pattern_seed = (unsigned int) time(&t);
+
+	if (parse_args(argc, argv, &threshold_mb, &pattern_seed) < 0)
+		exit(EXIT_FAILURE);
+
+	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"),
+	};
+
+	run_perf_tests =  (threshold_mb == VALIDATION_NO_THRESHOLD) ||
+				(threshold_mb * _1MB >= _1GB);
+
+	ksft_set_plan(ARRAY_SIZE(test_cases) + (run_perf_tests ?
+		      ARRAY_SIZE(perf_test_cases) : 0));
+
+	for (i = 0; i < ARRAY_SIZE(test_cases); i++)
+		run_mremap_test_case(test_cases[i], &failures, threshold_mb,
+				     pattern_seed);
+
+	if (run_perf_tests) {
+		ksft_print_msg("\n%s\n",
+		 "mremap HAVE_MOVE_PMD/PUD optimization time comparison for 1GB region:");
+		for (i = 0; i < ARRAY_SIZE(perf_test_cases); i++)
+			run_mremap_test_case(perf_test_cases[i], &failures,
+					     threshold_mb, pattern_seed);
+	}
+
+	if (failures > 0)
+		ksft_exit_fail();
+	else
+		ksft_exit_pass();
+}
--- a/tools/testing/selftests/vm/run_vmtests~kselftests-vm-add-mremap-tests
+++ a/tools/testing/selftests/vm/run_vmtests
@@ -253,6 +253,17 @@ else
 	echo "[PASS]"
 fi
 
+echo "-------------------"
+echo "running mremap_test"
+echo "-------------------"
+./mremap_test
+if [ $? -ne 0 ]; then
+	echo "[FAIL]"
+	exitcode=1
+else
+	echo "[PASS]"
+fi
+
 echo "-----------------"
 echo "running thuge-gen"
 echo "-----------------"
_

  parent reply	other threads:[~2020-12-15  3:30 UTC|newest]

Thread overview: 215+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-15  3:02 incoming Andrew Morton
2020-12-15  3:03 ` [patch 001/200] kthread: add kthread_work tracepoints Andrew Morton
2020-12-15  3:03 ` [patch 002/200] kthread_worker: document CPU hotplug handling Andrew Morton
2020-12-15  3:03 ` [patch 003/200] uapi: move constants from <linux/kernel.h> to <linux/const.h> Andrew Morton
2020-12-15  3:03 ` [patch 004/200] ide/falcon: remove in_interrupt() usage Andrew Morton
2020-12-15  3:03 ` [patch 005/200] ide: remove BUG_ON(in_interrupt() || irqs_disabled()) from ide_unregister() Andrew Morton
2020-12-15  3:03 ` [patch 006/200] fs/ntfs: remove unused varibles Andrew Morton
2020-12-15  3:03 ` [patch 007/200] fs/ntfs: remove unused variable attr_len Andrew Morton
2020-12-15  3:03 ` [patch 008/200] fs/ocfs2/cluster/tcp.c: remove unneeded break Andrew Morton
2020-12-15  3:03 ` [patch 009/200] ocfs2: ratelimit the 'max lookup times reached' notice Andrew Morton
2020-12-15  3:03 ` [patch 010/200] arch/Kconfig: fix spelling mistakes Andrew Morton
2020-12-15  3:03 ` [patch 011/200] mm/slab_common.c: use list_for_each_entry in dump_unreclaimable_slab() Andrew Morton
2020-12-15  3:03 ` [patch 012/200] mm: slab: clarify krealloc()'s behavior with __GFP_ZERO Andrew Morton
2020-12-15 14:30   ` Christian König
2020-12-15 19:08     ` Andy Shevchenko
2020-12-16  7:47       ` Christian König
2020-12-16 11:23         ` Andy Shevchenko
2020-12-15  3:03 ` [patch 013/200] mm: slab: provide krealloc_array() Andrew Morton
2020-12-15  3:03 ` [patch 014/200] ALSA: pcm: use krealloc_array() Andrew Morton
2020-12-15  3:04 ` [patch 015/200] vhost: vringh: " Andrew Morton
2020-12-15  3:04 ` [patch 016/200] pinctrl: " Andrew Morton
2020-12-15  3:04 ` [patch 017/200] edac: ghes: " Andrew Morton
2020-12-15  3:04 ` [patch 018/200] drm: atomic: " Andrew Morton
2020-12-15  3:04 ` [patch 019/200] hwtracing: intel: " Andrew Morton
2020-12-15  3:04 ` [patch 020/200] dma-buf: " Andrew Morton
2020-12-15  7:42   ` Christian König
2020-12-15  3:04 ` [patch 021/200] mm, slab, slub: clear the slab_cache field when freeing page Andrew Morton
2020-12-15  3:04 ` [patch 022/200] mm/slab: rerform init_on_free earlier Andrew Morton
2020-12-15 16:45   ` Alexander Potapenko
2020-12-15 20:46     ` Alexander Popov
2020-12-15 21:08       ` Alexander Popov
2020-12-15  3:04 ` [patch 023/200] mm, slub: use kmem_cache_debug_flags() in deactivate_slab() Andrew Morton
2020-12-15  3:04 ` [patch 024/200] mm/slub: let number of online CPUs determine the slub page order Andrew Morton
2020-12-15  3:04 ` [patch 025/200] device-dax/kmem: use struct_size() Andrew Morton
2020-12-15  3:04 ` [patch 026/200] mm: fix page_owner initializing issue for arm32 Andrew Morton
2020-12-15  3:04 ` [patch 027/200] mm/page_owner: record timestamp and pid Andrew Morton
2020-12-15  3:04 ` [patch 028/200] mm/filemap/c: break generic_file_buffered_read up into multiple functions Andrew Morton
2020-12-15  3:04 ` [patch 029/200] mm/filemap.c: generic_file_buffered_read() now uses find_get_pages_contig Andrew Morton
2020-12-15  3:04 ` [patch 030/200] mm/truncate: add parameter explanation for invalidate_mapping_pagevec Andrew Morton
2020-12-15  3:05 ` [patch 031/200] mm/filemap.c: remove else after a return Andrew Morton
2020-12-15  3:05 ` [patch 032/200] mm/gup_benchmark: rename to mm/gup_test Andrew Morton
2020-12-15  3:05 ` [patch 033/200] selftests/vm: use a common gup_test.h Andrew Morton
2020-12-15  3:05 ` [patch 034/200] selftests/vm: rename run_vmtests --> run_vmtests.sh Andrew Morton
2020-12-15  3:05 ` [patch 035/200] selftests/vm: minor cleanup: Makefile and gup_test.c Andrew Morton
2020-12-15  3:05 ` [patch 036/200] selftests/vm: only some gup_test items are really benchmarks Andrew Morton
2020-12-15  3:05 ` [patch 037/200] selftests/vm: gup_test: introduce the dump_pages() sub-test Andrew Morton
2020-12-15  3:05 ` [patch 038/200] selftests/vm: run_vmtests.sh: update and clean up gup_test invocation Andrew Morton
2020-12-15  3:05 ` [patch 039/200] selftests/vm: hmm-tests: remove the libhugetlbfs dependency Andrew Morton
2020-12-15  3:05 ` [patch 040/200] selftests/vm: 2x speedup for run_vmtests.sh Andrew Morton
2020-12-15  3:05 ` [patch 041/200] mm/gup_test.c: mark gup_test_init as __init function Andrew Morton
2020-12-15  3:05 ` [patch 042/200] mm/gup_test: GUP_TEST depends on DEBUG_FS Andrew Morton
2020-12-15  3:05 ` [patch 043/200] mm/gup: reorganize internal_get_user_pages_fast() Andrew Morton
2020-12-15  3:05 ` [patch 044/200] mm/gup: prevent gup_fast from racing with COW during fork Andrew Morton
2020-12-15  3:05 ` [patch 045/200] mm/gup: remove the vma allocation from gup_longterm_locked() Andrew Morton
2020-12-15  3:05 ` [patch 046/200] mm/gup: combine put_compound_head() and unpin_user_page() Andrew Morton
2020-12-15  3:05 ` [patch 047/200] mm: handle zone device pages in release_pages() Andrew Morton
2020-12-15  3:05 ` [patch 048/200] mm/swapfile.c: use helper function swap_count() in add_swap_count_continuation() Andrew Morton
2020-12-15  3:06 ` [patch 049/200] mm/swap_state: skip meaningless swap cache readahead when ra_info.win == 0 Andrew Morton
2020-12-15  3:06 ` [patch 050/200] mm/swapfile.c: remove unnecessary out label in __swap_duplicate() Andrew Morton
2020-12-15  3:06 ` [patch 051/200] mm/swapfile.c: use memset to fill the swap_map with SWAP_HAS_CACHE Andrew Morton
2020-12-15  3:06 ` [patch 052/200] mm: remove pagevec_lookup_range_nr_tag() Andrew Morton
2020-12-15  3:06 ` [patch 053/200] mm/shmem.c: make shmem_mapping() inline Andrew Morton
2020-12-15  3:06 ` [patch 054/200] tmpfs: fix Documentation nits Andrew Morton
2020-12-15  3:06 ` [patch 055/200] mm: memcontrol: add file_thp, shmem_thp to memory.stat Andrew Morton
2020-12-15  3:06 ` [patch 056/200] mm: memcontrol: remove unused mod_memcg_obj_state() Andrew Morton
2020-12-15  3:06 ` [patch 057/200] mm: memcontrol: eliminate redundant check in __mem_cgroup_insert_exceeded() Andrew Morton
2020-12-15  3:06 ` [patch 058/200] mm: memcg/slab: fix return of child memcg objcg for root memcg Andrew Morton
2020-12-15  3:06 ` [patch 059/200] mm: memcg/slab: fix use after free in obj_cgroup_charge Andrew Morton
2020-12-15  3:06 ` [patch 060/200] mm/rmap: always do TTU_IGNORE_ACCESS Andrew Morton
2020-12-15  3:06 ` [patch 061/200] mm/memcg: update page struct member in comments Andrew Morton
2020-12-15  3:06 ` [patch 062/200] mm: memcg: fix obsolete code comments Andrew Morton
2020-12-15  3:06 ` [patch 063/200] mm: memcg: deprecate the non-hierarchical mode Andrew Morton
2020-12-15  3:06 ` [patch 064/200] docs: cgroup-v1: reflect the deprecation of " Andrew Morton
2020-12-15  3:06 ` [patch 065/200] cgroup: remove obsoleted broken_hierarchy and warned_broken_hierarchy Andrew Morton
2020-12-15  3:06 ` [patch 066/200] mm/page_counter: use page_counter_read in page_counter_set_max Andrew Morton
2020-12-15  3:07 ` [patch 067/200] mm: memcg: remove obsolete memcg_has_children() Andrew Morton
2020-12-15  3:07 ` [patch 068/200] mm: memcg/slab: rename *_lruvec_slab_state to *_lruvec_kmem_state Andrew Morton
2020-12-15  3:07 ` [patch 069/200] mm: memcontrol: sssign boolean values to a bool variable Andrew Morton
2020-12-15  3:07 ` [patch 070/200] mm/memcg: remove incorrect comment Andrew Morton
2020-12-15  3:07 ` [patch 071/200] mm: move lruvec stats update functions to vmstat.h Andrew Morton
2020-12-15  3:07 ` [patch 072/200] mm: memcontrol: account pagetables per node Andrew Morton
2020-12-15  3:07 ` [patch 073/200] xen/unpopulated-alloc: consolidate pgmap manipulation Andrew Morton
2020-12-15  3:07 ` Andrew Morton [this message]
2020-12-15  3:07 ` [patch 075/200] mm: speedup mremap on 1GB or larger regions Andrew Morton
2020-12-15 19:52   ` Linus Torvalds
2020-12-15 23:16     ` Kalesh Singh
2020-12-15  3:07 ` [patch 076/200] arm64: mremap speedup - enable HAVE_MOVE_PUD Andrew Morton
2020-12-15  3:07 ` [patch 077/200] x86: mremap speedup - Enable HAVE_MOVE_PUD Andrew Morton
2020-12-15  3:07 ` [patch 078/200] mm: cleanup: remove unused tsk arg from __access_remote_vm Andrew Morton
2020-12-15  3:07 ` [patch 079/200] mm/mapping_dirty_helpers: enhance the kernel-doc markups Andrew Morton
2020-12-15  3:07 ` [patch 080/200] mm/page_vma_mapped.c: add colon to fix kernel-doc markups error for check_pte Andrew Morton
2020-12-15  3:07 ` [patch 081/200] mm: mmap_lock: add tracepoints around lock acquisition Andrew Morton
2020-12-15  3:07 ` [patch 082/200] sparc: fix handling of page table constructor failure Andrew Morton
2020-12-15  3:08 ` [patch 083/200] mm: move free_unref_page to mm/internal.h Andrew Morton
2020-12-15  3:08 ` [patch 084/200] mm/mremap: account memory on do_munmap() failure Andrew Morton
2020-12-15  3:08 ` [patch 085/200] mm/mremap: for MREMAP_DONTUNMAP check security_vm_enough_memory_mm() Andrew Morton
2020-12-15  3:08 ` [patch 086/200] mremap: don't allow MREMAP_DONTUNMAP on special_mappings and aio Andrew Morton
2020-12-28 17:59   ` Brian Geffon
2020-12-15  3:08 ` [patch 087/200] vm_ops: rename .split() callback to .may_split() Andrew Morton
2020-12-15  3:08 ` [patch 088/200] mremap: check if it's possible to split original vma Andrew Morton
2020-12-15  3:08 ` [patch 089/200] mm: forbid splitting special mappings Andrew Morton
2020-12-15  3:08 ` [patch 090/200] mm: track mmu notifiers in fs_reclaim_acquire/release Andrew Morton
2020-12-15  3:08 ` [patch 091/200] mm: extract might_alloc() debug check Andrew Morton
2020-12-15  3:08 ` [patch 092/200] locking/selftests: add testcases for fs_reclaim Andrew Morton
2020-12-15  3:08 ` [patch 093/200] mm/vmalloc.c:__vmalloc_area_node(): avoid 32-bit overflow Andrew Morton
2020-12-15  3:08 ` [patch 094/200] mm/vmalloc: use free_vm_area() if an allocation fails Andrew Morton
2020-12-15  3:08 ` [patch 095/200] mm/vmalloc: rework the drain logic Andrew Morton
2020-12-15  3:08 ` [patch 096/200] mm/vmalloc: add 'align' parameter explanation for pvm_determine_end_from_reverse Andrew Morton
2020-12-15  3:08 ` [patch 097/200] mm/vmalloc.c: remove unnecessary return statement Andrew Morton
2020-12-15  3:08 ` [patch 098/200] mm/vmalloc: Fix unlock order in s_stop() Andrew Morton
2020-12-15  3:09 ` [patch 099/200] docs/vm: remove unused 3 items explanation for /proc/vmstat Andrew Morton
2020-12-15  3:09 ` [patch 100/200] mm/vmalloc.c: fix kasan shadow poisoning size Andrew Morton
2020-12-15  3:09 ` [patch 101/200] workqueue: kasan: record workqueue stack Andrew Morton
2020-12-15  3:09 ` [patch 102/200] kasan: print " Andrew Morton
2020-12-15  3:09 ` [patch 103/200] lib/test_kasan.c: add workqueue test case Andrew Morton
2020-12-15  3:09 ` [patch 104/200] kasan: update documentation for generic kasan Andrew Morton
2020-12-15  3:09 ` [patch 105/200] lkdtm: disable KASAN for rodata.o Andrew Morton
2020-12-15  3:09 ` [patch 106/200] alpha: switch from DISCONTIGMEM to SPARSEMEM Andrew Morton
2020-12-15  3:09 ` [patch 107/200] ia64: remove custom __early_pfn_to_nid() Andrew Morton
2020-12-15  3:09 ` [patch 108/200] ia64: remove 'ifdef CONFIG_ZONE_DMA32' statements Andrew Morton
2020-12-15  3:09 ` [patch 109/200] ia64: discontig: paging_init(): remove local max_pfn calculation Andrew Morton
2020-12-15  3:09 ` [patch 110/200] ia64: split virtual map initialization out of paging_init() Andrew Morton
2020-12-15  3:09 ` [patch 111/200] ia64: forbid using VIRTUAL_MEM_MAP with FLATMEM Andrew Morton
2020-12-15  3:09 ` [patch 112/200] ia64: make SPARSEMEM default and disable DISCONTIGMEM Andrew Morton
2020-12-15  3:09 ` [patch 113/200] arm: remove CONFIG_ARCH_HAS_HOLES_MEMORYMODEL Andrew Morton
2020-12-15  3:09 ` [patch 114/200] arm, arm64: move free_unused_memmap() to generic mm Andrew Morton
2020-12-15  3:10 ` [patch 115/200] arc: use FLATMEM with freeing of unused memory map instead of DISCONTIGMEM Andrew Morton
2020-12-15  3:10 ` [patch 116/200] m68k/mm: make node data and node setup depend on CONFIG_DISCONTIGMEM Andrew Morton
2020-12-15  3:10 ` [patch 117/200] m68k/mm: enable use of generic memory_model.h for !DISCONTIGMEM Andrew Morton
2020-12-15  3:10 ` [patch 118/200] m68k: deprecate DISCONTIGMEM Andrew Morton
2020-12-15  3:10 ` [patch 119/200] mm: introduce debug_pagealloc_{map,unmap}_pages() helpers Andrew Morton
2020-12-15  3:10 ` [patch 120/200] PM: hibernate: make direct map manipulations more explicit Andrew Morton
2020-12-15  3:10 ` [patch 121/200] arch, mm: restore dependency of __kernel_map_pages() on DEBUG_PAGEALLOC Andrew Morton
2020-12-15  3:10 ` [patch 122/200] arch, mm: make kernel_page_present() always available Andrew Morton
2020-12-15  3:10 ` [patch 123/200] mm, page_alloc: clean up pageset high and batch update Andrew Morton
2020-12-15  3:10 ` [patch 124/200] mm, page_alloc: calculate pageset high and batch once per zone Andrew Morton
2020-12-15  3:10 ` [patch 125/200] mm, page_alloc: remove setup_pageset() Andrew Morton
2020-12-15  3:10 ` [patch 126/200] mm, page_alloc: simplify pageset_update() Andrew Morton
2020-12-15  3:10 ` [patch 127/200] mm, page_alloc: cache pageset high and batch in struct zone Andrew Morton
2020-12-15  3:10 ` [patch 128/200] mm, page_alloc: move draining pcplists to page isolation users Andrew Morton
2020-12-15  3:10 ` [patch 129/200] mm, page_alloc: disable pcplists during memory offline Andrew Morton
2020-12-15  3:11 ` [patch 130/200] include/linux/page-flags.h: remove unused __[Set|Clear]PagePrivate Andrew Morton
2020-12-15  3:11 ` [patch 131/200] mm/page-flags: fix comment Andrew Morton
2020-12-15  3:11 ` [patch 132/200] mm/page_alloc: add __free_pages() documentation Andrew Morton
2020-12-15  3:11 ` [patch 133/200] mm/page_alloc: mark some symbols with static keyword Andrew Morton
2020-12-15  3:11 ` [patch 134/200] mm/page_alloc: clear all pages in post_alloc_hook() with init_on_alloc=1 Andrew Morton
2020-12-15  3:11 ` [patch 135/200] init/main: fix broken buffer_init when DEFERRED_STRUCT_PAGE_INIT set Andrew Morton
2020-12-15  3:11 ` [patch 136/200] mm: page_alloc: refactor setup_per_zone_lowmem_reserve() Andrew Morton
2020-12-15  3:11 ` [patch 137/200] mm/page_alloc: speed up the iteration of max_order Andrew Morton
2020-12-15  3:11 ` [patch 138/200] mm,hwpoison: drain pcplists before bailing out for non-buddy zero-refcount page Andrew Morton
2020-12-15  3:11 ` [patch 139/200] mm,hwpoison: take free pages off the buddy freelists Andrew Morton
2020-12-15  3:11 ` [patch 140/200] mm,hwpoison: drop unneeded pcplist draining Andrew Morton
2020-12-15  3:11 ` [patch 141/200] mm,hwpoison: refactor get_any_page Andrew Morton
2020-12-15  3:11 ` [patch 142/200] mm,hwpoison: disable pcplists before grabbing a refcount Andrew Morton
2020-12-15  3:11 ` [patch 143/200] mm,hwpoison: remove drain_all_pages from shake_page Andrew Morton
2020-12-15  3:11 ` [patch 144/200] mm,memory_failure: always pin the page in madvise_inject_error Andrew Morton
2020-12-15  3:11 ` [patch 145/200] mm,hwpoison: return -EBUSY when migration fails Andrew Morton
2020-12-15  3:11 ` [patch 146/200] mm/hugetlb.c: just use put_page_testzero() instead of page_count() Andrew Morton
2020-12-15  3:11 ` [patch 147/200] include/linux/huge_mm.h: remove extern keyword Andrew Morton
2020-12-15  3:12 ` [patch 148/200] khugepaged: add parameter explanations for kernel-doc markup Andrew Morton
2020-12-15  3:12 ` [patch 149/200] mm: hugetlb: fix type of delta parameter and related local variables in gather_surplus_pages() Andrew Morton
2020-12-15  3:12 ` [patch 150/200] mm,hugetlb: remove unneeded initialization Andrew Morton
2020-12-15  3:12 ` [patch 151/200] hugetlb: fix an error code in hugetlb_reserve_pages() Andrew Morton
2020-12-15  3:12 ` [patch 152/200] mm: don't wake kswapd prematurely when watermark boosting is disabled Andrew Morton
2020-12-15  3:12 ` [patch 153/200] mm/vmscan: drop unneeded assignment in kswapd() Andrew Morton
2020-12-15  3:12 ` [patch 154/200] mm/vmscan.c: remove the filename in the top of file comment Andrew Morton
2020-12-15  3:12 ` [patch 155/200] mm/page_isolation: do not isolate the max order page Andrew Morton
2020-12-15  3:12 ` [patch 156/200] z3fold: simplify freeing slots Andrew Morton
2020-12-15  3:12 ` [patch 157/200] z3fold: stricter locking and more careful reclaim Andrew Morton
2020-12-15  3:12 ` [patch 158/200] z3fold: remove preempt disabled sections for RT Andrew Morton
2020-12-15  3:12 ` [patch 159/200] mm/compaction: rename 'start_pfn' to 'iteration_start_pfn' in compact_zone() Andrew Morton
2020-12-15  3:12 ` [patch 160/200] mm/compaction: move compaction_suitable's comment to right place Andrew Morton
2020-12-15  3:12 ` [patch 161/200] mm/compaction: make defer_compaction and compaction_deferred static Andrew Morton
2020-12-15  3:12 ` [patch 162/200] mm/oom_kill: change comment and rename is_dump_unreclaim_slabs() Andrew Morton
2020-12-15  3:12 ` [patch 163/200] mm/migrate.c: fix comment spelling Andrew Morton
2020-12-15  3:12 ` [patch 164/200] mm/migrate.c: optimize migrate_vma_pages() mmu notifier Andrew Morton
2020-12-15  3:12 ` [patch 165/200] mm: support THPs in zero_user_segments Andrew Morton
2020-12-15  3:13 ` [patch 166/200] mm: truncate_complete_page() does not exist any more Andrew Morton
2020-12-15  3:13 ` [patch 167/200] mm: migrate: simplify the logic for handling permanent failure Andrew Morton
2020-12-15  3:13 ` [patch 168/200] mm: migrate: skip shared exec THP for NUMA balancing Andrew Morton
2020-12-15  3:13 ` [patch 169/200] mm: migrate: clean up migrate_prep{_local} Andrew Morton
2020-12-15  3:13 ` [patch 170/200] mm: migrate: return -ENOSYS if THP migration is unsupported Andrew Morton
2020-12-15  3:13 ` [patch 171/200] mm: migrate: remove unused parameter in migrate_vma_insert_page() Andrew Morton
2020-12-15  3:13 ` [patch 172/200] mm/cma.c: remove redundant cma_mutex lock Andrew Morton
2020-12-15  3:13 ` [patch 173/200] mm: cma: improve pr_debug log in cma_release() Andrew Morton
2020-12-15  3:13 ` [patch 174/200] mm, page_alloc: do not rely on the order of page_poison and init_on_alloc/free parameters Andrew Morton
2020-12-15  3:13 ` [patch 175/200] mm, page_poison: use static key more efficiently Andrew Morton
2020-12-15  3:13 ` [patch 176/200] kernel/power: allow hibernation with page_poison sanity checking Andrew Morton
2020-12-15  3:13 ` [patch 177/200] mm, page_poison: remove CONFIG_PAGE_POISONING_NO_SANITY Andrew Morton
2020-12-15  3:13 ` [patch 178/200] mm, page_poison: remove CONFIG_PAGE_POISONING_ZERO Andrew Morton
2020-12-15  3:13 ` [patch 179/200] userfaultfd: add UFFD_USER_MODE_ONLY Andrew Morton
2020-12-15  3:13 ` [patch 180/200] userfaultfd: add user-mode only option to unprivileged_userfaultfd sysctl knob Andrew Morton
2020-12-15  3:13 ` [patch 181/200] userfaultfd: selftests: make __{s,u}64 format specifiers portable Andrew Morton
2020-12-15  3:14 ` [patch 182/200] userfaultfd/selftests: always dump something in modes Andrew Morton
2020-12-15  3:14 ` [patch 183/200] userfaultfd/selftests: fix retval check for userfaultfd_open() Andrew Morton
2020-12-15  3:14 ` [patch 184/200] userfaultfd/selftests: hint the test runner on required privilege Andrew Morton
2020-12-15  3:14 ` [patch 185/200] mm/zswap: make struct kernel_param_ops definitions const Andrew Morton
2020-12-15  3:14 ` [patch 186/200] mm/zswap: fix passing zero to 'PTR_ERR' warning Andrew Morton
2020-12-15  3:14 ` [patch 187/200] mm/zswap: move to use crypto_acomp API for hardware acceleration Andrew Morton
2020-12-15  3:14 ` [patch 188/200] mm/zsmalloc.c: rework the list_add code in insert_zspage() Andrew Morton
2020-12-15  3:14 ` [patch 189/200] mm/process_vm_access: remove redundant initialization of iov_r Andrew Morton
2020-12-15  3:14 ` [patch 190/200] zram: support page writeback Andrew Morton
2020-12-15  3:14 ` [patch 191/200] zram: add stat to gather incompressible pages since zram set up Andrew Morton
2020-12-15  3:14 ` [patch 192/200] zram: break the strict dependency from lzo Andrew Morton
2020-12-15  3:14 ` [patch 193/200] mm: fix kernel-doc markups Andrew Morton
2020-12-15  3:14 ` [patch 194/200] mm: use sysfs_emit for struct kobject * uses Andrew Morton
2020-12-15  3:14 ` [patch 195/200] mm: huge_memory: convert remaining use of sprintf to sysfs_emit and neatening Andrew Morton
2020-12-15  3:14 ` [patch 196/200] mm:backing-dev: use sysfs_emit in macro defining functions Andrew Morton
2020-12-15  3:14 ` [patch 197/200] mm: shmem: convert shmem_enabled_show to use sysfs_emit_at Andrew Morton
2020-12-15  3:14 ` [patch 198/200] mm: slub: convert sysfs sprintf family to sysfs_emit/sysfs_emit_at Andrew Morton
2020-12-15  3:15 ` [patch 199/200] mm: fix fall-through warnings for Clang Andrew Morton
2020-12-15  3:15 ` [patch 200/200] mm: cleanup kstrto*() usage Andrew Morton
2020-12-15  3:25 ` incoming Linus Torvalds
2020-12-15  3:30   ` incoming Linus Torvalds
2020-12-15 14:04     ` incoming Konstantin Ryabitsev

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=20201215030725.0iV2jluE9%akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=almasrymina@google.com \
    --cc=aneesh.kumar@linux.ibm.com \
    --cc=anshuman.khandual@arm.com \
    --cc=arnd@arndb.de \
    --cc=bgeffon@google.com \
    --cc=bp@alien8.de \
    --cc=catalin.marinas@arm.com \
    --cc=christian.brauner@ubuntu.com \
    --cc=dave.hansen@intel.com \
    --cc=frederic@kernel.org \
    --cc=gshan@redhat.com \
    --cc=hnaveed@wavecomp.com \
    --cc=hpa@zytor.com \
    --cc=jhubbard@nvidia.com \
    --cc=justin.he@arm.com \
    --cc=kaleshsingh@google.com \
    --cc=keescook@chromium.org \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=krzk@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linuxram@us.ibm.com \
    --cc=lokeshgidra@google.com \
    --cc=mark.rutland@arm.com \
    --cc=masahiroy@kernel.org \
    --cc=mhiramat@kernel.org \
    --cc=minchan@google.com \
    --cc=mingo@redhat.com \
    --cc=mm-commits@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=rcampbell@nvidia.com \
    --cc=rppt@kernel.org \
    --cc=samitolvanen@google.com \
    --cc=sandipan@linux.ibm.com \
    --cc=shuah@kernel.org \
    --cc=sjpark@amazon.de \
    --cc=steven.price@arm.com \
    --cc=surenb@google.com \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    --cc=will@kernel.org \
    --cc=ziy@nvidia.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).