mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-24 05:01:03 +02:00
libnvdimm, pmem, pfn: make pmem_rw_bytes generic and refactor pfn setup
In preparation for providing an alternative (to block device) access mechanism to persistent memory, convert pmem_rw_bytes() to nsio_rw_bytes(). This allows ->rw_bytes() functionality without requiring a 'struct pmem_device' to be instantiated. In other words, when ->rw_bytes() is in use i/o is driven through 'struct nd_namespace_io', otherwise it is driven through 'struct pmem_device' and the block layer. This consolidates the disjoint calls to devm_exit_badblocks() and devm_memunmap() into a common devm_nsio_disable() and cleans up the init path to use a unified pmem_attach_disk() implementation. Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
#include <linux/fs.h>
|
||||
#include <linux/ndctl.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/badblocks.h>
|
||||
|
||||
enum nvdimm_event {
|
||||
NVDIMM_REVALIDATE_POISON,
|
||||
@@ -55,13 +56,19 @@ static inline struct nd_namespace_common *to_ndns(struct device *dev)
|
||||
}
|
||||
|
||||
/**
|
||||
* struct nd_namespace_io - infrastructure for loading an nd_pmem instance
|
||||
* struct nd_namespace_io - device representation of a persistent memory range
|
||||
* @dev: namespace device created by the nd region driver
|
||||
* @res: struct resource conversion of a NFIT SPA table
|
||||
* @size: cached resource_size(@res) for fast path size checks
|
||||
* @addr: virtual address to access the namespace range
|
||||
* @bb: badblocks list for the namespace range
|
||||
*/
|
||||
struct nd_namespace_io {
|
||||
struct nd_namespace_common common;
|
||||
struct resource res;
|
||||
resource_size_t size;
|
||||
void __pmem *addr;
|
||||
struct badblocks bb;
|
||||
};
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user