mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-22 23:04:43 +00:00
libnvdimm, nfit: add interleave-set state-tracking infrastructure
On platforms that have firmware support for reading/writing per-dimm label space, a portion of the dimm may be accessible via an interleave set PMEM mapping in addition to the dimm's BLK (block-data-window aperture(s)) interface. A label, stored in a "configuration data region" on the dimm, disambiguates which dimm addresses are accessed through which exclusive interface. Add infrastructure that allows the kernel to block modifications to a label in the set while any member dimm is active. Note that this is meant only for enforcing "no modifications of active labels" via the coarse ioctl command. Adding/deleting namespaces from an active interleave set is always possible via sysfs. Another aspect of tracking interleave sets is tracking their integrity when DIMMs in a set are physically re-ordered. For this purpose we generate an "interleave-set cookie" that can be recorded in a label and validated against the current configuration. It is the bus provider implementation's responsibility to calculate the interleave set cookie and attach it to a given region. Cc: Neil Brown <neilb@suse.de> Cc: <linux-acpi@vger.kernel.org> Cc: Greg KH <gregkh@linuxfoundation.org> Cc: Robert Moore <robert.moore@intel.com> Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Acked-by: Christoph Hellwig <hch@lst.de> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
9f53f9fa4a
commit
eaf961536e
8 changed files with 269 additions and 5 deletions
|
@ -61,11 +61,16 @@ struct nd_cmd_desc {
|
|||
int out_sizes[ND_CMD_MAX_ELEM];
|
||||
};
|
||||
|
||||
struct nd_interleave_set {
|
||||
u64 cookie;
|
||||
};
|
||||
|
||||
struct nd_region_desc {
|
||||
struct resource *res;
|
||||
struct nd_mapping *nd_mapping;
|
||||
u16 num_mappings;
|
||||
const struct attribute_group **attr_groups;
|
||||
struct nd_interleave_set *nd_set;
|
||||
void *provider_data;
|
||||
};
|
||||
|
||||
|
@ -101,4 +106,5 @@ struct nd_region *nvdimm_blk_region_create(struct nvdimm_bus *nvdimm_bus,
|
|||
struct nd_region_desc *ndr_desc);
|
||||
struct nd_region *nvdimm_volatile_region_create(struct nvdimm_bus *nvdimm_bus,
|
||||
struct nd_region_desc *ndr_desc);
|
||||
u64 nd_fletcher64(void *addr, size_t len, bool le);
|
||||
#endif /* __LIBNVDIMM_H__ */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue