All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Williams <dan.j.williams@intel.com>
To: linux-kernel@vger.kernel.org
Cc: axboe@kernel.dk, riel@redhat.com, linux-nvdimm@lists.01.org,
	mingo@kernel.org, linux-fsdevel@vger.kernel.org, mgorman@suse.de,
	"H. Peter Anvin" <hpa@zytor.com>, Tejun Heo <tj@kernel.org>,
	akpm@linux-foundation.org,
	Linus Torvalds <torvalds@linux-foundation.org>,
	hch@lst.de
Subject: [PATCH v2 01/10] arch: introduce __pfn_t for persistent memory i/o
Date: Wed, 06 May 2015 16:04:59 -0400	[thread overview]
Message-ID: <20150506200459.40425.80269.stgit@dwillia2-desk3.amr.corp.intel.com> (raw)
In-Reply-To: <20150506200219.40425.74411.stgit@dwillia2-desk3.amr.corp.intel.com>

Introduce a type that encapsulates a page-frame-number that is
optionally backed by memmap (struct page).  This type will be used in
place of 'struct page *' instances in contexts where persistent memory
is being referenced (scatterlists for drivers, biovecs for the block
layer, etc).  The operations in those i/o paths that formerly required a
'struct page *' are to be converted to use __pfn_t aware equivalent
helpers.  Otherwise, in the absence of persistent memory, there is no
functional change and __pfn_t is an alias for a normal memory page.

It turns out that while 'struct page' references are used broadly in the
kernel I/O stacks the usage of 'struct page' based capabilities is very
shallow.  It is only used for populating bio_vecs and scatterlists for
the retrieval of dma addresses, and for temporary kernel mappings
(kmap).  Aside from kmap, these usages can be trivially converted to
operate on a pfn.

Indeed, kmap_atomic() is more problematic as it uses mm infrastructure,
via struct page, to setup and track temporary kernel mappings.  It would
be unfortunate if the kmap infrastructure escaped its 32-bit/HIGHMEM
bonds and leaked into 64-bit code.  Thankfully, it seems all that is
needed here is to convert kmap_atomic() callers, that want to opt-in to
supporting persistent memory, to use a new kmap_atomic_pfn_t().  Where
kmap_atomic_pfn_t() is enabled to re-use the existing ioremap() mapping
established by the driver for persistent memory.

Note, that as far as conceptually understanding __pfn_t is concerned,
'persistent memory' is really any address range in host memory not
covered by memmap.  Contrast this with pure iomem that is on an mmio
mapped bus like PCI and cannot be converted to a dma_addr_t by "pfn <<
PAGE_SHIFT".

Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Tejun Heo <tj@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---
 include/asm-generic/memory_model.h |    1 -
 include/asm-generic/pfn.h          |   51 ++++++++++++++++++++++++++++++++++++
 include/linux/mm.h                 |    1 +
 init/Kconfig                       |   13 +++++++++
 4 files changed, 65 insertions(+), 1 deletion(-)
 create mode 100644 include/asm-generic/pfn.h

diff --git a/include/asm-generic/memory_model.h b/include/asm-generic/memory_model.h
index 14909b0b9cae..1b0ae21fd8ff 100644
--- a/include/asm-generic/memory_model.h
+++ b/include/asm-generic/memory_model.h
@@ -70,7 +70,6 @@
 #endif /* CONFIG_FLATMEM/DISCONTIGMEM/SPARSEMEM */
 
 #define page_to_pfn __page_to_pfn
-#define pfn_to_page __pfn_to_page
 
 #endif /* __ASSEMBLY__ */
 
