drivers/dax/pmem.c
21
struct nd_pfn *nd_pfn = &nd_dax->nd_pfn;
drivers/dax/pmem.c
32
rc = nvdimm_setup_pfn(nd_pfn, &pgmap);
drivers/dax/pmem.c
38
pfn_sb = nd_pfn->pfn_sb;
drivers/nvdimm/bus.c
954
struct nd_pfn *nd_pfn = is_nd_pfn(dev) ? to_nd_pfn(dev) : NULL;
drivers/nvdimm/bus.c
966
if (nd_btt || nd_pfn || nd_dax) {
drivers/nvdimm/bus.c
969
else if (nd_pfn)
drivers/nvdimm/bus.c
970
ndns = nd_pfn->ndns;
drivers/nvdimm/bus.c
972
ndns = nd_dax->nd_pfn.ndns;
drivers/nvdimm/claim.c
108
struct nd_pfn *nd_pfn = to_nd_pfn_safe(dev);
drivers/nvdimm/claim.c
110
kfree(nd_pfn->uuid);
drivers/nvdimm/claim.c
111
nd_pfn->uuid = NULL;
drivers/nvdimm/claim.c
112
nd_pfn->mode = PFN_MODE_NONE;
drivers/nvdimm/claim.c
75
struct nd_pfn *to_nd_pfn_safe(struct device *dev)
drivers/nvdimm/claim.c
87
return &nd_dax->nd_pfn;
drivers/nvdimm/dax_devs.c
114
nd_pfn = &nd_dax->nd_pfn;
drivers/nvdimm/dax_devs.c
115
nd_pfn->pfn_sb = pfn_sb;
drivers/nvdimm/dax_devs.c
116
rc = nd_pfn_validate(nd_pfn, DAX_SIG);
drivers/nvdimm/dax_devs.c
119
nd_detach_ndns(dax_dev, &nd_pfn->ndns);
drivers/nvdimm/dax_devs.c
17
struct nd_pfn *nd_pfn = &nd_dax->nd_pfn;
drivers/nvdimm/dax_devs.c
20
nd_detach_ndns(dev, &nd_pfn->ndns);
drivers/nvdimm/dax_devs.c
21
ida_free(&nd_region->dax_ida, nd_pfn->id);
drivers/nvdimm/dax_devs.c
22
kfree(nd_pfn->uuid);
drivers/nvdimm/dax_devs.c
28
struct nd_dax *nd_dax = container_of(dev, struct nd_dax, nd_pfn.dev);
drivers/nvdimm/dax_devs.c
49
struct nd_pfn *nd_pfn;
drivers/nvdimm/dax_devs.c
57
nd_pfn = &nd_dax->nd_pfn;
drivers/nvdimm/dax_devs.c
58
nd_pfn->id = ida_alloc(&nd_region->dax_ida, GFP_KERNEL);
drivers/nvdimm/dax_devs.c
59
if (nd_pfn->id < 0) {
drivers/nvdimm/dax_devs.c
64
dev = &nd_pfn->dev;
drivers/nvdimm/dax_devs.c
65
dev_set_name(dev, "dax%d.%d", nd_region->id, nd_pfn->id);
drivers/nvdimm/dax_devs.c
82
dev = nd_pfn_devinit(&nd_dax->nd_pfn, NULL);
drivers/nvdimm/dax_devs.c
92
struct nd_pfn *nd_pfn;
drivers/nvdimm/namespace_devs.c
1434
struct nd_pfn *nd_pfn = is_nd_pfn(dev) ? to_nd_pfn(dev) : NULL;
drivers/nvdimm/namespace_devs.c
1439
if (nd_btt || nd_pfn || nd_dax) {
drivers/nvdimm/namespace_devs.c
1442
else if (nd_pfn)
drivers/nvdimm/namespace_devs.c
1443
ndns = nd_pfn->ndns;
drivers/nvdimm/namespace_devs.c
1445
ndns = nd_dax->nd_pfn.ndns;
drivers/nvdimm/namespace_devs.c
52
struct nd_pfn *nd_pfn = to_nd_pfn(dev);
drivers/nvdimm/namespace_devs.c
54
uuid2 = nd_pfn->uuid;
drivers/nvdimm/nd-core.h
142
struct nd_pfn *to_nd_pfn_safe(struct device *dev);
drivers/nvdimm/nd.h
479
struct nd_pfn nd_pfn;
drivers/nvdimm/nd.h
563
struct nd_pfn *to_nd_pfn(struct device *dev);
drivers/nvdimm/nd.h
571
struct device *nd_pfn_devinit(struct nd_pfn *nd_pfn,
drivers/nvdimm/nd.h
573
int nd_pfn_validate(struct nd_pfn *nd_pfn, const char *sig);
drivers/nvdimm/nd.h
592
static inline int nd_pfn_validate(struct nd_pfn *nd_pfn, const char *sig)
drivers/nvdimm/nd.h
608
return nd_pfn_devinit(&nd_dax->nd_pfn, ndns);
drivers/nvdimm/nd.h
665
int nvdimm_setup_pfn(struct nd_pfn *nd_pfn, struct dev_pagemap *pgmap);
drivers/nvdimm/nd.h
667
static inline int nvdimm_setup_pfn(struct nd_pfn *nd_pfn,
drivers/nvdimm/pfn_devs.c
120
struct nd_pfn *nd_pfn = to_nd_pfn_safe(dev);
drivers/nvdimm/pfn_devs.c
126
rc = nd_size_select_store(dev, buf, &nd_pfn->align,
drivers/nvdimm/pfn_devs.c
138
struct nd_pfn *nd_pfn = to_nd_pfn_safe(dev);
drivers/nvdimm/pfn_devs.c
140
if (nd_pfn->uuid)
drivers/nvdimm/pfn_devs.c
141
return sprintf(buf, "%pUb\n", nd_pfn->uuid);
drivers/nvdimm/pfn_devs.c
148
struct nd_pfn *nd_pfn = to_nd_pfn_safe(dev);
drivers/nvdimm/pfn_devs.c
152
rc = nd_uuid_store(dev, &nd_pfn->uuid, buf, len);
drivers/nvdimm/pfn_devs.c
164
struct nd_pfn *nd_pfn = to_nd_pfn_safe(dev);
drivers/nvdimm/pfn_devs.c
167
return sprintf(buf, "%s\n", nd_pfn->ndns
drivers/nvdimm/pfn_devs.c
168
? dev_name(&nd_pfn->ndns->dev) : "");
drivers/nvdimm/pfn_devs.c
174
struct nd_pfn *nd_pfn = to_nd_pfn_safe(dev);
drivers/nvdimm/pfn_devs.c
179
rc = nd_namespace_store(dev, &nd_pfn->ndns, buf, len);
drivers/nvdimm/pfn_devs.c
190
struct nd_pfn *nd_pfn = to_nd_pfn_safe(dev);
drivers/nvdimm/pfn_devs.c
195
struct nd_pfn_sb *pfn_sb = nd_pfn->pfn_sb;
drivers/nvdimm/pfn_devs.c
197
struct nd_namespace_common *ndns = nd_pfn->ndns;
drivers/nvdimm/pfn_devs.c
21
struct nd_pfn *nd_pfn = to_nd_pfn(dev);
drivers/nvdimm/pfn_devs.c
216
struct nd_pfn *nd_pfn = to_nd_pfn_safe(dev);
drivers/nvdimm/pfn_devs.c
221
struct nd_pfn_sb *pfn_sb = nd_pfn->pfn_sb;
drivers/nvdimm/pfn_devs.c
223
struct nd_namespace_common *ndns = nd_pfn->ndns;
drivers/nvdimm/pfn_devs.c
24
nd_detach_ndns(&nd_pfn->dev, &nd_pfn->ndns);
drivers/nvdimm/pfn_devs.c
25
ida_free(&nd_region->pfn_ida, nd_pfn->id);
drivers/nvdimm/pfn_devs.c
26
kfree(nd_pfn->uuid);
drivers/nvdimm/pfn_devs.c
27
kfree(nd_pfn);
drivers/nvdimm/pfn_devs.c
287
struct device *nd_pfn_devinit(struct nd_pfn *nd_pfn,
drivers/nvdimm/pfn_devs.c
292
if (!nd_pfn)
drivers/nvdimm/pfn_devs.c
295
nd_pfn->mode = PFN_MODE_NONE;
drivers/nvdimm/pfn_devs.c
296
nd_pfn->align = nd_pfn_default_alignment();
drivers/nvdimm/pfn_devs.c
297
dev = &nd_pfn->dev;
drivers/nvdimm/pfn_devs.c
298
device_initialize(&nd_pfn->dev);
drivers/nvdimm/pfn_devs.c
299
lockdep_set_class(&nd_pfn->dev.mutex, &nvdimm_pfn_key);
drivers/nvdimm/pfn_devs.c
30
struct nd_pfn *to_nd_pfn(struct device *dev)
drivers/nvdimm/pfn_devs.c
300
if (ndns && !__nd_attach_ndns(&nd_pfn->dev, ndns, &nd_pfn->ndns)) {
drivers/nvdimm/pfn_devs.c
309
static struct nd_pfn *nd_pfn_alloc(struct nd_region *nd_region)
drivers/nvdimm/pfn_devs.c
311
struct nd_pfn *nd_pfn;
drivers/nvdimm/pfn_devs.c
314
nd_pfn = kzalloc_obj(*nd_pfn);
drivers/nvdimm/pfn_devs.c
315
if (!nd_pfn)
drivers/nvdimm/pfn_devs.c
318
nd_pfn->id = ida_alloc(&nd_region->pfn_ida, GFP_KERNEL);
drivers/nvdimm/pfn_devs.c
319
if (nd_pfn->id < 0) {
drivers/nvdimm/pfn_devs.c
32
struct nd_pfn *nd_pfn = container_of(dev, struct nd_pfn, dev);
drivers/nvdimm/pfn_devs.c
320
kfree(nd_pfn);
drivers/nvdimm/pfn_devs.c
324
dev = &nd_pfn->dev;
drivers/nvdimm/pfn_devs.c
325
dev_set_name(dev, "pfn%d.%d", nd_region->id, nd_pfn->id);
drivers/nvdimm/pfn_devs.c
329
return nd_pfn;
drivers/nvdimm/pfn_devs.c
334
struct nd_pfn *nd_pfn;
drivers/nvdimm/pfn_devs.c
340
nd_pfn = nd_pfn_alloc(nd_region);
drivers/nvdimm/pfn_devs.c
341
dev = nd_pfn_devinit(nd_pfn, NULL);
drivers/nvdimm/pfn_devs.c
35
return nd_pfn;
drivers/nvdimm/pfn_devs.c
353
static int nd_pfn_clear_memmap_errors(struct nd_pfn *nd_pfn)
drivers/nvdimm/pfn_devs.c
355
struct nd_region *nd_region = to_nd_region(nd_pfn->dev.parent);
drivers/nvdimm/pfn_devs.c
356
struct nd_namespace_common *ndns = nd_pfn->ndns;
drivers/nvdimm/pfn_devs.c
358
struct nd_pfn_sb *pfn_sb = nd_pfn->pfn_sb;
drivers/nvdimm/pfn_devs.c
364
if (nd_pfn->mode != PFN_MODE_PMEM)
drivers/nvdimm/pfn_devs.c
375
devm_namespace_disable(&nd_pfn->dev, ndns);
drivers/nvdimm/pfn_devs.c
376
rc = devm_namespace_enable(&nd_pfn->dev, ndns, le64_to_cpu(pfn_sb->dataoff));
drivers/nvdimm/pfn_devs.c
387
dev_dbg(&nd_pfn->dev, "meta: %llx badblocks at %llx\n",
drivers/nvdimm/pfn_devs.c
405
dev_err(&nd_pfn->dev,
drivers/nvdimm/pfn_devs.c
42
struct nd_pfn *nd_pfn = to_nd_pfn_safe(dev);
drivers/nvdimm/pfn_devs.c
44
switch (nd_pfn->mode) {
drivers/nvdimm/pfn_devs.c
440
int nd_pfn_validate(struct nd_pfn *nd_pfn, const char *sig)
drivers/nvdimm/pfn_devs.c
448
struct nd_pfn_sb *pfn_sb = nd_pfn->pfn_sb;
drivers/nvdimm/pfn_devs.c
449
struct nd_namespace_common *ndns = nd_pfn->ndns;
drivers/nvdimm/pfn_devs.c
455
if (!is_memory(nd_pfn->dev.parent))
drivers/nvdimm/pfn_devs.c
504
dev_err(&nd_pfn->dev,
drivers/nvdimm/pfn_devs.c
512
dev_err(&nd_pfn->dev,
drivers/nvdimm/pfn_devs.c
525
dev_err(&nd_pfn->dev, "init failed, alignment mismatch: "
drivers/nvdimm/pfn_devs.c
526
"%ld:%ld\n", nd_pfn->align, align);
drivers/nvdimm/pfn_devs.c
530
if (!nd_pfn->uuid) {
drivers/nvdimm/pfn_devs.c
536
nd_pfn->uuid = kmemdup(pfn_sb->uuid, 16, GFP_KERNEL);
drivers/nvdimm/pfn_devs.c
537
if (!nd_pfn->uuid)
drivers/nvdimm/pfn_devs.c
539
nd_pfn->align = align;
drivers/nvdimm/pfn_devs.c
540
nd_pfn->mode = mode;
drivers/nvdimm/pfn_devs.c
546
if (memcmp(nd_pfn->uuid, pfn_sb->uuid, 16) != 0)
drivers/nvdimm/pfn_devs.c
555
if (nd_pfn->align != align || nd_pfn->mode != mode) {
drivers/nvdimm/pfn_devs.c
556
dev_err(&nd_pfn->dev,
drivers/nvdimm/pfn_devs.c
558
dev_dbg(&nd_pfn->dev, "align: %lx:%lx mode: %d:%d\n",
drivers/nvdimm/pfn_devs.c
559
nd_pfn->align, align, nd_pfn->mode,
drivers/nvdimm/pfn_devs.c
566
dev_err(&nd_pfn->dev, "alignment: %lx exceeds capacity %llx\n",
drivers/nvdimm/pfn_devs.c
57
struct nd_pfn *nd_pfn = to_nd_pfn_safe(dev);
drivers/nvdimm/pfn_devs.c
581
dev_err(&nd_pfn->dev, "pfn array size exceeds capacity of %s\n",
drivers/nvdimm/pfn_devs.c
588
dev_err(&nd_pfn->dev,
drivers/nvdimm/pfn_devs.c
595
dev_err(&nd_pfn->dev, "resource start misaligned\n");
drivers/nvdimm/pfn_devs.c
600
dev_err(&nd_pfn->dev, "resource end misaligned\n");
drivers/nvdimm/pfn_devs.c
605
dev_err(&nd_pfn->dev, "bad offset with small namespace\n");
drivers/nvdimm/pfn_devs.c
615
struct nd_pfn *nd_pfn;
drivers/nvdimm/pfn_devs.c
632
nd_pfn = nd_pfn_alloc(nd_region);
drivers/nvdimm/pfn_devs.c
633
pfn_dev = nd_pfn_devinit(nd_pfn, ndns);
drivers/nvdimm/pfn_devs.c
638
nd_pfn = to_nd_pfn(pfn_dev);
drivers/nvdimm/pfn_devs.c
639
nd_pfn->pfn_sb = pfn_sb;
drivers/nvdimm/pfn_devs.c
640
rc = nd_pfn_validate(nd_pfn, PFN_SIG);
drivers/nvdimm/pfn_devs.c
643
nd_detach_ndns(pfn_dev, &nd_pfn->ndns);
drivers/nvdimm/pfn_devs.c
672
static int __nvdimm_setup_pfn(struct nd_pfn *nd_pfn, struct dev_pagemap *pgmap)
drivers/nvdimm/pfn_devs.c
676
struct nd_pfn_sb *pfn_sb = nd_pfn->pfn_sb;
drivers/nvdimm/pfn_devs.c
68
nd_pfn->mode = PFN_MODE_PMEM;
drivers/nvdimm/pfn_devs.c
681
struct nd_namespace_common *ndns = nd_pfn->ndns;
drivers/nvdimm/pfn_devs.c
696
if (nd_pfn->mode == PFN_MODE_RAM) {
drivers/nvdimm/pfn_devs.c
699
nd_pfn->npfns = le64_to_cpu(pfn_sb->npfns);
drivers/nvdimm/pfn_devs.c
700
} else if (nd_pfn->mode == PFN_MODE_PMEM) {
drivers/nvdimm/pfn_devs.c
701
nd_pfn->npfns = PHYS_PFN((range_len(range) - offset));
drivers/nvdimm/pfn_devs.c
702
if (le64_to_cpu(nd_pfn->pfn_sb->npfns) > nd_pfn->npfns)
drivers/nvdimm/pfn_devs.c
703
dev_info(&nd_pfn->dev,
drivers/nvdimm/pfn_devs.c
705
le64_to_cpu(nd_pfn->pfn_sb->npfns),
drivers/nvdimm/pfn_devs.c
706
nd_pfn->npfns);
drivers/nvdimm/pfn_devs.c
71
nd_pfn->mode = PFN_MODE_RAM;
drivers/nvdimm/pfn_devs.c
717
static int nd_pfn_init(struct nd_pfn *nd_pfn)
drivers/nvdimm/pfn_devs.c
719
struct nd_namespace_common *ndns = nd_pfn->ndns;
drivers/nvdimm/pfn_devs.c
731
pfn_sb = devm_kmalloc(&nd_pfn->dev, sizeof(*pfn_sb), GFP_KERNEL);
drivers/nvdimm/pfn_devs.c
735
nd_pfn->pfn_sb = pfn_sb;
drivers/nvdimm/pfn_devs.c
736
if (is_nd_dax(&nd_pfn->dev))
drivers/nvdimm/pfn_devs.c
74
nd_pfn->mode = PFN_MODE_NONE;
drivers/nvdimm/pfn_devs.c
741
rc = nd_pfn_validate(nd_pfn, sig);
drivers/nvdimm/pfn_devs.c
743
return nd_pfn_clear_memmap_errors(nd_pfn);
drivers/nvdimm/pfn_devs.c
750
nd_region = to_nd_region(nd_pfn->dev.parent);
drivers/nvdimm/pfn_devs.c
752
dev_info(&nd_pfn->dev,
drivers/nvdimm/pfn_devs.c
761
align = max(nd_pfn->align, memremap_compat_align());
drivers/nvdimm/pfn_devs.c
769
dev_err(&nd_pfn->dev, "%s: start %pa misaligned to %#lx\n",
drivers/nvdimm/pfn_devs.c
775
if (nd_pfn->mode == PFN_MODE_PMEM) {
drivers/nvdimm/pfn_devs.c
797
dev_err(&nd_pfn->dev,
drivers/nvdimm/pfn_devs.c
803
} else if (nd_pfn->mode == PFN_MODE_RAM)
drivers/nvdimm/pfn_devs.c
810
dev_err(&nd_pfn->dev, "%s unable to satisfy requested alignment\n",
drivers/nvdimm/pfn_devs.c
816
pfn_sb->mode = cpu_to_le32(nd_pfn->mode);
drivers/nvdimm/pfn_devs.c
820
memcpy(pfn_sb->uuid, nd_pfn->uuid, 16);
drivers/nvdimm/pfn_devs.c
825
pfn_sb->align = cpu_to_le32(nd_pfn->align);
drivers/nvdimm/pfn_devs.c
834
rc = nd_pfn_clear_memmap_errors(nd_pfn);
drivers/nvdimm/pfn_devs.c
845
int nvdimm_setup_pfn(struct nd_pfn *nd_pfn, struct dev_pagemap *pgmap)
drivers/nvdimm/pfn_devs.c
849
if (!nd_pfn->uuid || !nd_pfn->ndns)
drivers/nvdimm/pfn_devs.c
852
rc = nd_pfn_init(nd_pfn);
drivers/nvdimm/pfn_devs.c
857
return __nvdimm_setup_pfn(nd_pfn, pgmap);
drivers/nvdimm/pfn_devs.c
87
struct nd_pfn *nd_pfn = to_nd_pfn_safe(dev);
drivers/nvdimm/pfn_devs.c
89
return sprintf(buf, "%ld\n", nd_pfn->align);
drivers/nvdimm/pmem.c
463
struct nd_pfn *nd_pfn = NULL;
drivers/nvdimm/pmem.c
481
nd_pfn = to_nd_pfn(dev);
drivers/nvdimm/pmem.c
482
rc = nvdimm_setup_pfn(nd_pfn, &pmem->pgmap);
drivers/nvdimm/pmem.c
519
pfn_sb = nd_pfn->pfn_sb;
drivers/nvdimm/pmem.c
696
struct nd_pfn *nd_pfn = to_nd_pfn(dev);
drivers/nvdimm/pmem.c
697
struct nd_pfn_sb *pfn_sb = nd_pfn->pfn_sb;
drivers/nvdimm/pmem.c
699
ndns = nd_pfn->ndns;
drivers/nvdimm/region_devs.c
887
struct nd_pfn *nd_pfn = to_nd_pfn(dev);
drivers/nvdimm/region_devs.c
891
if (nd_region->ns_seed == &nd_pfn->ndns->dev)
drivers/nvdimm/region_devs.c
898
if (nd_region->ns_seed == &nd_dax->nd_pfn.ndns->dev)