libnvdimm fixes for 5.13-rc2

- Fix regression in ACPI NFIT table handling leading to crashes and
   driver load failures.
 
 - Move the nvdimm mailing list
 
 - Miscellaneous minor fixups
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEf41QbsdZzFdA8EfZHtKRamZ9iAIFAmCfCWEACgkQHtKRamZ9
 iAIhjA/7BJcayM6TpBO+jSWgCbhgEMKw37DWVxI43aRRStt5xQYNcVhgZO3lQJ9D
 mUK1oQxWTlXOOzgp4SNM/WK5XCO2xj7DHWlsKvyrwPKusGnnjACYKXISAr+TL7QI
 j9dsu+kMWJrnr4H5aqLBmG1n7a6sJbqLqFbEU7DXb0ZdHh9O2+Lq5KoWyNwtNRLh
 ZzyGD1tuTpxfiUnvyyuKwMQCrmDqgoHA5uYvwiPm6fE8XhKiHGqNZ2sUnxAU/UU+
 A5R3EMkmMAzphzvpFJu16UAy4zDxXHH94dIwrtsYkO4JmJ9TYRlZjQkRxjqquE45
 vqtlGrvq333OfnINA9sm8i7nHI+USMqCThSkWdM2LkAHiZlyqk1CbyL7X4CIES+H
 3GPEVAozn5/mCpS6vDkHrZxFeMpdBhIM9tczu4ClQVjQKrKvJTrRMkNDa1WonEYz
 StBkUShMSGylpWxWN0CuNU3MN9LbP3ea+ihV0S/VRwQBIsLr5/1bZHBMoTnsWCpD
 9sMRE312gbsV5uUXV5BO4un0I8bDTbPpLafWAwwBL4MNE9V8cNYZyGoTr1atxeIr
 sXQAhfABugjiWcmoL9TPy2Q1ihF8crSZOZOr9OhiEcDGpLk4sSLmsKNgKWTNQ95V
 0eT+9/nJ6neaRxLblXepcym6w9lltPMoEkXncUcK/pWgQ/6tUfY=
 =UGmD
 -----END PGP SIGNATURE-----

Merge tag 'libnvdimm-fixes-5.13-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm

Pull libnvdimm fixes from Dan Williams:
 "A regression fix for a bootup crash condition introduced in this merge
  window and some other minor fixups:

   - Fix regression in ACPI NFIT table handling leading to crashes and
     driver load failures.

   - Move the nvdimm mailing list

   - Miscellaneous minor fixups"

* tag 'libnvdimm-fixes-5.13-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm:
  ACPI: NFIT: Fix support for variable 'SPA' structure size
  MAINTAINERS: Move nvdimm mailing list
  tools/testing/nvdimm: Make symbol '__nfit_test_ioremap' static
  libnvdimm: Remove duplicate struct declaration
This commit is contained in:
Linus Torvalds 2021-05-15 08:32:51 -07:00
commit a5ce4296b0
10 changed files with 69 additions and 55 deletions

View File

@ -1,7 +1,7 @@
What: /sys/class/dax/ What: /sys/class/dax/
Date: May, 2016 Date: May, 2016
KernelVersion: v4.7 KernelVersion: v4.7
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Device DAX is the device-centric analogue of Filesystem Description: Device DAX is the device-centric analogue of Filesystem
DAX (CONFIG_FS_DAX). It allows memory ranges to be DAX (CONFIG_FS_DAX). It allows memory ranges to be
allocated and mapped without need of an intervening file allocated and mapped without need of an intervening file

View File

@ -1,7 +1,7 @@
What: /sys/bus/nd/devices/regionX/nfit/ecc_unit_size What: /sys/bus/nd/devices/regionX/nfit/ecc_unit_size
Date: Aug, 2017 Date: Aug, 2017
KernelVersion: v4.14 (Removed v4.18) KernelVersion: v4.14 (Removed v4.18)
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RO) Size of a write request to a DIMM that will not incur a (RO) Size of a write request to a DIMM that will not incur a
read-modify-write cycle at the memory controller. read-modify-write cycle at the memory controller.

View File

