[PATCH 3/9] dax: add more kmem device infrastructure

From: Dave Hansen
Date: Mon Oct 22 2018 - 16:18:45 EST



The previous patch is a simple copy of the pmem driver. This
makes it easy while this is in development to keep the pmem
and kmem code in sync.

This actually adds some necessary infrastructure for the new
driver to compile.

Cc: Dan Williams <dan.j.williams@xxxxxxxxx>
Cc: Dave Jiang <dave.jiang@xxxxxxxxx>
Cc: Ross Zwisler <zwisler@xxxxxxxxxx>
Cc: Vishal Verma <vishal.l.verma@xxxxxxxxx>
Cc: Tom Lendacky <thomas.lendacky@xxxxxxx>
Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
Cc: Michal Hocko <mhocko@xxxxxxxx>
Cc: linux-nvdimm@xxxxxxxxxxxx
Cc: linux-kernel@xxxxxxxxxxxxxxx
Cc: linux-mm@xxxxxxxxx
Cc: Huang Ying <ying.huang@xxxxxxxxx>
Cc: Fengguang Wu <fengguang.wu@xxxxxxxxx>

---

b/drivers/dax/kmem.c | 10 +++++-----
b/include/uapi/linux/ndctl.h | 2 ++
2 files changed, 7 insertions(+), 5 deletions(-)

diff -puN drivers/dax/kmem.c~dax-kmem-try-again-2018-2-header drivers/dax/kmem.c
--- a/drivers/dax/kmem.c~dax-kmem-try-again-2018-2-header 2018-10-22 13:12:22.000930392 -0700
+++ b/drivers/dax/kmem.c 2018-10-22 13:12:22.005930392 -0700
@@ -27,7 +27,7 @@ static struct dax_kmem *to_dax_kmem(stru

static void dax_kmem_percpu_release(struct percpu_ref *ref)
{
- struct dax_kmem *dax_kmem = to_dax_pmem(ref);
+ struct dax_kmem *dax_kmem = to_dax_kmem(ref);

dev_dbg(dax_kmem->dev, "trace\n");
complete(&dax_kmem->cmp);
@@ -36,7 +36,7 @@ static void dax_kmem_percpu_release(stru
static void dax_kmem_percpu_exit(void *data)
{
struct percpu_ref *ref = data;
- struct dax_kmem *dax_kmem = to_dax_pmem(ref);
+ struct dax_kmem *dax_kmem = to_dax_kmem(ref);

dev_dbg(dax_kmem->dev, "trace\n");
wait_for_completion(&dax_kmem->cmp);
@@ -46,7 +46,7 @@ static void dax_kmem_percpu_exit(void *d
static void dax_kmem_percpu_kill(void *data)
{
struct percpu_ref *ref = data;
- struct dax_kmem *dax_kmem = to_dax_pmem(ref);
+ struct dax_kmem *dax_kmem = to_dax_kmem(ref);

dev_dbg(dax_kmem->dev, "trace\n");
percpu_ref_kill(ref);
@@ -142,11 +142,11 @@ static struct nd_device_driver dax_kmem_
.drv = {
.name = "dax_kmem",
},
- .type = ND_DRIVER_DAX_PMEM,
+ .type = ND_DRIVER_DAX_KMEM,
};

module_nd_driver(dax_kmem_driver);

MODULE_LICENSE("GPL v2");
MODULE_AUTHOR("Intel Corporation");
-MODULE_ALIAS_ND_DEVICE(ND_DEVICE_DAX_PMEM);
+MODULE_ALIAS_ND_DEVICE(ND_DEVICE_DAX_KMEM);
diff -puN include/uapi/linux/ndctl.h~dax-kmem-try-again-2018-2-header include/uapi/linux/ndctl.h
--- a/include/uapi/linux/ndctl.h~dax-kmem-try-again-2018-2-header 2018-10-22 13:12:22.002930392 -0700
+++ b/include/uapi/linux/ndctl.h 2018-10-22 13:12:22.005930392 -0700
@@ -197,6 +197,7 @@ static inline const char *nvdimm_cmd_nam
#define ND_DEVICE_NAMESPACE_PMEM 5 /* PMEM namespace (may alias with BLK) */
#define ND_DEVICE_NAMESPACE_BLK 6 /* BLK namespace (may alias with PMEM) */
#define ND_DEVICE_DAX_PMEM 7 /* Device DAX interface to pmem */
+#define ND_DEVICE_DAX_KMEM 8 /* Normal kernel-managed system memory */

enum nd_driver_flags {
ND_DRIVER_DIMM = 1 << ND_DEVICE_DIMM,
@@ -206,6 +207,7 @@ enum nd_driver_flags {
ND_DRIVER_NAMESPACE_PMEM = 1 << ND_DEVICE_NAMESPACE_PMEM,
ND_DRIVER_NAMESPACE_BLK = 1 << ND_DEVICE_NAMESPACE_BLK,
ND_DRIVER_DAX_PMEM = 1 << ND_DEVICE_DAX_PMEM,
+ ND_DRIVER_DAX_KMEM = 1 << ND_DEVICE_DAX_KMEM,
};

enum {
_