aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/nvdimm
diff options
context:
space:
mode:
authorD Scott Phillips <scottph@FreeBSD.org>2019-11-12 15:50:30 +0000
committerD Scott Phillips <scottph@FreeBSD.org>2019-11-12 15:50:30 +0000
commitcf8b104f04cf3fb5ffc29ac8117aae138cd86179 (patch)
treeee6f546d14b096ead72519dc2110f6427962d8cf /sys/dev/nvdimm
parentde6f295446472f7ca24f8ba9c5c6b41d42f05ac6 (diff)
Notes
Diffstat (limited to 'sys/dev/nvdimm')
-rw-r--r--sys/dev/nvdimm/nvdimm_acpi.c4
-rw-r--r--sys/dev/nvdimm/nvdimm_spa.c9
-rw-r--r--sys/dev/nvdimm/nvdimm_var.h1
3 files changed, 13 insertions, 1 deletions
diff --git a/sys/dev/nvdimm/nvdimm_acpi.c b/sys/dev/nvdimm/nvdimm_acpi.c
index db176e4a9682..ccb5dd048210 100644
--- a/sys/dev/nvdimm/nvdimm_acpi.c
+++ b/sys/dev/nvdimm/nvdimm_acpi.c
@@ -144,7 +144,9 @@ nvdimm_root_create_spas(struct nvdimm_root_dev *dev, ACPI_TABLE_NFIT *nfitbl)
free(spa_mapping, M_NVDIMM_ACPI);
break;
}
- nvdimm_create_namespaces(spa_mapping, nfitbl);
+ if (nvdimm_spa_type_user_accessible(spa_type) &&
+ spa_type != SPA_TYPE_CONTROL_REGION)
+ nvdimm_create_namespaces(spa_mapping, nfitbl);
SLIST_INSERT_HEAD(&dev->spas, spa_mapping, link);
}
free(spas, M_NVDIMM_ACPI);
diff --git a/sys/dev/nvdimm/nvdimm_spa.c b/sys/dev/nvdimm/nvdimm_spa.c
index 1f7edd09899b..1e9d98e36ab6 100644
--- a/sys/dev/nvdimm/nvdimm_spa.c
+++ b/sys/dev/nvdimm/nvdimm_spa.c
@@ -155,6 +155,15 @@ nvdimm_spa_type_from_uuid(struct uuid *uuid)
return (SPA_TYPE_UNKNOWN);
}
+bool
+nvdimm_spa_type_user_accessible(enum SPA_mapping_type spa_type)
+{
+
+ if ((int)spa_type < 0 || spa_type >= nitems(nvdimm_SPA_uuid_list))
+ return (false);
+ return (nvdimm_SPA_uuid_list[spa_type].u_usr_acc);
+}
+
static vm_memattr_t
nvdimm_spa_memattr(uint64_t efi_mem_flags)
{
diff --git a/sys/dev/nvdimm/nvdimm_var.h b/sys/dev/nvdimm/nvdimm_var.h
index 5398f6e123fd..6852875dc6a2 100644
--- a/sys/dev/nvdimm/nvdimm_var.h
+++ b/sys/dev/nvdimm/nvdimm_var.h
@@ -166,6 +166,7 @@ void acpi_nfit_get_flush_addrs(ACPI_TABLE_NFIT *nfitbl, nfit_handle_t dimm,
uint64_t ***listp, int *countp);
enum SPA_mapping_type nvdimm_spa_type_from_name(const char *);
enum SPA_mapping_type nvdimm_spa_type_from_uuid(struct uuid *);
+bool nvdimm_spa_type_user_accessible(enum SPA_mapping_type);
struct nvdimm_dev *nvdimm_find_by_handle(nfit_handle_t nv_handle);
int nvdimm_spa_init(struct SPA_mapping *spa, ACPI_NFIT_SYSTEM_ADDRESS *nfitaddr,
enum SPA_mapping_type spa_type);