Allow changing devices alignment when creating
a new child device.
Signed-off-by: Joao Martins <[email protected]>
---
Documentation/daxctl/daxctl-create-device.txt | 8 ++++++++
daxctl/device.c | 8 ++++++++
2 files changed, 16 insertions(+)
diff --git a/Documentation/daxctl/daxctl-create-device.txt
b/Documentation/daxctl/daxctl-create-device.txt
index 648d2541f833..adc7b395125e 100644
--- a/Documentation/daxctl/daxctl-create-device.txt
+++ b/Documentation/daxctl/daxctl-create-device.txt
@@ -87,6 +87,14 @@ OPTIONS
The size must be a multiple of the region alignment.
+-a::
+--align::
+ Applications that want to establish dax memory mappings with
+ page table entries greater than system base page size (4K on
+ x86) need a device that is sufficiently aligned. This defaults
+ to 2M. Note that "devdax" mode enforces all mappings to be
+ aligned to this value, i.e. it fails unaligned mapping attempts.
+
-u::
--human::
By default the command will output machine-friendly raw-integer
diff --git a/daxctl/device.c b/daxctl/device.c
index a5394577908d..3c2d4e3d8b48 100644
--- a/daxctl/device.c
+++ b/daxctl/device.c
@@ -216,6 +216,8 @@ static const char *parse_device_options(int argc, const
char **argv,
case ACTION_CREATE:
if (param.size)
size = __parse_size64(param.size, &units);
+ if (param.align)
+ align = __parse_size64(param.align, &units);
/* fall through */
case ACTION_ONLINE:
if (param.no_movable)
@@ -538,6 +540,12 @@ static int do_create(struct daxctl_region *region, long
long val,
if (val <= 0)
return -ENOSPC;
+ if (align > 0) {
+ rc = daxctl_dev_set_align(dev, align);
+ if (rc < 0)
+ return rc;
+ }
+
rc = daxctl_dev_set_size(dev, val);
if (rc < 0)
return rc;
--
1.8.3.1
_______________________________________________
Linux-nvdimm mailing list -- [email protected]
To unsubscribe send an email to [email protected]