@ -5,7 +5,7 @@ Interface Table (NFIT)' section in the ACPI specification
What: /sys/bus/nd/devices/nmemX/nfit/serial What: /sys/bus/nd/devices/nmemX/nfit/serial
Date: Jun, 2015 Date: Jun, 2015
KernelVersion: v4.2 KernelVersion: v4.2
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RO) Serial number of the NVDIMM (non-volatile dual in-line (RO) Serial number of the NVDIMM (non-volatile dual in-line
memory module), assigned by the module vendor. memory module), assigned by the module vendor.
@ -14,7 +14,7 @@ Description:
What: /sys/bus/nd/devices/nmemX/nfit/handle What: /sys/bus/nd/devices/nmemX/nfit/handle
Date: Apr, 2015 Date: Apr, 2015
KernelVersion: v4.2 KernelVersion: v4.2
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RO) The address (given by the _ADR object) of the device on its (RO) The address (given by the _ADR object) of the device on its
parent bus of the NVDIMM device containing the NVDIMM region. parent bus of the NVDIMM device containing the NVDIMM region.
@ -23,7 +23,7 @@ Description:
What: /sys/bus/nd/devices/nmemX/nfit/device What: /sys/bus/nd/devices/nmemX/nfit/device
Date: Apr, 2015 Date: Apr, 2015
KernelVersion: v4.1 KernelVersion: v4.1
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RO) Device id for the NVDIMM, assigned by the module vendor. (RO) Device id for the NVDIMM, assigned by the module vendor.
@ -31,7 +31,7 @@ Description:
What: /sys/bus/nd/devices/nmemX/nfit/rev_id What: /sys/bus/nd/devices/nmemX/nfit/rev_id
Date: Jun, 2015 Date: Jun, 2015
KernelVersion: v4.2 KernelVersion: v4.2
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RO) Revision of the NVDIMM, assigned by the module vendor. (RO) Revision of the NVDIMM, assigned by the module vendor.
@ -39,7 +39,7 @@ Description:
What: /sys/bus/nd/devices/nmemX/nfit/phys_id What: /sys/bus/nd/devices/nmemX/nfit/phys_id
Date: Apr, 2015 Date: Apr, 2015
KernelVersion: v4.2 KernelVersion: v4.2
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RO) Handle (i.e., instance number) for the SMBIOS (system (RO) Handle (i.e., instance number) for the SMBIOS (system
management BIOS) Memory Device structure describing the NVDIMM management BIOS) Memory Device structure describing the NVDIMM
@ -49,7 +49,7 @@ Description:
What: /sys/bus/nd/devices/nmemX/nfit/flags What: /sys/bus/nd/devices/nmemX/nfit/flags
Date: Jun, 2015 Date: Jun, 2015
KernelVersion: v4.2 KernelVersion: v4.2
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RO) The flags in the NFIT memory device sub-structure indicate (RO) The flags in the NFIT memory device sub-structure indicate
the state of the data on the nvdimm relative to its energy the state of the data on the nvdimm relative to its energy
@ -68,7 +68,7 @@ What: /sys/bus/nd/devices/nmemX/nfit/format1
What: /sys/bus/nd/devices/nmemX/nfit/formats What: /sys/bus/nd/devices/nmemX/nfit/formats
Date: Apr, 2016 Date: Apr, 2016
KernelVersion: v4.7 KernelVersion: v4.7
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RO) The interface codes indicate support for persistent memory (RO) The interface codes indicate support for persistent memory
mapped directly into system physical address space and / or a mapped directly into system physical address space and / or a
@ -84,7 +84,7 @@ Description:
What: /sys/bus/nd/devices/nmemX/nfit/vendor What: /sys/bus/nd/devices/nmemX/nfit/vendor
Date: Apr, 2016 Date: Apr, 2016
KernelVersion: v4.7 KernelVersion: v4.7
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RO) Vendor id of the NVDIMM. (RO) Vendor id of the NVDIMM.
@ -92,7 +92,7 @@ Description:
What: /sys/bus/nd/devices/nmemX/nfit/dsm_mask What: /sys/bus/nd/devices/nmemX/nfit/dsm_mask
Date: May, 2016 Date: May, 2016
KernelVersion: v4.7 KernelVersion: v4.7
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RO) The bitmask indicates the supported device specific control (RO) The bitmask indicates the supported device specific control
functions relative to the NVDIMM command family supported by the functions relative to the NVDIMM command family supported by the
@ -102,7 +102,7 @@ Description:
What: /sys/bus/nd/devices/nmemX/nfit/family What: /sys/bus/nd/devices/nmemX/nfit/family
Date: Apr, 2016 Date: Apr, 2016
KernelVersion: v4.7 KernelVersion: v4.7
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RO) Displays the NVDIMM family command sets. Values (RO) Displays the NVDIMM family command sets. Values
0, 1, 2 and 3 correspond to NVDIMM_FAMILY_INTEL, 0, 1, 2 and 3 correspond to NVDIMM_FAMILY_INTEL,
@ -118,7 +118,7 @@ Description:
What: /sys/bus/nd/devices/nmemX/nfit/id What: /sys/bus/nd/devices/nmemX/nfit/id
Date: Apr, 2016 Date: Apr, 2016
KernelVersion: v4.7 KernelVersion: v4.7
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RO) ACPI specification 6.2 section 5.2.25.9, defines an (RO) ACPI specification 6.2 section 5.2.25.9, defines an
identifier for an NVDIMM, which refelects the id attribute. identifier for an NVDIMM, which refelects the id attribute.
@ -127,7 +127,7 @@ Description:
What: /sys/bus/nd/devices/nmemX/nfit/subsystem_vendor What: /sys/bus/nd/devices/nmemX/nfit/subsystem_vendor
Date: Apr, 2016 Date: Apr, 2016
KernelVersion: v4.7 KernelVersion: v4.7
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RO) Sub-system vendor id of the NVDIMM non-volatile memory (RO) Sub-system vendor id of the NVDIMM non-volatile memory
subsystem controller. subsystem controller.
@ -136,7 +136,7 @@ Description:
What: /sys/bus/nd/devices/nmemX/nfit/subsystem_rev_id What: /sys/bus/nd/devices/nmemX/nfit/subsystem_rev_id
Date: Apr, 2016 Date: Apr, 2016
KernelVersion: v4.7 KernelVersion: v4.7
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RO) Sub-system revision id of the NVDIMM non-volatile memory subsystem (RO) Sub-system revision id of the NVDIMM non-volatile memory subsystem
controller, assigned by the non-volatile memory subsystem controller, assigned by the non-volatile memory subsystem
@ -146,7 +146,7 @@ Description:
What: /sys/bus/nd/devices/nmemX/nfit/subsystem_device What: /sys/bus/nd/devices/nmemX/nfit/subsystem_device
Date: Apr, 2016 Date: Apr, 2016
KernelVersion: v4.7 KernelVersion: v4.7
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RO) Sub-system device id for the NVDIMM non-volatile memory (RO) Sub-system device id for the NVDIMM non-volatile memory
subsystem controller, assigned by the non-volatile memory subsystem controller, assigned by the non-volatile memory
@ -156,7 +156,7 @@ Description:
What: /sys/bus/nd/devices/ndbusX/nfit/revision What: /sys/bus/nd/devices/ndbusX/nfit/revision
Date: Jun, 2015 Date: Jun, 2015
KernelVersion: v4.2 KernelVersion: v4.2
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RO) ACPI NFIT table revision number. (RO) ACPI NFIT table revision number.
@ -164,7 +164,7 @@ Description:
What: /sys/bus/nd/devices/ndbusX/nfit/scrub What: /sys/bus/nd/devices/ndbusX/nfit/scrub
Date: Sep, 2016 Date: Sep, 2016
KernelVersion: v4.9 KernelVersion: v4.9
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RW) This shows the number of full Address Range Scrubs (ARS) (RW) This shows the number of full Address Range Scrubs (ARS)
that have been completed since driver load time. Userspace can that have been completed since driver load time. Userspace can
@ -177,7 +177,7 @@ Description:
What: /sys/bus/nd/devices/ndbusX/nfit/hw_error_scrub What: /sys/bus/nd/devices/ndbusX/nfit/hw_error_scrub
Date: Sep, 2016 Date: Sep, 2016
KernelVersion: v4.9 KernelVersion: v4.9
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RW) Provides a way to toggle the behavior between just adding (RW) Provides a way to toggle the behavior between just adding
the address (cache line) where the MCE happened to the poison the address (cache line) where the MCE happened to the poison
@ -196,7 +196,7 @@ Description:
What: /sys/bus/nd/devices/ndbusX/nfit/dsm_mask What: /sys/bus/nd/devices/ndbusX/nfit/dsm_mask
Date: Jun, 2017 Date: Jun, 2017
KernelVersion: v4.13 KernelVersion: v4.13
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RO) The bitmask indicates the supported bus specific control (RO) The bitmask indicates the supported bus specific control
functions. See the section named 'NVDIMM Root Device _DSMs' in functions. See the section named 'NVDIMM Root Device _DSMs' in
@ -205,7 +205,7 @@ Description:
What: /sys/bus/nd/devices/ndbusX/nfit/firmware_activate_noidle What: /sys/bus/nd/devices/ndbusX/nfit/firmware_activate_noidle
Date: Apr, 2020 Date: Apr, 2020
KernelVersion: v5.8 KernelVersion: v5.8
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RW) The Intel platform implementation of firmware activate (RW) The Intel platform implementation of firmware activate
support exposes an option let the platform force idle devices in support exposes an option let the platform force idle devices in
@ -225,7 +225,7 @@ Description:
What: /sys/bus/nd/devices/regionX/nfit/range_index What: /sys/bus/nd/devices/regionX/nfit/range_index
Date: Jun, 2015 Date: Jun, 2015
KernelVersion: v4.2 KernelVersion: v4.2
Contact: linux-nvdimm@lists.01.org Contact: nvdimm@lists.linux.dev
Description: Description:
(RO) A unique number provided by the BIOS to identify an address (RO) A unique number provided by the BIOS to identify an address
range. Used by NVDIMM Region Mapping Structure to uniquely refer range. Used by NVDIMM Region Mapping Structure to uniquely refer

View File

@ -1,7 +1,7 @@
What: /sys/bus/nd/devices/nmemX/papr/flags What: /sys/bus/nd/devices/nmemX/papr/flags
Date: Apr, 2020 Date: Apr, 2020
KernelVersion: v5.8 KernelVersion: v5.8
Contact: linuxppc-dev <linuxppc-dev@lists.ozlabs.org>, linux-nvdimm@lists.01.org, Contact: linuxppc-dev <linuxppc-dev@lists.ozlabs.org>, nvdimm@lists.linux.dev,
Description: Description:
(RO) Report flags indicating various states of a (RO) Report flags indicating various states of a
papr-pmem NVDIMM device. Each flag maps to a one or papr-pmem NVDIMM device. Each flag maps to a one or
@ -36,7 +36,7 @@ Description:
What: /sys/bus/nd/devices/nmemX/papr/perf_stats What: /sys/bus/nd/devices/nmemX/papr/perf_stats
Date: May, 2020 Date: May, 2020
KernelVersion: v5.9 KernelVersion: v5.9
Contact: linuxppc-dev <linuxppc-dev@lists.ozlabs.org>, linux-nvdimm@lists.01.org, Contact: linuxppc-dev <linuxppc-dev@lists.ozlabs.org>, nvdimm@lists.linux.dev,
Description: Description:
(RO) Report various performance stats related to papr-scm NVDIMM (RO) Report various performance stats related to papr-scm NVDIMM
device. Each stat is reported on a new line with each line device. Each stat is reported on a new line with each line

View File

@ -4,7 +4,7 @@ LIBNVDIMM: Non-Volatile Devices
libnvdimm - kernel / libndctl - userspace helper library libnvdimm - kernel / libndctl - userspace helper library
linux-nvdimm@lists.01.org nvdimm@lists.linux.dev
Version 13 Version 13

View File

@ -5237,7 +5237,7 @@ DEVICE DIRECT ACCESS (DAX)
M: Dan Williams <dan.j.williams@intel.com> M: Dan Williams <dan.j.williams@intel.com>
M: Vishal Verma <vishal.l.verma@intel.com> M: Vishal Verma <vishal.l.verma@intel.com>
M: Dave Jiang <dave.jiang@intel.com> M: Dave Jiang <dave.jiang@intel.com>
L: linux-nvdimm@lists.01.org L: nvdimm@lists.linux.dev
S: Supported S: Supported
F: drivers/dax/ F: drivers/dax/
@ -7006,7 +7006,7 @@ M: Dan Williams <dan.j.williams@intel.com>
R: Matthew Wilcox <willy@infradead.org> R: Matthew Wilcox <willy@infradead.org>
R: Jan Kara <jack@suse.cz> R: Jan Kara <jack@suse.cz>
L: linux-fsdevel@vger.kernel.org L: linux-fsdevel@vger.kernel.org
L: linux-nvdimm@lists.01.org L: nvdimm@lists.linux.dev
S: Supported S: Supported
F: fs/dax.c F: fs/dax.c
F: include/linux/dax.h F: include/linux/dax.h
@ -10378,7 +10378,7 @@ LIBNVDIMM BLK: MMIO-APERTURE DRIVER
M: Dan Williams <dan.j.williams@intel.com> M: Dan Williams <dan.j.williams@intel.com>
M: Vishal Verma <vishal.l.verma@intel.com> M: Vishal Verma <vishal.l.verma@intel.com>
M: Dave Jiang <dave.jiang@intel.com> M: Dave Jiang <dave.jiang@intel.com>
L: linux-nvdimm@lists.01.org L: nvdimm@lists.linux.dev
S: Supported S: Supported
Q: https://patchwork.kernel.org/project/linux-nvdimm/list/ Q: https://patchwork.kernel.org/project/linux-nvdimm/list/
P: Documentation/nvdimm/maintainer-entry-profile.rst P: Documentation/nvdimm/maintainer-entry-profile.rst
@ -10389,7 +10389,7 @@ LIBNVDIMM BTT: BLOCK TRANSLATION TABLE
M: Vishal Verma <vishal.l.verma@intel.com> M: Vishal Verma <vishal.l.verma@intel.com>
M: Dan Williams <dan.j.williams@intel.com> M: Dan Williams <dan.j.williams@intel.com>
M: Dave Jiang <dave.jiang@intel.com> M: Dave Jiang <dave.jiang@intel.com>
L: linux-nvdimm@lists.01.org L: nvdimm@lists.linux.dev
S: Supported S: Supported
Q: https://patchwork.kernel.org/project/linux-nvdimm/list/ Q: https://patchwork.kernel.org/project/linux-nvdimm/list/
P: Documentation/nvdimm/maintainer-entry-profile.rst P: Documentation/nvdimm/maintainer-entry-profile.rst
@ -10399,7 +10399,7 @@ LIBNVDIMM PMEM: PERSISTENT MEMORY DRIVER
M: Dan Williams <dan.j.williams@intel.com> M: Dan Williams <dan.j.williams@intel.com>
M: Vishal Verma <vishal.l.verma@intel.com> M: Vishal Verma <vishal.l.verma@intel.com>
M: Dave Jiang <dave.jiang@intel.com> M: Dave Jiang <dave.jiang@intel.com>
L: linux-nvdimm@lists.01.org L: nvdimm@lists.linux.dev
S: Supported S: Supported
Q: https://patchwork.kernel.org/project/linux-nvdimm/list/ Q: https://patchwork.kernel.org/project/linux-nvdimm/list/
P: Documentation/nvdimm/maintainer-entry-profile.rst P: Documentation/nvdimm/maintainer-entry-profile.rst
@ -10407,7 +10407,7 @@ F: drivers/nvdimm/pmem*
LIBNVDIMM: DEVICETREE BINDINGS LIBNVDIMM: DEVICETREE BINDINGS
M: Oliver O'Halloran <oohall@gmail.com> M: Oliver O'Halloran <oohall@gmail.com>
L: linux-nvdimm@lists.01.org L: nvdimm@lists.linux.dev
S: Supported S: Supported
Q: https://patchwork.kernel.org/project/linux-nvdimm/list/ Q: https://patchwork.kernel.org/project/linux-nvdimm/list/
F: Documentation/devicetree/bindings/pmem/pmem-region.txt F: Documentation/devicetree/bindings/pmem/pmem-region.txt
@ -10418,7 +10418,7 @@ M: Dan Williams <dan.j.williams@intel.com>
M: Vishal Verma <vishal.l.verma@intel.com> M: Vishal Verma <vishal.l.verma@intel.com>
M: Dave Jiang <dave.jiang@intel.com> M: Dave Jiang <dave.jiang@intel.com>
M: Ira Weiny <ira.weiny@intel.com> M: Ira Weiny <ira.weiny@intel.com>
L: linux-nvdimm@lists.01.org L: nvdimm@lists.linux.dev
S: Supported S: Supported
Q: https://patchwork.kernel.org/project/linux-nvdimm/list/ Q: https://patchwork.kernel.org/project/linux-nvdimm/list/
P: Documentation/nvdimm/maintainer-entry-profile.rst P: Documentation/nvdimm/maintainer-entry-profile.rst

