Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 828bf6e9 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'libnvdimm-for-4.19_misc' of gitolite.kernel.org:pub/scm/linux/kernel/git/nvdimm/nvdimm

Pull libnvdimm updates from Dave Jiang:
 "Collection of misc libnvdimm patches for 4.19 submission:

   - Adding support to read locked nvdimm capacity.

   - Change test code to make DSM failure code injection an override.

   - Add support for calculate maximum contiguous area for namespace.

   - Add support for queueing a short ARS when there is on going ARS for
     nvdimm.

   - Allow NULL to be passed in to ->direct_access() for kaddr and pfn
     params.

   - Improve smart injection support for nvdimm emulation testing.

   - Fix test code that supports for emulating controller temperature.

   - Fix hang on error before devm_memremap_pages()

   - Fix a bug that causes user memory corruption when data returned to
     user for ars_status.

   - Maintainer updates for Ross Zwisler emails and adding Jan Kara to
     fsdax"

* tag 'libnvdimm-for-4.19_misc' of gitolite.kernel.org:pub/scm/linux/kernel/git/nvdimm/nvdimm:
  libnvdimm: fix ars_status output length calculation
  device-dax: avoid hang on error before devm_memremap_pages()
  tools/testing/nvdimm: improve emulation of smart injection
  filesystem-dax: Do not request kaddr and pfn when not required
  md/dm-writecache: Don't request pointer dummy_addr when not required
  dax/super: Do not request a pointer kaddr when not required
  tools/testing/nvdimm: kaddr and pfn can be NULL to ->direct_access()
  s390, dcssblk: kaddr and pfn can be NULL to ->direct_access()
  libnvdimm, pmem: kaddr and pfn can be NULL to ->direct_access()
  acpi/nfit: queue issuing of ars when an uc error notification comes in
  libnvdimm: Export max available extent
  libnvdimm: Use max contiguous area for namespace size
  MAINTAINERS: Add Jan Kara for filesystem DAX
  MAINTAINERS: update Ross Zwisler's email address
  tools/testing/nvdimm: Fix support for emulating controller temperature
  tools/testing/nvdimm: Make DSM failure code injection an override
  acpi, nfit: Prefer _DSM over _LSR for namespace label reads
  libnvdimm: Introduce locked DIMM capacity support
parents b3262720 286e8771
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -159,6 +159,7 @@ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
Randy Dunlap <rdunlap@infradead.org> <rdunlap@xenotime.net>
Rémi Denis-Courmont <rdenis@simphalempin.com>
Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Ross Zwisler <zwisler@kernel.org> <ross.zwisler@linux.intel.com>
Rudolf Marek <R.Marek@sh.cvut.cz>
Rui Saraiva <rmps@joel.ist.utl.pt>
Sachin P Sant <ssant@in.ibm.com>
+7 −6
Original line number Diff line number Diff line
@@ -4364,7 +4364,8 @@ F: drivers/i2c/busses/i2c-diolan-u2c.c

FILESYSTEM DIRECT ACCESS (DAX)
M:	Matthew Wilcox <mawilcox@microsoft.com>
M:	Ross Zwisler <ross.zwisler@linux.intel.com>
M:	Ross Zwisler <zwisler@kernel.org>
M:	Jan Kara <jack@suse.cz>
L:	linux-fsdevel@vger.kernel.org
S:	Supported
F:	fs/dax.c
@@ -4374,7 +4375,7 @@ F: include/trace/events/fs_dax.h
DEVICE DIRECT ACCESS (DAX)
M:	Dan Williams <dan.j.williams@intel.com>
M:	Dave Jiang <dave.jiang@intel.com>
M:	Ross Zwisler <ross.zwisler@linux.intel.com>
M:	Ross Zwisler <zwisler@kernel.org>
M:	Vishal Verma <vishal.l.verma@intel.com>
L:	linux-nvdimm@lists.01.org
S:	Supported
@@ -8303,7 +8304,7 @@ S: Maintained
F:	tools/lib/lockdep/

LIBNVDIMM BLK: MMIO-APERTURE DRIVER
M:	Ross Zwisler <ross.zwisler@linux.intel.com>
M:	Ross Zwisler <zwisler@kernel.org>
M:	Dan Williams <dan.j.williams@intel.com>
M:	Vishal Verma <vishal.l.verma@intel.com>
M:	Dave Jiang <dave.jiang@intel.com>
@@ -8316,7 +8317,7 @@ F: drivers/nvdimm/region_devs.c
LIBNVDIMM BTT: BLOCK TRANSLATION TABLE
M:	Vishal Verma <vishal.l.verma@intel.com>
M:	Dan Williams <dan.j.williams@intel.com>
M:	Ross Zwisler <ross.zwisler@linux.intel.com>
M:	Ross Zwisler <zwisler@kernel.org>
M:	Dave Jiang <dave.jiang@intel.com>
L:	linux-nvdimm@lists.01.org
Q:	https://patchwork.kernel.org/project/linux-nvdimm/list/
@@ -8324,7 +8325,7 @@ S: Supported
F:	drivers/nvdimm/btt*

LIBNVDIMM PMEM: PERSISTENT MEMORY DRIVER
M:	Ross Zwisler <ross.zwisler@linux.intel.com>
M:	Ross Zwisler <zwisler@kernel.org>
M:	Dan Williams <dan.j.williams@intel.com>
M:	Vishal Verma <vishal.l.verma@intel.com>
M:	Dave Jiang <dave.jiang@intel.com>
@@ -8343,7 +8344,7 @@ F: Documentation/devicetree/bindings/pmem/pmem-region.txt

LIBNVDIMM: NON-VOLATILE MEMORY DEVICE SUBSYSTEM
M:	Dan Williams <dan.j.williams@intel.com>
M:	Ross Zwisler <ross.zwisler@linux.intel.com>
M:	Ross Zwisler <zwisler@kernel.org>
M:	Vishal Verma <vishal.l.verma@intel.com>
M:	Dave Jiang <dave.jiang@intel.com>
L:	linux-nvdimm@lists.01.org
+20 −4
Original line number Diff line number Diff line
@@ -1699,7 +1699,7 @@ static int acpi_nfit_add_dimm(struct acpi_nfit_desc *acpi_desc,
{
	struct acpi_device *adev, *adev_dimm;
	struct device *dev = acpi_desc->dev;
	unsigned long dsm_mask;
	unsigned long dsm_mask, label_mask;
	const guid_t *guid;
	int i;
	int family = -1;
@@ -1771,6 +1771,16 @@ static int acpi_nfit_add_dimm(struct acpi_nfit_desc *acpi_desc,
					1ULL << i))
			set_bit(i, &nfit_mem->dsm_mask);

	/*
	 * Prefer the NVDIMM_FAMILY_INTEL label read commands if present
	 * due to their better semantics handling locked capacity.
	 */
	label_mask = 1 << ND_CMD_GET_CONFIG_SIZE | 1 << ND_CMD_GET_CONFIG_DATA
		| 1 << ND_CMD_SET_CONFIG_DATA;
	if (family == NVDIMM_FAMILY_INTEL
			&& (dsm_mask & label_mask) == label_mask)
		return 0;

	if (acpi_nvdimm_has_method(adev_dimm, "_LSI")
			&& acpi_nvdimm_has_method(adev_dimm, "_LSR")) {
		dev_dbg(dev, "%s: has _LSR\n", dev_name(&adev_dimm->dev));
@@ -2559,6 +2569,11 @@ static void ars_complete(struct acpi_nfit_desc *acpi_desc,
			test_bit(ARS_SHORT, &nfit_spa->ars_state)
			? "short" : "long");
	clear_bit(ARS_SHORT, &nfit_spa->ars_state);
	if (test_and_clear_bit(ARS_REQ_REDO, &nfit_spa->ars_state)) {
		set_bit(ARS_SHORT, &nfit_spa->ars_state);
		set_bit(ARS_REQ, &nfit_spa->ars_state);
		dev_dbg(dev, "ARS: processing scrub request received while in progress\n");
	} else
		set_bit(ARS_DONE, &nfit_spa->ars_state);
}

@@ -3256,9 +3271,10 @@ int acpi_nfit_ars_rescan(struct acpi_nfit_desc *acpi_desc, unsigned long flags)
		if (test_bit(ARS_FAILED, &nfit_spa->ars_state))
			continue;

		if (test_and_set_bit(ARS_REQ, &nfit_spa->ars_state))
		if (test_and_set_bit(ARS_REQ, &nfit_spa->ars_state)) {
			busy++;
		else {
			set_bit(ARS_REQ_REDO, &nfit_spa->ars_state);
		} else {
			if (test_bit(ARS_SHORT, &flags))
				set_bit(ARS_SHORT, &nfit_spa->ars_state);
			scheduled++;
+1 −0
Original line number Diff line number Diff line
@@ -119,6 +119,7 @@ enum nfit_dimm_notifiers {

enum nfit_ars_state {
	ARS_REQ,
	ARS_REQ_REDO,
	ARS_DONE,
	ARS_SHORT,
	ARS_FAILED,
+8 −4
Original line number Diff line number Diff line
@@ -105,15 +105,19 @@ static int dax_pmem_probe(struct device *dev)
	if (rc)
		return rc;

	rc = devm_add_action_or_reset(dev, dax_pmem_percpu_exit,
							&dax_pmem->ref);
	if (rc)
	rc = devm_add_action(dev, dax_pmem_percpu_exit, &dax_pmem->ref);
	if (rc) {
		percpu_ref_exit(&dax_pmem->ref);
		return rc;
	}

	dax_pmem->pgmap.ref = &dax_pmem->ref;
	addr = devm_memremap_pages(dev, &dax_pmem->pgmap);
	if (IS_ERR(addr))
	if (IS_ERR(addr)) {
		devm_remove_action(dev, dax_pmem_percpu_exit, &dax_pmem->ref);
		percpu_ref_exit(&dax_pmem->ref);
		return PTR_ERR(addr);
	}

	rc = devm_add_action_or_reset(dev, dax_pmem_percpu_kill,
							&dax_pmem->ref);
Loading