Commit 26caabbc authored by Linus Torvalds's avatar Linus Torvalds

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

Pull libnvdimm fixes from Dan Williams:
 "A crash fix, a build warning fix, a miscellaneous small cleanups.

  In case anyone is looking for them, there was a regression caught by
  testing that caused two patches to be dropped from this update.  Those
  patches have been reworked and will soak for another week / re-target
  5.0-rc4.

   - Fix driver initialization crash due to the inability to report an
     'error' state for a DIMM's security capability.

   - Build warning fix for little-endian ARM64 builds

   - Fix a potential race between the EDAC driver's usage of the NFIT
     SMBIOS id for a DIMM and the driver shutdown path.

   - A small collection of one-line benign cleanups for duplicate
     variable assignments, a duplicate header include and a mis-typed
     function argument"

* tag 'libnvdimm-fixes-5.0-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm:
  libnvdimm/security: Fix nvdimm_security_state() state request selection
  acpi/nfit: Remove duplicate set nd_set in acpi_nfit_init_interleave_set()
  acpi/nfit: Fix race accessing memdev in nfit_get_smbios_id()
  libnvdimm/dimm: Fix security capability detection for non-Intel NVDIMMs
  nfit: Mark some functions as __maybe_unused
  ACPI/nfit: delete the function to_acpi_nfit_desc
  ACPI/nfit: delete the redundant header file