View File

@ -686,6 +686,13 @@ int nfit_spa_type(struct acpi_nfit_system_address *spa)
return -1; return -1;
} }
static size_t sizeof_spa(struct acpi_nfit_system_address *spa)
{
if (spa->flags & ACPI_NFIT_LOCATION_COOKIE_VALID)
return sizeof(*spa);
return sizeof(*spa) - 8;
}
static bool add_spa(struct acpi_nfit_desc *acpi_desc, static bool add_spa(struct acpi_nfit_desc *acpi_desc,
struct nfit_table_prev *prev, struct nfit_table_prev *prev,
struct acpi_nfit_system_address *spa) struct acpi_nfit_system_address *spa)
@ -693,22 +700,22 @@ static bool add_spa(struct acpi_nfit_desc *acpi_desc,
struct device *dev = acpi_desc->dev; struct device *dev = acpi_desc->dev;
struct nfit_spa *nfit_spa; struct nfit_spa *nfit_spa;
if (spa->header.length != sizeof(*spa)) if (spa->header.length != sizeof_spa(spa))
return false; return false;
list_for_each_entry(nfit_spa, &prev->spas, list) { list_for_each_entry(nfit_spa, &prev->spas, list) {
if (memcmp(nfit_spa->spa, spa, sizeof(*spa)) == 0) { if (memcmp(nfit_spa->spa, spa, sizeof_spa(spa)) == 0) {
list_move_tail(&nfit_spa->list, &acpi_desc->spas); list_move_tail(&nfit_spa->list, &acpi_desc->spas);
return true; return true;
} }
} }
nfit_spa = devm_kzalloc(dev, sizeof(*nfit_spa) + sizeof(*spa), nfit_spa = devm_kzalloc(dev, sizeof(*nfit_spa) + sizeof_spa(spa),
GFP_KERNEL); GFP_KERNEL);
if (!nfit_spa) if (!nfit_spa)
return false; return false;
INIT_LIST_HEAD(&nfit_spa->list); INIT_LIST_HEAD(&nfit_spa->list);
memcpy(nfit_spa->spa, spa, sizeof(*spa)); memcpy(nfit_spa->spa, spa, sizeof_spa(spa));
list_add_tail(&nfit_spa->list, &acpi_desc->spas); list_add_tail(&nfit_spa->list, &acpi_desc->spas);
dev_dbg(dev, "spa index: %d type: %s\n", dev_dbg(dev, "spa index: %d type: %s\n",
spa->range_index, spa->range_index,

View File

@ -141,7 +141,6 @@ static inline void __iomem *devm_nvdimm_ioremap(struct device *dev,
struct nvdimm_bus; struct nvdimm_bus;
struct module; struct module;
struct device;
struct nd_blk_region; struct nd_blk_region;
struct nd_blk_region_desc { struct nd_blk_region_desc {
int (*enable)(struct nvdimm_bus *nvdimm_bus, struct device *dev); int (*enable)(struct nvdimm_bus *nvdimm_bus, struct device *dev);

View File

@ -62,7 +62,7 @@ struct nfit_test_resource *get_nfit_res(resource_size_t resource)
} }
EXPORT_SYMBOL(get_nfit_res); EXPORT_SYMBOL(get_nfit_res);
void __iomem *__nfit_test_ioremap(resource_size_t offset, unsigned long size, static void __iomem *__nfit_test_ioremap(resource_size_t offset, unsigned long size,
void __iomem *(*fallback_fn)(resource_size_t, unsigned long)) void __iomem *(*fallback_fn)(resource_size_t, unsigned long))
{ {
struct nfit_test_resource *nfit_res = get_nfit_res(offset); struct nfit_test_resource *nfit_res = get_nfit_res(offset);

View File

@ -1871,9 +1871,16 @@ static void smart_init(struct nfit_test *t)
} }
} }
static size_t sizeof_spa(struct acpi_nfit_system_address *spa)
{
/* until spa location cookie support is added... */
return sizeof(*spa) - 8;
}
static int nfit_test0_alloc(struct nfit_test *t) static int nfit_test0_alloc(struct nfit_test *t)
{ {
size_t nfit_size = sizeof(struct acpi_nfit_system_address) * NUM_SPA struct acpi_nfit_system_address *spa = NULL;
size_t nfit_size = sizeof_spa(spa) * NUM_SPA
+ sizeof(struct acpi_nfit_memory_map) * NUM_MEM + sizeof(struct acpi_nfit_memory_map) * NUM_MEM
+ sizeof(struct acpi_nfit_control_region) * NUM_DCR + sizeof(struct acpi_nfit_control_region) * NUM_DCR
+ offsetof(struct acpi_nfit_control_region, + offsetof(struct acpi_nfit_control_region,
@ -1937,7 +1944,8 @@ static int nfit_test0_alloc(struct nfit_test *t)
static int nfit_test1_alloc(struct nfit_test *t) static int nfit_test1_alloc(struct nfit_test *t)
{ {
size_t nfit_size = sizeof(struct acpi_nfit_system_address) * 2 struct acpi_nfit_system_address *spa = NULL;
size_t nfit_size = sizeof_spa(spa) * 2
+ sizeof(struct acpi_nfit_memory_map) * 2 + sizeof(struct acpi_nfit_memory_map) * 2
+ offsetof(struct acpi_nfit_control_region, window_size) * 2; + offsetof(struct acpi_nfit_control_region, window_size) * 2;
int i; int i;
@ -2000,7 +2008,7 @@ static void nfit_test0_setup(struct nfit_test *t)
*/ */
spa = nfit_buf; spa = nfit_buf;
spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS;
spa->header.length = sizeof(*spa); spa->header.length = sizeof_spa(spa);
memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_PM), 16); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_PM), 16);
spa->range_index = 0+1; spa->range_index = 0+1;
spa->address = t->spa_set_dma[0]; spa->address = t->spa_set_dma[0];
@ -2014,7 +2022,7 @@ static void nfit_test0_setup(struct nfit_test *t)
*/ */
spa = nfit_buf + offset; spa = nfit_buf + offset;
spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS;
spa->header.length = sizeof(*spa); spa->header.length = sizeof_spa(spa);
memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_PM), 16); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_PM), 16);
spa->range_index = 1+1; spa->range_index = 1+1;
spa->address = t->spa_set_dma[1]; spa->address = t->spa_set_dma[1];
@ -2024,7 +2032,7 @@ static void nfit_test0_setup(struct nfit_test *t)
/* spa2 (dcr0) dimm0 */ /* spa2 (dcr0) dimm0 */
spa = nfit_buf + offset; spa = nfit_buf + offset;
spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS;
spa->header.length = sizeof(*spa); spa->header.length = sizeof_spa(spa);
memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_DCR), 16); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_DCR), 16);
spa->range_index = 2+1; spa->range_index = 2+1;
spa->address = t->dcr_dma[0]; spa->address = t->dcr_dma[0];
@ -2034,7 +2042,7 @@ static void nfit_test0_setup(struct nfit_test *t)
/* spa3 (dcr1) dimm1 */ /* spa3 (dcr1) dimm1 */
spa = nfit_buf + offset; spa = nfit_buf + offset;
spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS;
spa->header.length = sizeof(*spa); spa->header.length = sizeof_spa(spa);
memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_DCR), 16); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_DCR), 16);
spa->range_index = 3+1; spa->range_index = 3+1;
spa->address = t->dcr_dma[1]; spa->address = t->dcr_dma[1];
@ -2044,7 +2052,7 @@ static void nfit_test0_setup(struct nfit_test *t)
/* spa4 (dcr2) dimm2 */ /* spa4 (dcr2) dimm2 */
spa = nfit_buf + offset; spa = nfit_buf + offset;
spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS;
spa->header.length = sizeof(*spa); spa->header.length = sizeof_spa(spa);
memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_DCR), 16); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_DCR), 16);
spa->range_index = 4+1; spa->range_index = 4+1;
spa->address = t->dcr_dma[2]; spa->address = t->dcr_dma[2];
@ -2054,7 +2062,7 @@ static void nfit_test0_setup(struct nfit_test *t)
/* spa5 (dcr3) dimm3 */ /* spa5 (dcr3) dimm3 */
spa = nfit_buf + offset; spa = nfit_buf + offset;
spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS;
spa->header.length = sizeof(*spa); spa->header.length = sizeof_spa(spa);
memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_DCR), 16); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_DCR), 16);
spa->range_index = 5+1; spa->range_index = 5+1;
spa->address = t->dcr_dma[3]; spa->address = t->dcr_dma[3];
@ -2064,7 +2072,7 @@ static void nfit_test0_setup(struct nfit_test *t)
/* spa6 (bdw for dcr0) dimm0 */ /* spa6 (bdw for dcr0) dimm0 */
spa = nfit_buf + offset; spa = nfit_buf + offset;
spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS;
spa->header.length = sizeof(*spa); spa->header.length = sizeof_spa(spa);
memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_BDW), 16); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_BDW), 16);
spa->range_index = 6+1; spa->range_index = 6+1;
spa->address = t->dimm_dma[0]; spa->address = t->dimm_dma[0];
@ -2074,7 +2082,7 @@ static void nfit_test0_setup(struct nfit_test *t)
/* spa7 (bdw for dcr1) dimm1 */ /* spa7 (bdw for dcr1) dimm1 */
spa = nfit_buf + offset; spa = nfit_buf + offset;
spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS;
spa->header.length = sizeof(*spa); spa->header.length = sizeof_spa(spa);
memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_BDW), 16); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_BDW), 16);
spa->range_index = 7+1; spa->range_index = 7+1;
spa->address = t->dimm_dma[1]; spa->address = t->dimm_dma[1];
@ -2084,7 +2092,7 @@ static void nfit_test0_setup(struct nfit_test *t)
/* spa8 (bdw for dcr2) dimm2 */ /* spa8 (bdw for dcr2) dimm2 */
spa = nfit_buf + offset; spa = nfit_buf + offset;
spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS;
spa->header.length = sizeof(*spa); spa->header.length = sizeof_spa(spa);
memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_BDW), 16); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_BDW), 16);
spa->range_index = 8+1; spa->range_index = 8+1;
spa->address = t->dimm_dma[2]; spa->address = t->dimm_dma[2];
@ -2094,7 +2102,7 @@ static void nfit_test0_setup(struct nfit_test *t)
/* spa9 (bdw for dcr3) dimm3 */ /* spa9 (bdw for dcr3) dimm3 */
spa = nfit_buf + offset; spa = nfit_buf + offset;
spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS;
spa->header.length = sizeof(*spa); spa->header.length = sizeof_spa(spa);
memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_BDW), 16); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_BDW), 16);
spa->range_index = 9+1; spa->range_index = 9+1;
spa->address = t->dimm_dma[3]; spa->address = t->dimm_dma[3];
@ -2581,7 +2589,7 @@ static void nfit_test0_setup(struct nfit_test *t)
/* spa10 (dcr4) dimm4 */ /* spa10 (dcr4) dimm4 */
spa = nfit_buf + offset; spa = nfit_buf + offset;
spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS;
spa->header.length = sizeof(*spa); spa->header.length = sizeof_spa(spa);
memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_DCR), 16); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_DCR), 16);
spa->range_index = 10+1; spa->range_index = 10+1;
spa->address = t->dcr_dma[4]; spa->address = t->dcr_dma[4];
@ -2595,7 +2603,7 @@ static void nfit_test0_setup(struct nfit_test *t)
*/ */
spa = nfit_buf + offset; spa = nfit_buf + offset;
spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS;
spa->header.length = sizeof(*spa); spa->header.length = sizeof_spa(spa);
memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_PM), 16); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_PM), 16);
spa->range_index = 11+1; spa->range_index = 11+1;
spa->address = t->spa_set_dma[2]; spa->address = t->spa_set_dma[2];
@ -2605,7 +2613,7 @@ static void nfit_test0_setup(struct nfit_test *t)
/* spa12 (bdw for dcr4) dimm4 */ /* spa12 (bdw for dcr4) dimm4 */
spa = nfit_buf + offset; spa = nfit_buf + offset;
spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS;
spa->header.length = sizeof(*spa); spa->header.length = sizeof_spa(spa);
memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_BDW), 16); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_BDW), 16);
spa->range_index = 12+1; spa->range_index = 12+1;
spa->address = t->dimm_dma[4]; spa->address = t->dimm_dma[4];
@ -2739,7 +2747,7 @@ static void nfit_test1_setup(struct nfit_test *t)
/* spa0 (flat range with no bdw aliasing) */ /* spa0 (flat range with no bdw aliasing) */
spa = nfit_buf + offset; spa = nfit_buf + offset;
spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS;
spa->header.length = sizeof(*spa); spa->header.length = sizeof_spa(spa);
memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_PM), 16); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_PM), 16);
spa->range_index = 0+1; spa->range_index = 0+1;
spa->address = t->spa_set_dma[0]; spa->address = t->spa_set_dma[0];
@ -2749,7 +2757,7 @@ static void nfit_test1_setup(struct nfit_test *t)
/* virtual cd region */ /* virtual cd region */
spa = nfit_buf + offset; spa = nfit_buf + offset;
spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS; spa->header.type = ACPI_NFIT_TYPE_SYSTEM_ADDRESS;
spa->header.length = sizeof(*spa); spa->header.length = sizeof_spa(spa);
memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_VCD), 16); memcpy(spa->range_guid, to_nfit_uuid(NFIT_SPA_VCD), 16);
spa->range_index = 0; spa->range_index = 0;
spa->address = t->spa_set_dma[1]; spa->address = t->spa_set_dma[1];