diff --git a/include/asm-generic/pfn.h b/include/asm-generic/pfn.h
new file mode 100644
index 000000000000..91171e0285d9
--- /dev/null
+++ b/include/asm-generic/pfn.h
@@ -0,0 +1,51 @@
+#ifndef __ASM_PFN_H
+#define __ASM_PFN_H
+
+#ifndef __pfn_to_phys
+#define __pfn_to_phys(pfn)      ((dma_addr_t)(pfn) << PAGE_SHIFT)
+#endif
+
+static inline struct page *pfn_to_page(unsigned long pfn)
+{
+	return __pfn_to_page(pfn);
+}
+
+/*
+ * __pfn_t: encapsulates a page-frame number that is optionally backed
+ * by memmap (struct page).  This type will be used in place of a
+ * 'struct page *' instance in contexts where unmapped memory (usually
+ * persistent memory) is being referenced (scatterlists for drivers,
+ * biovecs for the block layer, etc).
+ */
+typedef struct {
+	union {
+		unsigned long pfn;
+		struct page *page;
+	};
+} __pfn_t;
+
+static inline struct page *__pfn_t_to_page(__pfn_t pfn)
+{
+#if IS_ENABLED(CONFIG_PMEM_IO)
+	if (pfn.pfn < PAGE_OFFSET)
+		return NULL;
+#endif
+	return pfn.page;
+}
+
+static inline dma_addr_t __pfn_t_to_phys(__pfn_t pfn)
+{
+#if IS_ENABLED(CONFIG_PMEM_IO)
+	if (pfn.pfn < PAGE_OFFSET)
+		return __pfn_to_phys(pfn.pfn);
+#endif
+	return __pfn_to_phys(page_to_pfn(pfn.page));
+}
+
+static inline __pfn_t page_to_pfn_t(struct page *page)
+{
+	__pfn_t pfn = { .page = page };
+
+	return pfn;
+}
+#endif /* __ASM_PFN_H */
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 0755b9fd03a7..9d35cff41c12 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -52,6 +52,7 @@ extern int sysctl_legacy_va_layout;
 #include <asm/page.h>
 #include <asm/pgtable.h>
 #include <asm/processor.h>
+#include <asm-generic/pfn.h>
 
 #ifndef __pa_symbol
 #define __pa_symbol(x)  __pa(RELOC_HIDE((unsigned long)(x), 0))
diff --git a/init/Kconfig b/init/Kconfig
index dc24dec60232..7d2ad350fd29 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -1764,6 +1764,19 @@ config PROFILING
 	  Say Y here to enable the extended profiling support mechanisms used
 	  by profilers such as OProfile.
 
+config PMEM_IO
+	default n
+	bool "Support for I/O, DAX, DMA, RDMA to unmapped (persistent) memory" if EXPERT
+	help
+	  Say Y here to enable the Block and Networking stacks to
+	  reference memory that is not mapped.  This is usually the
+	  case if you have large quantities of persistent memory
+	  relative to DRAM.  Enabling this option may increase the
+	  kernel size by a few kilobytes as it instructs the kernel
+	  that a __pfn_t may reference unmapped memory.  Disabling
+	  this option instructs the kernel that a __pfn_t always
+	  references mapped memory.
+
 #
 # Place an empty function call at each tracepoint site. Can be
 # dynamically changed for a probe function.


WARNING: multiple messages have this Message-ID (diff)
From: Dan Williams <dan.j.williams@intel.com>
To: linux-kernel@vger.kernel.org
Cc: axboe@kernel.dk, riel@redhat.com, linux-nvdimm@ml01.01.org,
	mingo@kernel.org, linux-fsdevel@vger.kernel.org, mgorman@suse.de,
	"H. Peter Anvin" <hpa@zytor.com>, Tejun Heo <tj@kernel.org>,
	akpm@linux-foundation.org,
	Linus Torvalds <torvalds@linux-foundation.org>,
	hch@lst.de
Subject: [PATCH v2 01/10] arch: introduce __pfn_t for persistent memory i/o
Date: Wed, 06 May 2015 16:04:59 -0400	[thread overview]
Message-ID: <20150506200459.40425.80269.stgit@dwillia2-desk3.amr.corp.intel.com> (raw)
In-Reply-To: <20150506200219.40425.74411.stgit@dwillia2-desk3.amr.corp.intel.com>

Introduce a type that encapsulates a page-frame-number that is
optionally backed by memmap (struct page).  This type will be used in
place of 'struct page *' instances in contexts where persistent memory
is being referenced (scatterlists for drivers, biovecs for the block
layer, etc).  The operations in those i/o paths that formerly required a
'struct page *' are to be converted to use __pfn_t aware equivalent
helpers.  Otherwise, in the absence of persistent memory, there is no
functional change and __pfn_t is an alias for a normal memory page.

It turns out that while 'struct page' references are used broadly in the
kernel I/O stacks the usage of 'struct page' based capabilities is very
shallow.  It is only used for populating bio_vecs and scatterlists for
the retrieval of dma addresses, and for temporary kernel mappings
(kmap).  Aside from kmap, these usages can be trivially converted to
operate on a pfn.

Indeed, kmap_atomic() is more problematic as it uses mm infrastructure,
via struct page, to setup and track temporary kernel mappings.  It would
be unfortunate if the kmap infrastructure escaped its 32-bit/HIGHMEM
bonds and leaked into 64-bit code.  Thankfully, it seems all that is
needed here is to convert kmap_atomic() callers, that want to opt-in to
supporting persistent memory, to use a new kmap_atomic_pfn_t().  Where
kmap_atomic_pfn_t() is enabled to re-use the existing ioremap() mapping
established by the driver for persistent memory.

Note, that as far as conceptually understanding __pfn_t is concerned,
'persistent memory' is really any address range in host memory not
covered by memmap.  Contrast this with pure iomem that is on an mmio
mapped bus like PCI and cannot be converted to a dma_addr_t by "pfn <<
PAGE_SHIFT".

Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Tejun Heo <tj@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---
 include/asm-generic/memory_model.h |    1 -
 include/asm-generic/pfn.h          |   51 ++++++++++++++++++++++++++++++++++++
 include/linux/mm.h                 |    1 +
 init/Kconfig                       |   13 +++++++++
 4 files changed, 65 insertions(+), 1 deletion(-)
 create mode 100644 include/asm-generic/pfn.h

diff --git a/include/asm-generic/memory_model.h b/include/asm-generic/memory_model.h
index 14909b0b9cae..1b0ae21fd8ff 100644
--- a/include/asm-generic/memory_model.h
+++ b/include/asm-generic/memory_model.h
@@ -70,7 +70,6 @@
 #endif /* CONFIG_FLATMEM/DISCONTIGMEM/SPARSEMEM */
 
 #define page_to_pfn __page_to_pfn
-#define pfn_to_page __pfn_to_page
 
 #endif /* __ASSEMBLY__ */
 
diff --git a/include/asm-generic/pfn.h b/include/asm-generic/pfn.h
new file mode 100644
index 000000000000..91171e0285d9
--- /dev/null
+++ b/include/asm-generic/pfn.h
@@ -0,0 +1,51 @@
+#ifndef __ASM_PFN_H
+#define __ASM_PFN_H
+
+#ifndef __pfn_to_phys
+#define __pfn_to_phys(pfn)      ((dma_addr_t)(pfn) << PAGE_SHIFT)
+#endif
+
+static inline struct page *pfn_to_page(unsigned long pfn)
+{
+	return __pfn_to_page(pfn);
+}
+
+/*
+ * __pfn_t: encapsulates a page-frame number that is optionally backed
+ * by memmap (struct page).  This type will be used in place of a
+ * 'struct page *' instance in contexts where unmapped memory (usually
+ * persistent memory) is being referenced (scatterlists for drivers,
+ * biovecs for the block layer, etc).
+ */
+typedef struct {
+	union {
+		unsigned long pfn;
+		struct page *page;
+	};
+} __pfn_t;
+
+static inline struct page *__pfn_t_to_page(__pfn_t pfn)
+{
+#if IS_ENABLED(CONFIG_PMEM_IO)
+	if (pfn.pfn < PAGE_OFFSET)
+		return NULL;
+#endif
+	return pfn.page;
+}
+
+static inline dma_addr_t __pfn_t_to_phys(__pfn_t pfn)
+{
+#if IS_ENABLED(CONFIG_PMEM_IO)
+	if (pfn.pfn < PAGE_OFFSET)
+		return __pfn_to_phys(pfn.pfn);
+#endif
+	return __pfn_to_phys(page_to_pfn(pfn.page));
+}
+
+static inline __pfn_t page_to_pfn_t(struct page *page)
+{
+	__pfn_t pfn = { .page = page };
+
+	return pfn;
+}
+#endif /* __ASM_PFN_H */
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 0755b9fd03a7..9d35cff41c12 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -52,6 +52,7 @@ extern int sysctl_legacy_va_layout;
 #include <asm/page.h>
 #include <asm/pgtable.h>
 #include <asm/processor.h>
