#include <linux/memremap.h>
#include <linux/blkdev.h>
#include <linux/device.h>
#include <linux/sizes.h>
#include <linux/slab.h>
#include <linux/fs.h>
#include <linux/mm.h>
#include "nd-core.h"
#include "pfn.h"
#include "nd.h"
static const bool page_struct_override = … IS_ENABLED(…);
static void nd_pfn_release(struct device *dev)
{ … }
struct nd_pfn *to_nd_pfn(struct device *dev)
{ … }
EXPORT_SYMBOL(…);
static ssize_t mode_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static ssize_t mode_store(struct device *dev,
struct device_attribute *attr, const char *buf, size_t len)
{ … }
static DEVICE_ATTR_RW(mode);
static ssize_t align_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static unsigned long *nd_pfn_supported_alignments(unsigned long *alignments)
{ … }
static unsigned long nd_pfn_default_alignment(void)
{ … }
static ssize_t align_store(struct device *dev,
struct device_attribute *attr, const char *buf, size_t len)
{ … }
static DEVICE_ATTR_RW(align);
static ssize_t uuid_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static ssize_t uuid_store(struct device *dev,
struct device_attribute *attr, const char *buf, size_t len)
{ … }
static DEVICE_ATTR_RW(uuid);
static ssize_t namespace_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static ssize_t namespace_store(struct device *dev,
struct device_attribute *attr, const char *buf, size_t len)
{ … }
static DEVICE_ATTR_RW(namespace);
static ssize_t resource_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static DEVICE_ATTR_ADMIN_RO(resource);
static ssize_t size_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static DEVICE_ATTR_RO(size);
static ssize_t supported_alignments_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static DEVICE_ATTR_RO(supported_alignments);
static struct attribute *nd_pfn_attributes[] = …;
static struct attribute_group nd_pfn_attribute_group = …;
const struct attribute_group *nd_pfn_attribute_groups[] = …;
static const struct device_type nd_pfn_device_type = …;
bool is_nd_pfn(struct device *dev)
{ … }
EXPORT_SYMBOL(…);
static struct lock_class_key nvdimm_pfn_key;
struct device *nd_pfn_devinit(struct nd_pfn *nd_pfn,
struct nd_namespace_common *ndns)
{ … }
static struct nd_pfn *nd_pfn_alloc(struct nd_region *nd_region)
{ … }
struct device *nd_pfn_create(struct nd_region *nd_region)
{ … }
static int nd_pfn_clear_memmap_errors(struct nd_pfn *nd_pfn)
{ … }
static bool nd_supported_alignment(unsigned long align)
{ … }
int nd_pfn_validate(struct nd_pfn *nd_pfn, const char *sig)
{ … }
EXPORT_SYMBOL(…);
int nd_pfn_probe(struct device *dev, struct nd_namespace_common *ndns)
{ … }
EXPORT_SYMBOL(…);
static unsigned long init_altmap_base(resource_size_t base)
{ … }
static unsigned long init_altmap_reserve(resource_size_t base)
{ … }
static int __nvdimm_setup_pfn(struct nd_pfn *nd_pfn, struct dev_pagemap *pgmap)
{ … }
static int nd_pfn_init(struct nd_pfn *nd_pfn)
{ … }
int nvdimm_setup_pfn(struct nd_pfn *nd_pfn, struct dev_pagemap *pgmap)
{ … }
EXPORT_SYMBOL_GPL(…);