On Sat, Apr 22, 2017 at 11:11 AM, Jerome Glisse <jglisse@xxxxxxxxxx> wrote:
On Fri, Apr 21, 2017 at 10:30:01PM -0700, Dan Williams wrote:
On Fri, Apr 21, 2017 at 8:30 PM, JÃrÃme Glisse <jglisse@xxxxxxxxxx> wrote:
[...]
+/*
+ * Specialize ZONE_DEVICE memory into multiple types each having differents
+ * usage.
+ *
+ * MEMORY_DEVICE_PERSISTENT:
+ * Persistent device memory (pmem): struct page might be allocated in different
+ * memory and architecture might want to perform special actions. It is similar
+ * to regular memory, in that the CPU can access it transparently. However,
+ * it is likely to have different bandwidth and latency than regular memory.
+ * See Documentation/nvdimm/nvdimm.txt for more information.
+ *
+ * MEMORY_DEVICE_UNADDRESSABLE:
+ * Device memory that is not directly addressable by the CPU: CPU can neither
+ * read nor write _UNADDRESSABLE memory. In this case, we do still have struct
+ * pages backing the device memory. Doing so simplifies the implementation, but
+ * it is important to remember that there are certain points at which the struct
+ * page must be treated as an opaque object, rather than a "normal" struct page.
+ * A more complete discussion of unaddressable memory may be found in
+ * include/linux/hmm.h and Documentation/vm/hmm.txt.
+ */
+enum memory_type {
+ MEMORY_DEVICE_PERSISTENT = 0,
+ MEMORY_DEVICE_UNADDRESSABLE,
+};
Ok, this is a bikeshed, but I think it is important. I think these
should be called MEMORY_DEVICE_PUBLIC and MEMORY_DEVICE_PRIVATE. The
reason is that persistence has nothing to do with the code paths that
deal with the pmem use case of ZONE_DEVICE. The only property the mm
cares about is that the address range behaves the same as host memory
for dma and cpu accesses. The "unaddressable" designation always
confuses me because a memory range isn't memory if it's
"unaddressable". It is addressable, it's just "private" to the device.
I can change the name but the memory is truely unaddressable, the CPU
can not access it whatsoever (well it can access a small window but
even that is not guaranteed).
Understood, but that's still "addressable only by certain agents or
through a proxy" which seems closer to "private" to me.