+#include <asm-generic/pfn.h>
 
 #ifndef __pa_symbol
 #define __pa_symbol(x)  __pa(RELOC_HIDE((unsigned long)(x), 0))
diff --git a/init/Kconfig b/init/Kconfig
index dc24dec60232..7d2ad350fd29 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -1764,6 +1764,19 @@ config PROFILING
 	  Say Y here to enable the extended profiling support mechanisms used
 	  by profilers such as OProfile.
 
+config PMEM_IO
+	default n
+	bool "Support for I/O, DAX, DMA, RDMA to unmapped (persistent) memory" if EXPERT
+	help
+	  Say Y here to enable the Block and Networking stacks to
+	  reference memory that is not mapped.  This is usually the
+	  case if you have large quantities of persistent memory
+	  relative to DRAM.  Enabling this option may increase the
+	  kernel size by a few kilobytes as it instructs the kernel
+	  that a __pfn_t may reference unmapped memory.  Disabling
+	  this option instructs the kernel that a __pfn_t always
+	  references mapped memory.
+
 #
 # Place an empty function call at each tracepoint site. Can be
 # dynamically changed for a probe function.


  reply	other threads:[~2015-05-06 20:04 UTC|newest]

Thread overview: 180+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-06 20:04 [PATCH v2 00/10] evacuate struct page from the block layer, introduce __pfn_t Dan Williams
2015-05-06 20:04 ` Dan Williams
2015-05-06 20:04 ` Dan Williams [this message]
2015-05-06 20:04   ` [PATCH v2 01/10] arch: introduce __pfn_t for persistent memory i/o Dan Williams
2015-05-07 14:55   ` Stephen Rothwell
2015-05-07 14:55     ` Stephen Rothwell
2015-05-08  0:21     ` Dan Williams
2015-05-08  0:21       ` Dan Williams
2015-05-06 20:05 ` [PATCH v2 02/10] block: add helpers for accessing a bio_vec page Dan Williams
2015-05-06 20:05   ` Dan Williams
2015-05-08 15:59   ` Dan Williams
2015-05-08 15:59     ` Dan Williams
2015-05-06 20:05 ` [PATCH v2 03/10] block: convert .bv_page to .bv_pfn bio_vec Dan Williams
2015-05-06 20:05   ` Dan Williams
2015-05-06 20:05 ` [PATCH v2 04/10] dma-mapping: allow archs to optionally specify a ->map_pfn() operation Dan Williams
2015-05-06 20:05   ` Dan Williams
2015-05-06 20:05 ` [PATCH v2 05/10] scatterlist: use sg_phys() Dan Williams
2015-05-06 20:05   ` Dan Williams
2015-05-06 20:05 ` [PATCH v2 06/10] scatterlist: support "page-less" (__pfn_t only) entries Dan Williams
2015-05-06 20:05   ` Dan Williams
2015-05-06 20:05 ` [PATCH v2 07/10] x86: support dma_map_pfn() Dan Williams
2015-05-06 20:05   ` Dan Williams
2015-05-06 20:05 ` [PATCH v2 08/10] x86: support kmap_atomic_pfn_t() for persistent memory Dan Williams
2015-05-06 20:05   ` Dan Williams
2015-05-06 20:20   ` [Linux-nvdimm] " Dan Williams
2015-05-06 20:20     ` Dan Williams
2015-05-06 20:05 ` [PATCH v2 09/10] dax: convert to __pfn_t Dan Williams
2015-05-06 20:05   ` Dan Williams
2015-05-06 20:05 ` [PATCH v2 10/10] block: base support for pfn i/o Dan Williams
2015-05-06 20:05   ` Dan Williams
2015-05-06 20:50 ` [PATCH v2 00/10] evacuate struct page from the block layer, introduce __pfn_t Al Viro
2015-05-06 20:50   ` Al Viro
2015-05-06 22:10 ` Linus Torvalds
2015-05-06 22:10   ` Linus Torvalds
2015-05-06 22:10   ` Linus Torvalds
2015-05-06 23:47   ` Dan Williams
2015-05-06 23:47     ` Dan Williams
2015-05-06 23:47     ` Dan Williams
2015-05-07  0:19     ` Linus Torvalds
2015-05-07  0:19       ` Linus Torvalds
2015-05-07  0:19       ` Linus Torvalds
2015-05-07  2:36       ` Dan Williams
2015-05-07  2:36         ` Dan Williams
2015-05-07  2:36         ` Dan Williams
2015-05-07  9:02         ` Ingo Molnar
2015-05-07  9:02           ` Ingo Molnar
2015-05-07  9:02           ` Ingo Molnar
2015-05-07 14:42           ` Ingo Molnar
2015-05-07 14:42             ` Ingo Molnar
2015-05-07 14:42             ` Ingo Molnar
2015-05-07 15:52             ` Dan Williams
2015-05-07 15:52               ` Dan Williams
2015-05-07 15:52               ` Dan Williams
2015-05-07 17:52               ` Ingo Molnar
2015-05-07 17:52                 ` Ingo Molnar
2015-05-07 17:52                 ` Ingo Molnar
2015-05-07 15:00         ` Linus Torvalds
2015-05-07 15:00           ` Linus Torvalds
2015-05-07 15:00           ` Linus Torvalds
2015-05-07 15:40           ` Dan Williams
2015-05-07 15:40             ` Dan Williams
2015-05-07 15:40             ` Dan Williams
2015-05-07 15:58             ` Linus Torvalds
2015-05-07 15:58               ` Linus Torvalds
2015-05-07 15:58               ` Linus Torvalds
2015-05-07 16:03               ` Dan Williams
2015-05-07 16:03                 ` Dan Williams
2015-05-07 16:03                 ` Dan Williams
2015-05-07 17:36                 ` Ingo Molnar
2015-05-07 17:36                   ` Ingo Molnar
2015-05-07 17:36                   ` Ingo Molnar
2015-05-07 17:42                   ` Dan Williams
2015-05-07 17:42                     ` Dan Williams
2015-05-07 17:42                     ` Dan Williams
2015-05-07 17:56                     ` Dave Hansen
2015-05-07 17:56                       ` Dave Hansen
2015-05-07 17:56                       ` Dave Hansen
2015-05-07 19:11                       ` Ingo Molnar
2015-05-07 19:11                         ` Ingo Molnar
2015-05-07 19:11                         ` Ingo Molnar
2015-05-07 19:36                         ` Jerome Glisse
2015-05-07 19:36                           ` Jerome Glisse
2015-05-07 19:36                           ` Jerome Glisse
2015-05-07 19:48                           ` Ingo Molnar
2015-05-07 19:48                             ` Ingo Molnar
2015-05-07 19:48                             ` Ingo Molnar
2015-05-07 19:53                             ` Ingo Molnar
2015-05-07 19:53                               ` Ingo Molnar
2015-05-07 19:53                               ` Ingo Molnar
2015-05-07 20:18                               ` Jerome Glisse
2015-05-07 20:18                                 ` Jerome Glisse
2015-05-07 20:18                                 ` Jerome Glisse
2015-05-08  5:37                                 ` Ingo Molnar
2015-05-08  5:37                                   ` Ingo Molnar
2015-05-08  5:37                                   ` Ingo Molnar
2015-05-08  9:20                                   ` Al Viro
2015-05-08  9:20                                     ` Al Viro
2015-05-08  9:26                                     ` Ingo Molnar
2015-05-08  9:26                                       ` Ingo Molnar
2015-05-08 10:00                                       ` Al Viro
2015-05-08 10:00                                         ` Al Viro
2015-05-08 13:45                         ` Rik van Riel
2015-05-08 13:45                           ` Rik van Riel
2015-05-08 14:05                           ` Ingo Molnar
2015-05-08 14:05                             ` Ingo Molnar
2015-05-08 14:40                             ` John Stoffel
2015-05-08 14:40                               ` John Stoffel
2015-05-08 15:54                               ` Linus Torvalds
2015-05-08 15:54                                 ` Linus Torvalds
2015-05-08 16:28                                 ` Al Viro
2015-05-08 16:28                                   ` Al Viro
2015-05-08 16:59                                 ` Rik van Riel
2015-05-08 16:59                                   ` Rik van Riel
2015-05-09  1:14                                   ` Linus Torvalds
2015-05-09  1:14                                     ` Linus Torvalds
2015-05-09  3:02                                     ` Rik van Riel
2015-05-09  3:02                                       ` Rik van Riel
2015-05-09  3:52                                       ` Linus Torvalds
2015-05-09  3:52                                         ` Linus Torvalds
2015-05-09 21:56                                       ` Dave Chinner
2015-05-09 21:56                                         ` Dave Chinner
2015-05-09  8:45                                   ` "Directly mapped persistent memory page cache" Ingo Molnar
2015-05-09  8:45                                     ` Ingo Molnar
2015-05-09 15:51                                     ` Eric W. Biederman
2015-05-09 15:51                                       ` Eric W. Biederman
2015-05-10 10:07                                       ` Ingo Molnar
2015-05-10 10:07                                         ` Ingo Molnar
2015-05-09 18:24                                     ` Dan Williams
2015-05-09 18:24                                       ` Dan Williams
2015-05-10  9:46                                       ` Ingo Molnar
2015-05-10  9:46                                         ` Ingo Molnar
2015-05-10 17:29                                         ` Dan Williams
2015-05-10 17:29                                           ` Dan Williams
2015-05-11  8:25                                     ` Dave Chinner
2015-05-11  8:25                                       ` Dave Chinner
2015-05-11  9:18                                       ` Ingo Molnar
2015-05-11  9:18                                         ` Ingo Molnar
2015-05-11 10:12                                         ` Zuckerman, Boris
2015-05-11 10:12                                           ` Zuckerman, Boris
2015-05-11 10:38                                           ` Ingo Molnar
2015-05-11 10:38                                             ` Ingo Molnar
2015-05-11 14:51                                             ` Jeff Moyer
2015-05-11 14:51                                               ` Jeff Moyer
2015-05-12  0:53                                         ` Dave Chinner
2015-05-12  0:53                                           ` Dave Chinner
2015-05-12 14:47                                           ` Jerome Glisse
2015-05-12 14:47                                             ` Jerome Glisse
2015-05-12 14:47                                             ` Jerome Glisse
2015-06-05  5:43                                             ` Dan Williams
2015-06-05  5:43                                               ` Dan Williams
2015-05-11 14:31                                     ` Matthew Wilcox
2015-05-11 14:31                                       ` Matthew Wilcox
2015-05-11 20:01                                       ` Jerome Glisse
2015-05-11 20:01                                         ` Jerome Glisse
2015-05-11 20:01                                         ` Jerome Glisse
2015-05-08 20:40                                 ` [PATCH v2 00/10] evacuate struct page from the block layer, introduce __pfn_t John Stoffel
2015-05-08 20:40                                   ` John Stoffel
2015-05-08 14:54                             ` Rik van Riel
2015-05-08 14:54                               ` Rik van Riel
2015-05-07 17:43                 ` Linus Torvalds
2015-05-07 17:43                   ` Linus Torvalds
2015-05-07 17:43                   ` Linus Torvalds
2015-05-07 20:06                   ` Dan Williams
2015-05-07 20:06                     ` Dan Williams
2015-05-07 20:06                     ` Dan Williams
2015-05-07 16:18       ` Christoph Hellwig
2015-05-07 16:18         ` Christoph Hellwig
2015-05-07 16:18         ` Christoph Hellwig
2015-05-07 16:41         ` Dan Williams
2015-05-07 16:41           ` Dan Williams
2015-05-07 16:41           ` Dan Williams
2015-05-07 18:40           ` Ingo Molnar
2015-05-07 18:40             ` Ingo Molnar
2015-05-07 18:40             ` Ingo Molnar
2015-05-07 19:44             ` Dan Williams
2015-05-07 19:44               ` Dan Williams
2015-05-07 19:44               ` Dan Williams
2015-05-07 17:30         ` Jerome Glisse
2015-05-07 17:30           ` Jerome Glisse
2015-05-07 17:30           ` Jerome Glisse

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=20150506200459.40425.80269.stgit@dwillia2-desk3.amr.corp.intel.com \
    --to=dan.j.williams@intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=axboe@kernel.dk \
    --cc=hch@lst.de \
    --cc=hpa@zytor.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nvdimm@lists.01.org \
    --cc=mgorman@suse.de \
    --cc=mingo@kernel.org \
    --cc=riel@redhat.com \
    --cc=tj@kernel.org \
    --cc=torvalds@linux-foundation.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.