Changes since v1 [1]: Incorporates feedback received prior to April 24. 1/ Ingo said [2]:
"So why on earth is this whole concept and the naming itself ('drivers/block/nd/' stands for 'NFIT Defined', apparently) revolving around a specific 'firmware' mindset and revolving around specific, weirdly named, overly complicated looking firmware interfaces that come with their own new weird glossary??" Indeed, we of course consulted the NFIT specification to determine the shape of the sub-system, but then let its terms and data structures permeate too deep into the implementation. That is fixed now with all NFIT specifics factored out into acpi.c. The NFIT is no longer required reading to review libnd. Only three concepts are needed: i/ PMEM - contiguous memory range where cpu stores are persistent once they are flushed through the memory controller. ii/ BLK - mmio apertures (sliding windows) that can be programmed to access an aperture's-worth of persistent media at a time. iii/ DPA - "dimm-physical-address", address space local to a dimm. A dimm may provide both PMEM-mode and BLK-mode access to a range of DPA. libnd manages allocation of DPA to either PMEM or BLK-namespaces to resolve this aliasing. The v1..v2 diffstat below shows the migration of nfit-specifics to acpi.c and the new state of libnd being nfit-free. "nd" now only refers to "non-volatile devices". Note, reworked documentation will return once the review has settled. Documentation/blockdev/nd.txt | 867 --------------------- MAINTAINERS | 34 +- arch/ia64/kernel/efi.c | 5 +- arch/x86/kernel/e820.c | 11 +- arch/x86/kernel/pmem.c | 2 +- drivers/block/Makefile | 2 +- drivers/block/nd/Kconfig | 135 ++-- drivers/block/nd/Makefile | 32 +- drivers/block/nd/acpi.c | 1506 +++++++++++++++++++++++++++++++------ drivers/block/nd/acpi_nfit.h | 321 ++++++++ drivers/block/nd/blk.c | 27 +- drivers/block/nd/btt.c | 6 +- drivers/block/nd/btt_devs.c | 8 +- drivers/block/nd/bus.c | 337 +++++---- drivers/block/nd/core.c | 574 +------------- drivers/block/nd/dimm.c | 11 - drivers/block/nd/dimm_devs.c | 292 ++----- drivers/block/nd/e820.c | 100 +++ drivers/block/nd/libnd.h | 122 +++ drivers/block/nd/namespace_devs.c | 10 +- drivers/block/nd/nd-private.h | 107 +-- drivers/block/nd/nd.h | 91 +-- drivers/block/nd/nfit.h | 238 ------ drivers/block/nd/pmem.c | 56 +- drivers/block/nd/region.c | 78 +- drivers/block/nd/region_devs.c | 783 +++---------------- drivers/block/nd/test/iomap.c | 86 +-- drivers/block/nd/test/nfit.c | 1115 +++++++++++++++------------ drivers/block/nd/test/nfit_test.h | 15 +- include/uapi/linux/ndctl.h | 130 ++-- 30 files changed, 3166 insertions(+), 3935 deletions(-) delete mode 100644 Documentation/blockdev/nd.txt create mode 100644 drivers/block/nd/acpi_nfit.h create mode 100644 drivers/block/nd/e820.c create mode 100644 drivers/block/nd/libnd.h delete mode 100644 drivers/block/nd/nfit.h [1]: https://lists.01.org/pipermail/linux-nvdimm/2015-April/000484.html [2]: https://lists.01.org/pipermail/linux-nvdimm/2015-April/000520.html 2/ Christoph asked the pmem ida conversion to be moved to its own patch (done), and to consider leaving the current pmem.c in drivers/block/. Instead, I converted the e820-type-12 enabling to be the first non-ACPI-NFIT based consumer of libnd. The new nd_e820 driver simply registers e820-type-12 ranges as libnd PMEM regions. Among other things this conversion enables BTT for these ranges. The alternative is to move drivers/block/nd/nd.h internals out to include/linux/ which I think is worse. 3/ Toshi reported that the NFIT parsing fails to handle the case of a PMEM range with a single-dimm (non-aliasing) interleave description. Support for this case was added and is tested by default by the nfit_test.1 configuration. 4/ Toshi reported that we should not be treating a missing _STA property as a "dimm disabled by firmware" case. (fixed). 5/ Christoph noted that ND_ARCH_HAS_IOREMAP_CACHE needs to be moved to arch code. It is gone for now and we'll revisit when adding cached mappings back to the PMEM driver. 6/ Toshi mentioned that the presence of two different nd_bus_probe() functions was confusing. (cleaned up). 7/ Robert asked for s/btt_checksum/nd_btt_checksum/ (done). 8/ Linda asked for nfit_test to honor dynamic cma reservations via the cma= command line (done). The cma requirements have also been reduced to 128M as only the simulated DAX regions need CMA. The rest can use vmalloc(). --- Available here: git://git.kernel.org/pub/scm/linux/kernel/git/djbw/nvdimm nd-v2 --- Dan Williams (18): e820, efi: add ACPI 6.0 persistent memory types libnd, nd_acpi: initial libnd infrastructure and NFIT support nd_acpi, nfit-test: manufactured NFITs for interface development libnd: ndctl class device, and nd bus attributes libnd, nd_acpi: dimm/memory-devices libnd: ndctl.h, the nd ioctl abi libnd, nd_dimm: dimm driver and base libnd device-driver infrastructure libnd, nd_acpi: regions (block-data-window, persistent memory, volatile memory) libnd: support for legacy (non-aliasing) nvdimms pmem: use ida libnd, nd_pmem: add libnd support to the pmem driver libnd, nd_acpi: add interleave-set state-tracking infrastructure libnd: namespace indices: read and validate libnd: pmem label sets and namespace instantiation. libnd: blk labels and namespace instantiation libnd: write pmem label set libnd: write blk label set libnd: infrastructure for btt devices Ross Zwisler (1): libnd, nd_acpi, nd_blk: driver for BLK-mode access persistent memory Vishal Verma (1): nd_btt: atomic sector updates Documentation/blockdev/btt.txt | 273 ++++++ arch/arm64/kernel/efi.c | 1 arch/ia64/kernel/efi.c | 4 arch/x86/boot/compressed/eboot.c | 4 arch/x86/include/uapi/asm/e820.h | 1 arch/x86/kernel/e820.c | 26 + arch/x86/kernel/pmem.c | 2 arch/x86/platform/efi/efi.c | 3 drivers/block/Kconfig | 13 drivers/block/Makefile | 2 drivers/block/nd/Kconfig | 129 +++ drivers/block/nd/Makefile | 41 + drivers/block/nd/acpi.c | 1505 +++++++++++++++++++++++++++++++++ drivers/block/nd/acpi_nfit.h | 321 +++++++ drivers/block/nd/blk.c | 264 ++++++ drivers/block/nd/btt.c | 1423 +++++++++++++++++++++++++++++++ drivers/block/nd/btt.h | 185 ++++ drivers/block/nd/btt_devs.c | 443 ++++++++++ drivers/block/nd/bus.c | 770 +++++++++++++++++ drivers/block/nd/core.c | 471 ++++++++++ drivers/block/nd/dimm.c | 115 +++ drivers/block/nd/dimm_devs.c | 507 +++++++++++ drivers/block/nd/e820.c | 100 ++ drivers/block/nd/label.c | 925 ++++++++++++++++++++ drivers/block/nd/label.h | 143 +++ drivers/block/nd/libnd.h | 122 +++ drivers/block/nd/namespace_devs.c | 1701 +++++++++++++++++++++++++++++++++++++ drivers/block/nd/nd-private.h | 114 ++ drivers/block/nd/nd.h | 261 ++++++ drivers/block/nd/pmem.c | 114 ++ drivers/block/nd/region.c | 159 +++ drivers/block/nd/region_devs.c | 637 ++++++++++++++ drivers/block/nd/test/Makefile | 5 drivers/block/nd/test/iomap.c | 151 +++ drivers/block/nd/test/nfit.c | 1131 +++++++++++++++++++++++++ drivers/block/nd/test/nfit_test.h | 26 + include/linux/efi.h | 3 include/linux/nd.h | 98 ++ include/uapi/linux/Kbuild | 1 include/uapi/linux/ndctl.h | 199 ++++ 40 files changed, 12345 insertions(+), 48 deletions(-) create mode 100644 Documentation/blockdev/btt.txt create mode 100644 drivers/block/nd/Kconfig create mode 100644 drivers/block/nd/Makefile create mode 100644 drivers/block/nd/acpi.c create mode 100644 drivers/block/nd/acpi_nfit.h create mode 100644 drivers/block/nd/blk.c create mode 100644 drivers/block/nd/btt.c create mode 100644 drivers/block/nd/btt.h create mode 100644 drivers/block/nd/btt_devs.c create mode 100644 drivers/block/nd/bus.c create mode 100644 drivers/block/nd/core.c create mode 100644 drivers/block/nd/dimm.c create mode 100644 drivers/block/nd/dimm_devs.c create mode 100644 drivers/block/nd/e820.c create mode 100644 drivers/block/nd/label.c create mode 100644 drivers/block/nd/label.h create mode 100644 drivers/block/nd/libnd.h create mode 100644 drivers/block/nd/namespace_devs.c create mode 100644 drivers/block/nd/nd-private.h create mode 100644 drivers/block/nd/nd.h rename drivers/block/{pmem.c => nd/pmem.c} (68%) create mode 100644 drivers/block/nd/region.c create mode 100644 drivers/block/nd/region_devs.c create mode 100644 drivers/block/nd/test/Makefile create mode 100644 drivers/block/nd/test/iomap.c create mode 100644 drivers/block/nd/test/nfit.c create mode 100644 drivers/block/nd/test/nfit_test.h create mode 100644 include/linux/nd.h create mode 100644 include/uapi/linux/ndctl.h -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/