parents f403d718 faa8bd6e
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
#include <acpi/nfit.h> #include <acpi/nfit.h>
#include "intel.h" #include "intel.h"
#include "nfit.h" #include "nfit.h"
#include "intel.h"
/* /*
* For readq() and writeq() on 32-bit builds, the hi-lo, lo-hi order is * For readq() and writeq() on 32-bit builds, the hi-lo, lo-hi order is
...@@ -78,12 +77,6 @@ const guid_t *to_nfit_uuid(enum nfit_uuids id) ...@@ -78,12 +77,6 @@ const guid_t *to_nfit_uuid(enum nfit_uuids id)
} }
EXPORT_SYMBOL(to_nfit_uuid); EXPORT_SYMBOL(to_nfit_uuid);
static struct acpi_nfit_desc *to_acpi_nfit_desc(
struct nvdimm_bus_descriptor *nd_desc)
{
return container_of(nd_desc, struct acpi_nfit_desc, nd_desc);
}
static struct acpi_device *to_acpi_dev(struct acpi_nfit_desc *acpi_desc) static struct acpi_device *to_acpi_dev(struct acpi_nfit_desc *acpi_desc)
{ {
struct nvdimm_bus_descriptor *nd_desc = &acpi_desc->nd_desc; struct nvdimm_bus_descriptor *nd_desc = &acpi_desc->nd_desc;
...@@ -419,7 +412,7 @@ static bool payload_dumpable(struct nvdimm *nvdimm, unsigned int func) ...@@ -419,7 +412,7 @@ static bool payload_dumpable(struct nvdimm *nvdimm, unsigned int func)
int acpi_nfit_ctl(struct nvdimm_bus_descriptor *nd_desc, struct nvdimm *nvdimm, int acpi_nfit_ctl(struct nvdimm_bus_descriptor *nd_desc, struct nvdimm *nvdimm,
unsigned int cmd, void *buf, unsigned int buf_len, int *cmd_rc) unsigned int cmd, void *buf, unsigned int buf_len, int *cmd_rc)
{ {
struct acpi_nfit_desc *acpi_desc = to_acpi_nfit_desc(nd_desc); struct acpi_nfit_desc *acpi_desc = to_acpi_desc(nd_desc);
struct nfit_mem *nfit_mem = nvdimm_provider_data(nvdimm); struct nfit_mem *nfit_mem = nvdimm_provider_data(nvdimm);
union acpi_object in_obj, in_buf, *out_obj; union acpi_object in_obj, in_buf, *out_obj;
const struct nd_cmd_desc *desc = NULL; const struct nd_cmd_desc *desc = NULL;
...@@ -721,6 +714,7 @@ int nfit_get_smbios_id(u32 device_handle, u16 *flags) ...@@ -721,6 +714,7 @@ int nfit_get_smbios_id(u32 device_handle, u16 *flags)
struct acpi_nfit_memory_map *memdev; struct acpi_nfit_memory_map *memdev;
struct acpi_nfit_desc *acpi_desc; struct acpi_nfit_desc *acpi_desc;
struct nfit_mem *nfit_mem; struct nfit_mem *nfit_mem;
u16 physical_id;
mutex_lock(&acpi_desc_lock); mutex_lock(&acpi_desc_lock);
list_for_each_entry(acpi_desc, &acpi_descs, list) { list_for_each_entry(acpi_desc, &acpi_descs, list) {
...@@ -728,10 +722,11 @@ int nfit_get_smbios_id(u32 device_handle, u16 *flags) ...@@ -728,10 +722,11 @@ int nfit_get_smbios_id(u32 device_handle, u16 *flags)
list_for_each_entry(nfit_mem, &acpi_desc->dimms, list) { list_for_each_entry(nfit_mem, &acpi_desc->dimms, list) {
memdev = __to_nfit_memdev(nfit_mem); memdev = __to_nfit_memdev(nfit_mem);
if (memdev->device_handle == device_handle) { if (memdev->device_handle == device_handle) {
*flags = memdev->flags;
physical_id = memdev->physical_id;
mutex_unlock(&acpi_desc->init_mutex); mutex_unlock(&acpi_desc->init_mutex);
mutex_unlock(&acpi_desc_lock); mutex_unlock(&acpi_desc_lock);
*flags = memdev->flags; return physical_id;
return memdev->physical_id;
} }
} }
mutex_unlock(&acpi_desc->init_mutex); mutex_unlock(&acpi_desc->init_mutex);
...@@ -2231,7 +2226,6 @@ static int acpi_nfit_init_interleave_set(struct acpi_nfit_desc *acpi_desc, ...@@ -2231,7 +2226,6 @@ static int acpi_nfit_init_interleave_set(struct acpi_nfit_desc *acpi_desc,
nd_set = devm_kzalloc(dev, sizeof(*nd_set), GFP_KERNEL); nd_set = devm_kzalloc(dev, sizeof(*nd_set), GFP_KERNEL);
if (!nd_set) if (!nd_set)
return -ENOMEM; return -ENOMEM;
ndr_desc->nd_set = nd_set;
guid_copy(&nd_set->type_guid, (guid_t *) spa->range_guid); guid_copy(&nd_set->type_guid, (guid_t *) spa->range_guid);
info = devm_kzalloc(dev, sizeof_nfit_set_info(nr), GFP_KERNEL); info = devm_kzalloc(dev, sizeof_nfit_set_info(nr), GFP_KERNEL);
...@@ -3367,7 +3361,7 @@ EXPORT_SYMBOL_GPL(acpi_nfit_init); ...@@ -3367,7 +3361,7 @@ EXPORT_SYMBOL_GPL(acpi_nfit_init);
static int acpi_nfit_flush_probe(struct nvdimm_bus_descriptor *nd_desc) static int acpi_nfit_flush_probe(struct nvdimm_bus_descriptor *nd_desc)
{ {
struct acpi_nfit_desc *acpi_desc = to_acpi_nfit_desc(nd_desc); struct acpi_nfit_desc *acpi_desc = to_acpi_desc(nd_desc);
struct device *dev = acpi_desc->dev; struct device *dev = acpi_desc->dev;
/* Bounce the device lock to flush acpi_nfit_add / acpi_nfit_notify */ /* Bounce the device lock to flush acpi_nfit_add / acpi_nfit_notify */
...@@ -3384,7 +3378,7 @@ static int acpi_nfit_flush_probe(struct nvdimm_bus_descriptor *nd_desc) ...@@ -3384,7 +3378,7 @@ static int acpi_nfit_flush_probe(struct nvdimm_bus_descriptor *nd_desc)
static int __acpi_nfit_clear_to_send(struct nvdimm_bus_descriptor *nd_desc, static int __acpi_nfit_clear_to_send(struct nvdimm_bus_descriptor *nd_desc,
struct nvdimm *nvdimm, unsigned int cmd) struct nvdimm *nvdimm, unsigned int cmd)
{ {
struct acpi_nfit_desc *acpi_desc = to_acpi_nfit_desc(nd_desc); struct acpi_nfit_desc *acpi_desc = to_acpi_desc(nd_desc);
if (nvdimm) if (nvdimm)
return 0; return 0;
......
...@@ -146,7 +146,7 @@ static int intel_security_change_key(struct nvdimm *nvdimm, ...@@ -146,7 +146,7 @@ static int intel_security_change_key(struct nvdimm *nvdimm,
static void nvdimm_invalidate_cache(void); static void nvdimm_invalidate_cache(void);
static int intel_security_unlock(struct nvdimm *nvdimm, static int __maybe_unused intel_security_unlock(struct nvdimm *nvdimm,
const struct nvdimm_key_data *key_data) const struct nvdimm_key_data *key_data)
{ {
struct nfit_mem *nfit_mem = nvdimm_provider_data(nvdimm); struct nfit_mem *nfit_mem = nvdimm_provider_data(nvdimm);
...@@ -227,7 +227,7 @@ static int intel_security_disable(struct nvdimm *nvdimm, ...@@ -227,7 +227,7 @@ static int intel_security_disable(struct nvdimm *nvdimm,
return 0; return 0;
} }
static int intel_security_erase(struct nvdimm *nvdimm, static int __maybe_unused intel_security_erase(struct nvdimm *nvdimm,
const struct nvdimm_key_data *key, const struct nvdimm_key_data *key,
enum nvdimm_passphrase_type ptype) enum nvdimm_passphrase_type ptype)
{ {
...@@ -276,7 +276,7 @@ static int intel_security_erase(struct nvdimm *nvdimm, ...@@ -276,7 +276,7 @@ static int intel_security_erase(struct nvdimm *nvdimm,
return 0; return 0;
} }
static int intel_security_query_overwrite(struct nvdimm *nvdimm) static int __maybe_unused intel_security_query_overwrite(struct nvdimm *nvdimm)
{ {
int rc; int rc;
struct nfit_mem *nfit_mem = nvdimm_provider_data(nvdimm); struct nfit_mem *nfit_mem = nvdimm_provider_data(nvdimm);
...@@ -313,7 +313,7 @@ static int intel_security_query_overwrite(struct nvdimm *nvdimm) ...@@ -313,7 +313,7 @@ static int intel_security_query_overwrite(struct nvdimm *nvdimm)
return 0; return 0;
} }
static int intel_security_overwrite(struct nvdimm *nvdimm, static int __maybe_unused intel_security_overwrite(struct nvdimm *nvdimm,
const struct nvdimm_key_data *nkey) const struct nvdimm_key_data *nkey)
{ {
int rc; int rc;
......
...@@ -54,12 +54,12 @@ struct nvdimm { ...@@ -54,12 +54,12 @@ struct nvdimm {
}; };
static inline enum nvdimm_security_state nvdimm_security_state( static inline enum nvdimm_security_state nvdimm_security_state(
struct nvdimm *nvdimm, bool master) struct nvdimm *nvdimm, enum nvdimm_passphrase_type ptype)
{ {
if (!nvdimm->sec.ops) if (!nvdimm->sec.ops)
return -ENXIO; return -ENXIO;
return nvdimm->sec.ops->state(nvdimm, master); return nvdimm->sec.ops->state(nvdimm, ptype);
} }
int nvdimm_security_freeze(struct nvdimm *nvdimm); int nvdimm_security_freeze(struct nvdimm *nvdimm);
#if IS_ENABLED(CONFIG_NVDIMM_KEYS) #if IS_ENABLED(CONFIG_NVDIMM_KEYS)
......
...@@ -160,6 +160,7 @@ static inline struct nd_blk_region_desc *to_blk_region_desc( ...@@ -160,6 +160,7 @@ static inline struct nd_blk_region_desc *to_blk_region_desc(
} }
enum nvdimm_security_state { enum nvdimm_security_state {
NVDIMM_SECURITY_ERROR = -1,
NVDIMM_SECURITY_DISABLED, NVDIMM_SECURITY_DISABLED,
NVDIMM_SECURITY_UNLOCKED, NVDIMM_SECURITY_UNLOCKED,
NVDIMM_SECURITY_LOCKED, NVDIMM_SECURITY_LOCKED,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment