1 /* 2 * Copyright(c) 2013-2015 Intel Corporation. All rights reserved. 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of version 2 of the GNU General Public License as 6 * published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it will be useful, but 9 * WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 * General Public License for more details. 12 */ 13 #include <linux/module.h> 14 #include <linux/device.h> 15 #include <linux/sort.h> 16 #include <linux/slab.h> 17 #include <linux/list.h> 18 #include <linux/nd.h> 19 #include "nd-core.h" 20 #include "pmem.h" 21 #include "nd.h" 22 23 static void namespace_io_release(struct device *dev) 24 { 25 struct nd_namespace_io *nsio = to_nd_namespace_io(dev); 26 27 kfree(nsio); 28 } 29 30 static void namespace_pmem_release(struct device *dev) 31 { 32 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 33 struct nd_region *nd_region = to_nd_region(dev->parent); 34 35 if (nspm->id >= 0) 36 ida_simple_remove(&nd_region->ns_ida, nspm->id); 37 kfree(nspm->alt_name); 38 kfree(nspm->uuid); 39 kfree(nspm); 40 } 41 42 static void namespace_blk_release(struct device *dev) 43 { 44 struct nd_namespace_blk *nsblk = to_nd_namespace_blk(dev); 45 struct nd_region *nd_region = to_nd_region(dev->parent); 46 47 if (nsblk->id >= 0) 48 ida_simple_remove(&nd_region->ns_ida, nsblk->id); 49 kfree(nsblk->alt_name); 50 kfree(nsblk->uuid); 51 kfree(nsblk->res); 52 kfree(nsblk); 53 } 54 55 static const struct device_type namespace_io_device_type = { 56 .name = "nd_namespace_io", 57 .release = namespace_io_release, 58 }; 59 60 static const struct device_type namespace_pmem_device_type = { 61 .name = "nd_namespace_pmem", 62 .release = namespace_pmem_release, 63 }; 64 65 static const struct device_type namespace_blk_device_type = { 66 .name = "nd_namespace_blk", 67 .release = namespace_blk_release, 68 }; 69 70 static bool is_namespace_pmem(const struct device *dev) 71 { 72 return dev ? dev->type == &namespace_pmem_device_type : false; 73 } 74 75 static bool is_namespace_blk(const struct device *dev) 76 { 77 return dev ? dev->type == &namespace_blk_device_type : false; 78 } 79 80 static bool is_namespace_io(const struct device *dev) 81 { 82 return dev ? dev->type == &namespace_io_device_type : false; 83 } 84 85 static int is_uuid_busy(struct device *dev, void *data) 86 { 87 u8 *uuid1 = data, *uuid2 = NULL; 88 89 if (is_namespace_pmem(dev)) { 90 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 91 92 uuid2 = nspm->uuid; 93 } else if (is_namespace_blk(dev)) { 94 struct nd_namespace_blk *nsblk = to_nd_namespace_blk(dev); 95 96 uuid2 = nsblk->uuid; 97 } else if (is_nd_btt(dev)) { 98 struct nd_btt *nd_btt = to_nd_btt(dev); 99 100 uuid2 = nd_btt->uuid; 101 } else if (is_nd_pfn(dev)) { 102 struct nd_pfn *nd_pfn = to_nd_pfn(dev); 103 104 uuid2 = nd_pfn->uuid; 105 } 106 107 if (uuid2 && memcmp(uuid1, uuid2, NSLABEL_UUID_LEN) == 0) 108 return -EBUSY; 109 110 return 0; 111 } 112 113 static int is_namespace_uuid_busy(struct device *dev, void *data) 114 { 115 if (is_nd_region(dev)) 116 return device_for_each_child(dev, data, is_uuid_busy); 117 return 0; 118 } 119 120 /** 121 * nd_is_uuid_unique - verify that no other namespace has @uuid 122 * @dev: any device on a nvdimm_bus 123 * @uuid: uuid to check 124 */ 125 bool nd_is_uuid_unique(struct device *dev, u8 *uuid) 126 { 127 struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev); 128 129 if (!nvdimm_bus) 130 return false; 131 WARN_ON_ONCE(!is_nvdimm_bus_locked(&nvdimm_bus->dev)); 132 if (device_for_each_child(&nvdimm_bus->dev, uuid, 133 is_namespace_uuid_busy) != 0) 134 return false; 135 return true; 136 } 137 138 bool pmem_should_map_pages(struct device *dev) 139 { 140 struct nd_region *nd_region = to_nd_region(dev->parent); 141 struct nd_namespace_io *nsio; 142 143 if (!IS_ENABLED(CONFIG_ZONE_DEVICE)) 144 return false; 145 146 if (!test_bit(ND_REGION_PAGEMAP, &nd_region->flags)) 147 return false; 148 149 if (is_nd_pfn(dev) || is_nd_btt(dev)) 150 return false; 151 152 nsio = to_nd_namespace_io(dev); 153 if (region_intersects(nsio->res.start, resource_size(&nsio->res), 154 IORESOURCE_SYSTEM_RAM, 155 IORES_DESC_NONE) == REGION_MIXED) 156 return false; 157 158 return ARCH_MEMREMAP_PMEM == MEMREMAP_WB; 159 } 160 EXPORT_SYMBOL(pmem_should_map_pages); 161 162 unsigned int pmem_sector_size(struct nd_namespace_common *ndns) 163 { 164 if (is_namespace_pmem(&ndns->dev)) { 165 struct nd_namespace_pmem *nspm; 166 167 nspm = to_nd_namespace_pmem(&ndns->dev); 168 if (nspm->lbasize == 0 || nspm->lbasize == 512) 169 /* default */; 170 else if (nspm->lbasize == 4096) 171 return 4096; 172 else 173 dev_WARN(&ndns->dev, "unsupported sector size: %ld\n", 174 nspm->lbasize); 175 } 176 177 /* 178 * There is no namespace label (is_namespace_io()), or the label 179 * indicates the default sector size. 180 */ 181 return 512; 182 } 183 EXPORT_SYMBOL(pmem_sector_size); 184 185 const char *nvdimm_namespace_disk_name(struct nd_namespace_common *ndns, 186 char *name) 187 { 188 struct nd_region *nd_region = to_nd_region(ndns->dev.parent); 189 const char *suffix = NULL; 190 191 if (ndns->claim && is_nd_btt(ndns->claim)) 192 suffix = "s"; 193 194 if (is_namespace_pmem(&ndns->dev) || is_namespace_io(&ndns->dev)) { 195 int nsidx = 0; 196 197 if (is_namespace_pmem(&ndns->dev)) { 198 struct nd_namespace_pmem *nspm; 199 200 nspm = to_nd_namespace_pmem(&ndns->dev); 201 nsidx = nspm->id; 202 } 203 204 if (nsidx) 205 sprintf(name, "pmem%d.%d%s", nd_region->id, nsidx, 206 suffix ? suffix : ""); 207 else 208 sprintf(name, "pmem%d%s", nd_region->id, 209 suffix ? suffix : ""); 210 } else if (is_namespace_blk(&ndns->dev)) { 211 struct nd_namespace_blk *nsblk; 212 213 nsblk = to_nd_namespace_blk(&ndns->dev); 214 sprintf(name, "ndblk%d.%d%s", nd_region->id, nsblk->id, 215 suffix ? suffix : ""); 216 } else { 217 return NULL; 218 } 219 220 return name; 221 } 222 EXPORT_SYMBOL(nvdimm_namespace_disk_name); 223 224 const u8 *nd_dev_to_uuid(struct device *dev) 225 { 226 static const u8 null_uuid[16]; 227 228 if (!dev) 229 return null_uuid; 230 231 if (is_namespace_pmem(dev)) { 232 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 233 234 return nspm->uuid; 235 } else if (is_namespace_blk(dev)) { 236 struct nd_namespace_blk *nsblk = to_nd_namespace_blk(dev); 237 238 return nsblk->uuid; 239 } else 240 return null_uuid; 241 } 242 EXPORT_SYMBOL(nd_dev_to_uuid); 243 244 static ssize_t nstype_show(struct device *dev, 245 struct device_attribute *attr, char *buf) 246 { 247 struct nd_region *nd_region = to_nd_region(dev->parent); 248 249 return sprintf(buf, "%d\n", nd_region_to_nstype(nd_region)); 250 } 251 static DEVICE_ATTR_RO(nstype); 252 253 static ssize_t __alt_name_store(struct device *dev, const char *buf, 254 const size_t len) 255 { 256 char *input, *pos, *alt_name, **ns_altname; 257 ssize_t rc; 258 259 if (is_namespace_pmem(dev)) { 260 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 261 262 ns_altname = &nspm->alt_name; 263 } else if (is_namespace_blk(dev)) { 264 struct nd_namespace_blk *nsblk = to_nd_namespace_blk(dev); 265 266 ns_altname = &nsblk->alt_name; 267 } else 268 return -ENXIO; 269 270 if (dev->driver || to_ndns(dev)->claim) 271 return -EBUSY; 272 273 input = kmemdup(buf, len + 1, GFP_KERNEL); 274 if (!input) 275 return -ENOMEM; 276 277 input[len] = '\0'; 278 pos = strim(input); 279 if (strlen(pos) + 1 > NSLABEL_NAME_LEN) { 280 rc = -EINVAL; 281 goto out; 282 } 283 284 alt_name = kzalloc(NSLABEL_NAME_LEN, GFP_KERNEL); 285 if (!alt_name) { 286 rc = -ENOMEM; 287 goto out; 288 } 289 kfree(*ns_altname); 290 *ns_altname = alt_name; 291 sprintf(*ns_altname, "%s", pos); 292 rc = len; 293 294 out: 295 kfree(input); 296 return rc; 297 } 298 299 static resource_size_t nd_namespace_blk_size(struct nd_namespace_blk *nsblk) 300 { 301 struct nd_region *nd_region = to_nd_region(nsblk->common.dev.parent); 302 struct nd_mapping *nd_mapping = &nd_region->mapping[0]; 303 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 304 struct nd_label_id label_id; 305 resource_size_t size = 0; 306 struct resource *res; 307 308 if (!nsblk->uuid) 309 return 0; 310 nd_label_gen_id(&label_id, nsblk->uuid, NSLABEL_FLAG_LOCAL); 311 for_each_dpa_resource(ndd, res) 312 if (strcmp(res->name, label_id.id) == 0) 313 size += resource_size(res); 314 return size; 315 } 316 317 static bool __nd_namespace_blk_validate(struct nd_namespace_blk *nsblk) 318 { 319 struct nd_region *nd_region = to_nd_region(nsblk->common.dev.parent); 320 struct nd_mapping *nd_mapping = &nd_region->mapping[0]; 321 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 322 struct nd_label_id label_id; 323 struct resource *res; 324 int count, i; 325 326 if (!nsblk->uuid || !nsblk->lbasize || !ndd) 327 return false; 328 329 count = 0; 330 nd_label_gen_id(&label_id, nsblk->uuid, NSLABEL_FLAG_LOCAL); 331 for_each_dpa_resource(ndd, res) { 332 if (strcmp(res->name, label_id.id) != 0) 333 continue; 334 /* 335 * Resources with unacknowledged adjustments indicate a 336 * failure to update labels 337 */ 338 if (res->flags & DPA_RESOURCE_ADJUSTED) 339 return false; 340 count++; 341 } 342 343 /* These values match after a successful label update */ 344 if (count != nsblk->num_resources) 345 return false; 346 347 for (i = 0; i < nsblk->num_resources; i++) { 348 struct resource *found = NULL; 349 350 for_each_dpa_resource(ndd, res) 351 if (res == nsblk->res[i]) { 352 found = res; 353 break; 354 } 355 /* stale resource */ 356 if (!found) 357 return false; 358 } 359 360 return true; 361 } 362 363 resource_size_t nd_namespace_blk_validate(struct nd_namespace_blk *nsblk) 364 { 365 resource_size_t size; 366 367 nvdimm_bus_lock(&nsblk->common.dev); 368 size = __nd_namespace_blk_validate(nsblk); 369 nvdimm_bus_unlock(&nsblk->common.dev); 370 371 return size; 372 } 373 EXPORT_SYMBOL(nd_namespace_blk_validate); 374 375 376 static int nd_namespace_label_update(struct nd_region *nd_region, 377 struct device *dev) 378 { 379 dev_WARN_ONCE(dev, dev->driver || to_ndns(dev)->claim, 380 "namespace must be idle during label update\n"); 381 if (dev->driver || to_ndns(dev)->claim) 382 return 0; 383 384 /* 385 * Only allow label writes that will result in a valid namespace 386 * or deletion of an existing namespace. 387 */ 388 if (is_namespace_pmem(dev)) { 389 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 390 resource_size_t size = resource_size(&nspm->nsio.res); 391 392 if (size == 0 && nspm->uuid) 393 /* delete allocation */; 394 else if (!nspm->uuid) 395 return 0; 396 397 return nd_pmem_namespace_label_update(nd_region, nspm, size); 398 } else if (is_namespace_blk(dev)) { 399 struct nd_namespace_blk *nsblk = to_nd_namespace_blk(dev); 400 resource_size_t size = nd_namespace_blk_size(nsblk); 401 402 if (size == 0 && nsblk->uuid) 403 /* delete allocation */; 404 else if (!nsblk->uuid || !nsblk->lbasize) 405 return 0; 406 407 return nd_blk_namespace_label_update(nd_region, nsblk, size); 408 } else 409 return -ENXIO; 410 } 411 412 static ssize_t alt_name_store(struct device *dev, 413 struct device_attribute *attr, const char *buf, size_t len) 414 { 415 struct nd_region *nd_region = to_nd_region(dev->parent); 416 ssize_t rc; 417 418 device_lock(dev); 419 nvdimm_bus_lock(dev); 420 wait_nvdimm_bus_probe_idle(dev); 421 rc = __alt_name_store(dev, buf, len); 422 if (rc >= 0) 423 rc = nd_namespace_label_update(nd_region, dev); 424 dev_dbg(dev, "%s: %s(%zd)\n", __func__, rc < 0 ? "fail " : "", rc); 425 nvdimm_bus_unlock(dev); 426 device_unlock(dev); 427 428 return rc < 0 ? rc : len; 429 } 430 431 static ssize_t alt_name_show(struct device *dev, 432 struct device_attribute *attr, char *buf) 433 { 434 char *ns_altname; 435 436 if (is_namespace_pmem(dev)) { 437 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 438 439 ns_altname = nspm->alt_name; 440 } else if (is_namespace_blk(dev)) { 441 struct nd_namespace_blk *nsblk = to_nd_namespace_blk(dev); 442 443 ns_altname = nsblk->alt_name; 444 } else 445 return -ENXIO; 446 447 return sprintf(buf, "%s\n", ns_altname ? ns_altname : ""); 448 } 449 static DEVICE_ATTR_RW(alt_name); 450 451 static int scan_free(struct nd_region *nd_region, 452 struct nd_mapping *nd_mapping, struct nd_label_id *label_id, 453 resource_size_t n) 454 { 455 bool is_blk = strncmp(label_id->id, "blk", 3) == 0; 456 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 457 int rc = 0; 458 459 while (n) { 460 struct resource *res, *last; 461 resource_size_t new_start; 462 463 last = NULL; 464 for_each_dpa_resource(ndd, res) 465 if (strcmp(res->name, label_id->id) == 0) 466 last = res; 467 res = last; 468 if (!res) 469 return 0; 470 471 if (n >= resource_size(res)) { 472 n -= resource_size(res); 473 nd_dbg_dpa(nd_region, ndd, res, "delete %d\n", rc); 474 nvdimm_free_dpa(ndd, res); 475 /* retry with last resource deleted */ 476 continue; 477 } 478 479 /* 480 * Keep BLK allocations relegated to high DPA as much as 481 * possible 482 */ 483 if (is_blk) 484 new_start = res->start + n; 485 else 486 new_start = res->start; 487 488 rc = adjust_resource(res, new_start, resource_size(res) - n); 489 if (rc == 0) 490 res->flags |= DPA_RESOURCE_ADJUSTED; 491 nd_dbg_dpa(nd_region, ndd, res, "shrink %d\n", rc); 492 break; 493 } 494 495 return rc; 496 } 497 498 /** 499 * shrink_dpa_allocation - for each dimm in region free n bytes for label_id 500 * @nd_region: the set of dimms to reclaim @n bytes from 501 * @label_id: unique identifier for the namespace consuming this dpa range 502 * @n: number of bytes per-dimm to release 503 * 504 * Assumes resources are ordered. Starting from the end try to 505 * adjust_resource() the allocation to @n, but if @n is larger than the 506 * allocation delete it and find the 'new' last allocation in the label 507 * set. 508 */ 509 static int shrink_dpa_allocation(struct nd_region *nd_region, 510 struct nd_label_id *label_id, resource_size_t n) 511 { 512 int i; 513 514 for (i = 0; i < nd_region->ndr_mappings; i++) { 515 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; 516 int rc; 517 518 rc = scan_free(nd_region, nd_mapping, label_id, n); 519 if (rc) 520 return rc; 521 } 522 523 return 0; 524 } 525 526 static resource_size_t init_dpa_allocation(struct nd_label_id *label_id, 527 struct nd_region *nd_region, struct nd_mapping *nd_mapping, 528 resource_size_t n) 529 { 530 bool is_blk = strncmp(label_id->id, "blk", 3) == 0; 531 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 532 resource_size_t first_dpa; 533 struct resource *res; 534 int rc = 0; 535 536 /* allocate blk from highest dpa first */ 537 if (is_blk) 538 first_dpa = nd_mapping->start + nd_mapping->size - n; 539 else 540 first_dpa = nd_mapping->start; 541 542 /* first resource allocation for this label-id or dimm */ 543 res = nvdimm_allocate_dpa(ndd, label_id, first_dpa, n); 544 if (!res) 545 rc = -EBUSY; 546 547 nd_dbg_dpa(nd_region, ndd, res, "init %d\n", rc); 548 return rc ? n : 0; 549 } 550 551 552 /** 553 * space_valid() - validate free dpa space against constraints 554 * @nd_region: hosting region of the free space 555 * @ndd: dimm device data for debug 556 * @label_id: namespace id to allocate space 557 * @prev: potential allocation that precedes free space 558 * @next: allocation that follows the given free space range 559 * @exist: first allocation with same id in the mapping 560 * @n: range that must satisfied for pmem allocations 561 * @valid: free space range to validate 562 * 563 * BLK-space is valid as long as it does not precede a PMEM 564 * allocation in a given region. PMEM-space must be contiguous 565 * and adjacent to an existing existing allocation (if one 566 * exists). If reserving PMEM any space is valid. 567 */ 568 static void space_valid(struct nd_region *nd_region, struct nvdimm_drvdata *ndd, 569 struct nd_label_id *label_id, struct resource *prev, 570 struct resource *next, struct resource *exist, 571 resource_size_t n, struct resource *valid) 572 { 573 bool is_reserve = strcmp(label_id->id, "pmem-reserve") == 0; 574 bool is_pmem = strncmp(label_id->id, "pmem", 4) == 0; 575 576 if (valid->start >= valid->end) 577 goto invalid; 578 579 if (is_reserve) 580 return; 581 582 if (!is_pmem) { 583 struct nd_mapping *nd_mapping = &nd_region->mapping[0]; 584 struct nvdimm_bus *nvdimm_bus; 585 struct blk_alloc_info info = { 586 .nd_mapping = nd_mapping, 587 .available = nd_mapping->size, 588 .res = valid, 589 }; 590 591 WARN_ON(!is_nd_blk(&nd_region->dev)); 592 nvdimm_bus = walk_to_nvdimm_bus(&nd_region->dev); 593 device_for_each_child(&nvdimm_bus->dev, &info, alias_dpa_busy); 594 return; 595 } 596 597 /* allocation needs to be contiguous, so this is all or nothing */ 598 if (resource_size(valid) < n) 599 goto invalid; 600 601 /* we've got all the space we need and no existing allocation */ 602 if (!exist) 603 return; 604 605 /* allocation needs to be contiguous with the existing namespace */ 606 if (valid->start == exist->end + 1 607 || valid->end == exist->start - 1) 608 return; 609 610 invalid: 611 /* truncate @valid size to 0 */ 612 valid->end = valid->start - 1; 613 } 614 615 enum alloc_loc { 616 ALLOC_ERR = 0, ALLOC_BEFORE, ALLOC_MID, ALLOC_AFTER, 617 }; 618 619 static resource_size_t scan_allocate(struct nd_region *nd_region, 620 struct nd_mapping *nd_mapping, struct nd_label_id *label_id, 621 resource_size_t n) 622 { 623 resource_size_t mapping_end = nd_mapping->start + nd_mapping->size - 1; 624 bool is_pmem = strncmp(label_id->id, "pmem", 4) == 0; 625 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 626 struct resource *res, *exist = NULL, valid; 627 const resource_size_t to_allocate = n; 628 int first; 629 630 for_each_dpa_resource(ndd, res) 631 if (strcmp(label_id->id, res->name) == 0) 632 exist = res; 633 634 valid.start = nd_mapping->start; 635 valid.end = mapping_end; 636 valid.name = "free space"; 637 retry: 638 first = 0; 639 for_each_dpa_resource(ndd, res) { 640 struct resource *next = res->sibling, *new_res = NULL; 641 resource_size_t allocate, available = 0; 642 enum alloc_loc loc = ALLOC_ERR; 643 const char *action; 644 int rc = 0; 645 646 /* ignore resources outside this nd_mapping */ 647 if (res->start > mapping_end) 648 continue; 649 if (res->end < nd_mapping->start) 650 continue; 651 652 /* space at the beginning of the mapping */ 653 if (!first++ && res->start > nd_mapping->start) { 654 valid.start = nd_mapping->start; 655 valid.end = res->start - 1; 656 space_valid(nd_region, ndd, label_id, NULL, next, exist, 657 to_allocate, &valid); 658 available = resource_size(&valid); 659 if (available) 660 loc = ALLOC_BEFORE; 661 } 662 663 /* space between allocations */ 664 if (!loc && next) { 665 valid.start = res->start + resource_size(res); 666 valid.end = min(mapping_end, next->start - 1); 667 space_valid(nd_region, ndd, label_id, res, next, exist, 668 to_allocate, &valid); 669 available = resource_size(&valid); 670 if (available) 671 loc = ALLOC_MID; 672 } 673 674 /* space at the end of the mapping */ 675 if (!loc && !next) { 676 valid.start = res->start + resource_size(res); 677 valid.end = mapping_end; 678 space_valid(nd_region, ndd, label_id, res, next, exist, 679 to_allocate, &valid); 680 available = resource_size(&valid); 681 if (available) 682 loc = ALLOC_AFTER; 683 } 684 685 if (!loc || !available) 686 continue; 687 allocate = min(available, n); 688 switch (loc) { 689 case ALLOC_BEFORE: 690 if (strcmp(res->name, label_id->id) == 0) { 691 /* adjust current resource up */ 692 rc = adjust_resource(res, res->start - allocate, 693 resource_size(res) + allocate); 694 action = "cur grow up"; 695 } else 696 action = "allocate"; 697 break; 698 case ALLOC_MID: 699 if (strcmp(next->name, label_id->id) == 0) { 700 /* adjust next resource up */ 701 rc = adjust_resource(next, next->start 702 - allocate, resource_size(next) 703 + allocate); 704 new_res = next; 705 action = "next grow up"; 706 } else if (strcmp(res->name, label_id->id) == 0) { 707 action = "grow down"; 708 } else 709 action = "allocate"; 710 break; 711 case ALLOC_AFTER: 712 if (strcmp(res->name, label_id->id) == 0) 713 action = "grow down"; 714 else 715 action = "allocate"; 716 break; 717 default: 718 return n; 719 } 720 721 if (strcmp(action, "allocate") == 0) { 722 /* BLK allocate bottom up */ 723 if (!is_pmem) 724 valid.start += available - allocate; 725 726 new_res = nvdimm_allocate_dpa(ndd, label_id, 727 valid.start, allocate); 728 if (!new_res) 729 rc = -EBUSY; 730 } else if (strcmp(action, "grow down") == 0) { 731 /* adjust current resource down */ 732 rc = adjust_resource(res, res->start, resource_size(res) 733 + allocate); 734 if (rc == 0) 735 res->flags |= DPA_RESOURCE_ADJUSTED; 736 } 737 738 if (!new_res) 739 new_res = res; 740 741 nd_dbg_dpa(nd_region, ndd, new_res, "%s(%d) %d\n", 742 action, loc, rc); 743 744 if (rc) 745 return n; 746 747 n -= allocate; 748 if (n) { 749 /* 750 * Retry scan with newly inserted resources. 751 * For example, if we did an ALLOC_BEFORE 752 * insertion there may also have been space 753 * available for an ALLOC_AFTER insertion, so we 754 * need to check this same resource again 755 */ 756 goto retry; 757 } else 758 return 0; 759 } 760 761 /* 762 * If we allocated nothing in the BLK case it may be because we are in 763 * an initial "pmem-reserve pass". Only do an initial BLK allocation 764 * when none of the DPA space is reserved. 765 */ 766 if ((is_pmem || !ndd->dpa.child) && n == to_allocate) 767 return init_dpa_allocation(label_id, nd_region, nd_mapping, n); 768 return n; 769 } 770 771 static int merge_dpa(struct nd_region *nd_region, 772 struct nd_mapping *nd_mapping, struct nd_label_id *label_id) 773 { 774 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 775 struct resource *res; 776 777 if (strncmp("pmem", label_id->id, 4) == 0) 778 return 0; 779 retry: 780 for_each_dpa_resource(ndd, res) { 781 int rc; 782 struct resource *next = res->sibling; 783 resource_size_t end = res->start + resource_size(res); 784 785 if (!next || strcmp(res->name, label_id->id) != 0 786 || strcmp(next->name, label_id->id) != 0 787 || end != next->start) 788 continue; 789 end += resource_size(next); 790 nvdimm_free_dpa(ndd, next); 791 rc = adjust_resource(res, res->start, end - res->start); 792 nd_dbg_dpa(nd_region, ndd, res, "merge %d\n", rc); 793 if (rc) 794 return rc; 795 res->flags |= DPA_RESOURCE_ADJUSTED; 796 goto retry; 797 } 798 799 return 0; 800 } 801 802 static int __reserve_free_pmem(struct device *dev, void *data) 803 { 804 struct nvdimm *nvdimm = data; 805 struct nd_region *nd_region; 806 struct nd_label_id label_id; 807 int i; 808 809 if (!is_memory(dev)) 810 return 0; 811 812 nd_region = to_nd_region(dev); 813 if (nd_region->ndr_mappings == 0) 814 return 0; 815 816 memset(&label_id, 0, sizeof(label_id)); 817 strcat(label_id.id, "pmem-reserve"); 818 for (i = 0; i < nd_region->ndr_mappings; i++) { 819 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; 820 resource_size_t n, rem = 0; 821 822 if (nd_mapping->nvdimm != nvdimm) 823 continue; 824 825 n = nd_pmem_available_dpa(nd_region, nd_mapping, &rem); 826 if (n == 0) 827 return 0; 828 rem = scan_allocate(nd_region, nd_mapping, &label_id, n); 829 dev_WARN_ONCE(&nd_region->dev, rem, 830 "pmem reserve underrun: %#llx of %#llx bytes\n", 831 (unsigned long long) n - rem, 832 (unsigned long long) n); 833 return rem ? -ENXIO : 0; 834 } 835 836 return 0; 837 } 838 839 static void release_free_pmem(struct nvdimm_bus *nvdimm_bus, 840 struct nd_mapping *nd_mapping) 841 { 842 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 843 struct resource *res, *_res; 844 845 for_each_dpa_resource_safe(ndd, res, _res) 846 if (strcmp(res->name, "pmem-reserve") == 0) 847 nvdimm_free_dpa(ndd, res); 848 } 849 850 static int reserve_free_pmem(struct nvdimm_bus *nvdimm_bus, 851 struct nd_mapping *nd_mapping) 852 { 853 struct nvdimm *nvdimm = nd_mapping->nvdimm; 854 int rc; 855 856 rc = device_for_each_child(&nvdimm_bus->dev, nvdimm, 857 __reserve_free_pmem); 858 if (rc) 859 release_free_pmem(nvdimm_bus, nd_mapping); 860 return rc; 861 } 862 863 /** 864 * grow_dpa_allocation - for each dimm allocate n bytes for @label_id 865 * @nd_region: the set of dimms to allocate @n more bytes from 866 * @label_id: unique identifier for the namespace consuming this dpa range 867 * @n: number of bytes per-dimm to add to the existing allocation 868 * 869 * Assumes resources are ordered. For BLK regions, first consume 870 * BLK-only available DPA free space, then consume PMEM-aliased DPA 871 * space starting at the highest DPA. For PMEM regions start 872 * allocations from the start of an interleave set and end at the first 873 * BLK allocation or the end of the interleave set, whichever comes 874 * first. 875 */ 876 static int grow_dpa_allocation(struct nd_region *nd_region, 877 struct nd_label_id *label_id, resource_size_t n) 878 { 879 struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(&nd_region->dev); 880 bool is_pmem = strncmp(label_id->id, "pmem", 4) == 0; 881 int i; 882 883 for (i = 0; i < nd_region->ndr_mappings; i++) { 884 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; 885 resource_size_t rem = n; 886 int rc, j; 887 888 /* 889 * In the BLK case try once with all unallocated PMEM 890 * reserved, and once without 891 */ 892 for (j = is_pmem; j < 2; j++) { 893 bool blk_only = j == 0; 894 895 if (blk_only) { 896 rc = reserve_free_pmem(nvdimm_bus, nd_mapping); 897 if (rc) 898 return rc; 899 } 900 rem = scan_allocate(nd_region, nd_mapping, 901 label_id, rem); 902 if (blk_only) 903 release_free_pmem(nvdimm_bus, nd_mapping); 904 905 /* try again and allow encroachments into PMEM */ 906 if (rem == 0) 907 break; 908 } 909 910 dev_WARN_ONCE(&nd_region->dev, rem, 911 "allocation underrun: %#llx of %#llx bytes\n", 912 (unsigned long long) n - rem, 913 (unsigned long long) n); 914 if (rem) 915 return -ENXIO; 916 917 rc = merge_dpa(nd_region, nd_mapping, label_id); 918 if (rc) 919 return rc; 920 } 921 922 return 0; 923 } 924 925 static void nd_namespace_pmem_set_resource(struct nd_region *nd_region, 926 struct nd_namespace_pmem *nspm, resource_size_t size) 927 { 928 struct resource *res = &nspm->nsio.res; 929 resource_size_t offset = 0; 930 931 if (size && !nspm->uuid) { 932 WARN_ON_ONCE(1); 933 size = 0; 934 } 935 936 if (size && nspm->uuid) { 937 struct nd_mapping *nd_mapping = &nd_region->mapping[0]; 938 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 939 struct nd_label_id label_id; 940 struct resource *res; 941 942 if (!ndd) { 943 size = 0; 944 goto out; 945 } 946 947 nd_label_gen_id(&label_id, nspm->uuid, 0); 948 949 /* calculate a spa offset from the dpa allocation offset */ 950 for_each_dpa_resource(ndd, res) 951 if (strcmp(res->name, label_id.id) == 0) { 952 offset = (res->start - nd_mapping->start) 953 * nd_region->ndr_mappings; 954 goto out; 955 } 956 957 WARN_ON_ONCE(1); 958 size = 0; 959 } 960 961 out: 962 res->start = nd_region->ndr_start + offset; 963 res->end = res->start + size - 1; 964 } 965 966 static bool uuid_not_set(const u8 *uuid, struct device *dev, const char *where) 967 { 968 if (!uuid) { 969 dev_dbg(dev, "%s: uuid not set\n", where); 970 return true; 971 } 972 return false; 973 } 974 975 static ssize_t __size_store(struct device *dev, unsigned long long val) 976 { 977 resource_size_t allocated = 0, available = 0; 978 struct nd_region *nd_region = to_nd_region(dev->parent); 979 struct nd_namespace_common *ndns = to_ndns(dev); 980 struct nd_mapping *nd_mapping; 981 struct nvdimm_drvdata *ndd; 982 struct nd_label_id label_id; 983 u32 flags = 0, remainder; 984 int rc, i, id = -1; 985 u8 *uuid = NULL; 986 987 if (dev->driver || ndns->claim) 988 return -EBUSY; 989 990 if (is_namespace_pmem(dev)) { 991 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 992 993 uuid = nspm->uuid; 994 id = nspm->id; 995 } else if (is_namespace_blk(dev)) { 996 struct nd_namespace_blk *nsblk = to_nd_namespace_blk(dev); 997 998 uuid = nsblk->uuid; 999 flags = NSLABEL_FLAG_LOCAL; 1000 id = nsblk->id; 1001 } 1002 1003 /* 1004 * We need a uuid for the allocation-label and dimm(s) on which 1005 * to store the label. 1006 */ 1007 if (uuid_not_set(uuid, dev, __func__)) 1008 return -ENXIO; 1009 if (nd_region->ndr_mappings == 0) { 1010 dev_dbg(dev, "%s: not associated with dimm(s)\n", __func__); 1011 return -ENXIO; 1012 } 1013 1014 div_u64_rem(val, SZ_4K * nd_region->ndr_mappings, &remainder); 1015 if (remainder) { 1016 dev_dbg(dev, "%llu is not %dK aligned\n", val, 1017 (SZ_4K * nd_region->ndr_mappings) / SZ_1K); 1018 return -EINVAL; 1019 } 1020 1021 nd_label_gen_id(&label_id, uuid, flags); 1022 for (i = 0; i < nd_region->ndr_mappings; i++) { 1023 nd_mapping = &nd_region->mapping[i]; 1024 ndd = to_ndd(nd_mapping); 1025 1026 /* 1027 * All dimms in an interleave set, or the base dimm for a blk 1028 * region, need to be enabled for the size to be changed. 1029 */ 1030 if (!ndd) 1031 return -ENXIO; 1032 1033 allocated += nvdimm_allocated_dpa(ndd, &label_id); 1034 } 1035 available = nd_region_available_dpa(nd_region); 1036 1037 if (val > available + allocated) 1038 return -ENOSPC; 1039 1040 if (val == allocated) 1041 return 0; 1042 1043 val = div_u64(val, nd_region->ndr_mappings); 1044 allocated = div_u64(allocated, nd_region->ndr_mappings); 1045 if (val < allocated) 1046 rc = shrink_dpa_allocation(nd_region, &label_id, 1047 allocated - val); 1048 else 1049 rc = grow_dpa_allocation(nd_region, &label_id, val - allocated); 1050 1051 if (rc) 1052 return rc; 1053 1054 if (is_namespace_pmem(dev)) { 1055 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 1056 1057 nd_namespace_pmem_set_resource(nd_region, nspm, 1058 val * nd_region->ndr_mappings); 1059 } 1060 1061 /* 1062 * Try to delete the namespace if we deleted all of its 1063 * allocation, this is not the seed or 0th device for the 1064 * region, and it is not actively claimed by a btt, pfn, or dax 1065 * instance. 1066 */ 1067 if (val == 0 && id != 0 && nd_region->ns_seed != dev && !ndns->claim) 1068 nd_device_unregister(dev, ND_ASYNC); 1069 1070 return rc; 1071 } 1072 1073 static ssize_t size_store(struct device *dev, 1074 struct device_attribute *attr, const char *buf, size_t len) 1075 { 1076 struct nd_region *nd_region = to_nd_region(dev->parent); 1077 unsigned long long val; 1078 u8 **uuid = NULL; 1079 int rc; 1080 1081 rc = kstrtoull(buf, 0, &val); 1082 if (rc) 1083 return rc; 1084 1085 device_lock(dev); 1086 nvdimm_bus_lock(dev); 1087 wait_nvdimm_bus_probe_idle(dev); 1088 rc = __size_store(dev, val); 1089 if (rc >= 0) 1090 rc = nd_namespace_label_update(nd_region, dev); 1091 1092 if (is_namespace_pmem(dev)) { 1093 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 1094 1095 uuid = &nspm->uuid; 1096 } else if (is_namespace_blk(dev)) { 1097 struct nd_namespace_blk *nsblk = to_nd_namespace_blk(dev); 1098 1099 uuid = &nsblk->uuid; 1100 } 1101 1102 if (rc == 0 && val == 0 && uuid) { 1103 /* setting size zero == 'delete namespace' */ 1104 kfree(*uuid); 1105 *uuid = NULL; 1106 } 1107 1108 dev_dbg(dev, "%s: %llx %s (%d)\n", __func__, val, rc < 0 1109 ? "fail" : "success", rc); 1110 1111 nvdimm_bus_unlock(dev); 1112 device_unlock(dev); 1113 1114 return rc < 0 ? rc : len; 1115 } 1116 1117 resource_size_t __nvdimm_namespace_capacity(struct nd_namespace_common *ndns) 1118 { 1119 struct device *dev = &ndns->dev; 1120 1121 if (is_namespace_pmem(dev)) { 1122 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 1123 1124 return resource_size(&nspm->nsio.res); 1125 } else if (is_namespace_blk(dev)) { 1126 return nd_namespace_blk_size(to_nd_namespace_blk(dev)); 1127 } else if (is_namespace_io(dev)) { 1128 struct nd_namespace_io *nsio = to_nd_namespace_io(dev); 1129 1130 return resource_size(&nsio->res); 1131 } else 1132 WARN_ONCE(1, "unknown namespace type\n"); 1133 return 0; 1134 } 1135 1136 resource_size_t nvdimm_namespace_capacity(struct nd_namespace_common *ndns) 1137 { 1138 resource_size_t size; 1139 1140 nvdimm_bus_lock(&ndns->dev); 1141 size = __nvdimm_namespace_capacity(ndns); 1142 nvdimm_bus_unlock(&ndns->dev); 1143 1144 return size; 1145 } 1146 EXPORT_SYMBOL(nvdimm_namespace_capacity); 1147 1148 static ssize_t size_show(struct device *dev, 1149 struct device_attribute *attr, char *buf) 1150 { 1151 return sprintf(buf, "%llu\n", (unsigned long long) 1152 nvdimm_namespace_capacity(to_ndns(dev))); 1153 } 1154 static DEVICE_ATTR(size, 0444, size_show, size_store); 1155 1156 static u8 *namespace_to_uuid(struct device *dev) 1157 { 1158 if (is_namespace_pmem(dev)) { 1159 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 1160 1161 return nspm->uuid; 1162 } else if (is_namespace_blk(dev)) { 1163 struct nd_namespace_blk *nsblk = to_nd_namespace_blk(dev); 1164 1165 return nsblk->uuid; 1166 } else 1167 return ERR_PTR(-ENXIO); 1168 } 1169 1170 static ssize_t uuid_show(struct device *dev, 1171 struct device_attribute *attr, char *buf) 1172 { 1173 u8 *uuid = namespace_to_uuid(dev); 1174 1175 if (IS_ERR(uuid)) 1176 return PTR_ERR(uuid); 1177 if (uuid) 1178 return sprintf(buf, "%pUb\n", uuid); 1179 return sprintf(buf, "\n"); 1180 } 1181 1182 /** 1183 * namespace_update_uuid - check for a unique uuid and whether we're "renaming" 1184 * @nd_region: parent region so we can updates all dimms in the set 1185 * @dev: namespace type for generating label_id 1186 * @new_uuid: incoming uuid 1187 * @old_uuid: reference to the uuid storage location in the namespace object 1188 */ 1189 static int namespace_update_uuid(struct nd_region *nd_region, 1190 struct device *dev, u8 *new_uuid, u8 **old_uuid) 1191 { 1192 u32 flags = is_namespace_blk(dev) ? NSLABEL_FLAG_LOCAL : 0; 1193 struct nd_label_id old_label_id; 1194 struct nd_label_id new_label_id; 1195 int i; 1196 1197 if (!nd_is_uuid_unique(dev, new_uuid)) 1198 return -EINVAL; 1199 1200 if (*old_uuid == NULL) 1201 goto out; 1202 1203 /* 1204 * If we've already written a label with this uuid, then it's 1205 * too late to rename because we can't reliably update the uuid 1206 * without losing the old namespace. Userspace must delete this 1207 * namespace to abandon the old uuid. 1208 */ 1209 for (i = 0; i < nd_region->ndr_mappings; i++) { 1210 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; 1211 1212 /* 1213 * This check by itself is sufficient because old_uuid 1214 * would be NULL above if this uuid did not exist in the 1215 * currently written set. 1216 * 1217 * FIXME: can we delete uuid with zero dpa allocated? 1218 */ 1219 if (list_empty(&nd_mapping->labels)) 1220 return -EBUSY; 1221 } 1222 1223 nd_label_gen_id(&old_label_id, *old_uuid, flags); 1224 nd_label_gen_id(&new_label_id, new_uuid, flags); 1225 for (i = 0; i < nd_region->ndr_mappings; i++) { 1226 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; 1227 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 1228 struct resource *res; 1229 1230 for_each_dpa_resource(ndd, res) 1231 if (strcmp(res->name, old_label_id.id) == 0) 1232 sprintf((void *) res->name, "%s", 1233 new_label_id.id); 1234 } 1235 kfree(*old_uuid); 1236 out: 1237 *old_uuid = new_uuid; 1238 return 0; 1239 } 1240 1241 static ssize_t uuid_store(struct device *dev, 1242 struct device_attribute *attr, const char *buf, size_t len) 1243 { 1244 struct nd_region *nd_region = to_nd_region(dev->parent); 1245 u8 *uuid = NULL; 1246 ssize_t rc = 0; 1247 u8 **ns_uuid; 1248 1249 if (is_namespace_pmem(dev)) { 1250 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 1251 1252 ns_uuid = &nspm->uuid; 1253 } else if (is_namespace_blk(dev)) { 1254 struct nd_namespace_blk *nsblk = to_nd_namespace_blk(dev); 1255 1256 ns_uuid = &nsblk->uuid; 1257 } else 1258 return -ENXIO; 1259 1260 device_lock(dev); 1261 nvdimm_bus_lock(dev); 1262 wait_nvdimm_bus_probe_idle(dev); 1263 if (to_ndns(dev)->claim) 1264 rc = -EBUSY; 1265 if (rc >= 0) 1266 rc = nd_uuid_store(dev, &uuid, buf, len); 1267 if (rc >= 0) 1268 rc = namespace_update_uuid(nd_region, dev, uuid, ns_uuid); 1269 if (rc >= 0) 1270 rc = nd_namespace_label_update(nd_region, dev); 1271 else 1272 kfree(uuid); 1273 dev_dbg(dev, "%s: result: %zd wrote: %s%s", __func__, 1274 rc, buf, buf[len - 1] == '\n' ? "" : "\n"); 1275 nvdimm_bus_unlock(dev); 1276 device_unlock(dev); 1277 1278 return rc < 0 ? rc : len; 1279 } 1280 static DEVICE_ATTR_RW(uuid); 1281 1282 static ssize_t resource_show(struct device *dev, 1283 struct device_attribute *attr, char *buf) 1284 { 1285 struct resource *res; 1286 1287 if (is_namespace_pmem(dev)) { 1288 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 1289 1290 res = &nspm->nsio.res; 1291 } else if (is_namespace_io(dev)) { 1292 struct nd_namespace_io *nsio = to_nd_namespace_io(dev); 1293 1294 res = &nsio->res; 1295 } else 1296 return -ENXIO; 1297 1298 /* no address to convey if the namespace has no allocation */ 1299 if (resource_size(res) == 0) 1300 return -ENXIO; 1301 return sprintf(buf, "%#llx\n", (unsigned long long) res->start); 1302 } 1303 static DEVICE_ATTR_RO(resource); 1304 1305 static const unsigned long blk_lbasize_supported[] = { 512, 520, 528, 1306 4096, 4104, 4160, 4224, 0 }; 1307 1308 static const unsigned long pmem_lbasize_supported[] = { 512, 4096, 0 }; 1309 1310 static ssize_t sector_size_show(struct device *dev, 1311 struct device_attribute *attr, char *buf) 1312 { 1313 if (is_namespace_blk(dev)) { 1314 struct nd_namespace_blk *nsblk = to_nd_namespace_blk(dev); 1315 1316 return nd_sector_size_show(nsblk->lbasize, 1317 blk_lbasize_supported, buf); 1318 } 1319 1320 if (is_namespace_pmem(dev)) { 1321 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 1322 1323 return nd_sector_size_show(nspm->lbasize, 1324 pmem_lbasize_supported, buf); 1325 } 1326 return -ENXIO; 1327 } 1328 1329 static ssize_t sector_size_store(struct device *dev, 1330 struct device_attribute *attr, const char *buf, size_t len) 1331 { 1332 struct nd_region *nd_region = to_nd_region(dev->parent); 1333 const unsigned long *supported; 1334 unsigned long *lbasize; 1335 ssize_t rc = 0; 1336 1337 if (is_namespace_blk(dev)) { 1338 struct nd_namespace_blk *nsblk = to_nd_namespace_blk(dev); 1339 1340 lbasize = &nsblk->lbasize; 1341 supported = blk_lbasize_supported; 1342 } else if (is_namespace_pmem(dev)) { 1343 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 1344 1345 lbasize = &nspm->lbasize; 1346 supported = pmem_lbasize_supported; 1347 } else 1348 return -ENXIO; 1349 1350 device_lock(dev); 1351 nvdimm_bus_lock(dev); 1352 if (to_ndns(dev)->claim) 1353 rc = -EBUSY; 1354 if (rc >= 0) 1355 rc = nd_sector_size_store(dev, buf, lbasize, supported); 1356 if (rc >= 0) 1357 rc = nd_namespace_label_update(nd_region, dev); 1358 dev_dbg(dev, "%s: result: %zd %s: %s%s", __func__, 1359 rc, rc < 0 ? "tried" : "wrote", buf, 1360 buf[len - 1] == '\n' ? "" : "\n"); 1361 nvdimm_bus_unlock(dev); 1362 device_unlock(dev); 1363 1364 return rc ? rc : len; 1365 } 1366 static DEVICE_ATTR_RW(sector_size); 1367 1368 static ssize_t dpa_extents_show(struct device *dev, 1369 struct device_attribute *attr, char *buf) 1370 { 1371 struct nd_region *nd_region = to_nd_region(dev->parent); 1372 struct nd_label_id label_id; 1373 int count = 0, i; 1374 u8 *uuid = NULL; 1375 u32 flags = 0; 1376 1377 nvdimm_bus_lock(dev); 1378 if (is_namespace_pmem(dev)) { 1379 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 1380 1381 uuid = nspm->uuid; 1382 flags = 0; 1383 } else if (is_namespace_blk(dev)) { 1384 struct nd_namespace_blk *nsblk = to_nd_namespace_blk(dev); 1385 1386 uuid = nsblk->uuid; 1387 flags = NSLABEL_FLAG_LOCAL; 1388 } 1389 1390 if (!uuid) 1391 goto out; 1392 1393 nd_label_gen_id(&label_id, uuid, flags); 1394 for (i = 0; i < nd_region->ndr_mappings; i++) { 1395 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; 1396 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 1397 struct resource *res; 1398 1399 for_each_dpa_resource(ndd, res) 1400 if (strcmp(res->name, label_id.id) == 0) 1401 count++; 1402 } 1403 out: 1404 nvdimm_bus_unlock(dev); 1405 1406 return sprintf(buf, "%d\n", count); 1407 } 1408 static DEVICE_ATTR_RO(dpa_extents); 1409 1410 static int btt_claim_class(struct device *dev) 1411 { 1412 struct nd_region *nd_region = to_nd_region(dev->parent); 1413 int i, loop_bitmask = 0; 1414 1415 for (i = 0; i < nd_region->ndr_mappings; i++) { 1416 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; 1417 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 1418 struct nd_namespace_index *nsindex; 1419 1420 nsindex = to_namespace_index(ndd, ndd->ns_current); 1421 if (nsindex == NULL) 1422 loop_bitmask |= 1; 1423 else { 1424 /* check whether existing labels are v1.1 or v1.2 */ 1425 if (__le16_to_cpu(nsindex->major) == 1 1426 && __le16_to_cpu(nsindex->minor) == 1) 1427 loop_bitmask |= 2; 1428 else 1429 loop_bitmask |= 4; 1430 } 1431 } 1432 /* 1433 * If nsindex is null loop_bitmask's bit 0 will be set, and if an index 1434 * block is found, a v1.1 label for any mapping will set bit 1, and a 1435 * v1.2 label will set bit 2. 1436 * 1437 * At the end of the loop, at most one of the three bits must be set. 1438 * If multiple bits were set, it means the different mappings disagree 1439 * about their labels, and this must be cleaned up first. 1440 * 1441 * If all the label index blocks are found to agree, nsindex of NULL 1442 * implies labels haven't been initialized yet, and when they will, 1443 * they will be of the 1.2 format, so we can assume BTT2.0 1444 * 1445 * If 1.1 labels are found, we enforce BTT1.1, and if 1.2 labels are 1446 * found, we enforce BTT2.0 1447 * 1448 * If the loop was never entered, default to BTT1.1 (legacy namespaces) 1449 */ 1450 switch (loop_bitmask) { 1451 case 0: 1452 case 2: 1453 return NVDIMM_CCLASS_BTT; 1454 case 1: 1455 case 4: 1456 return NVDIMM_CCLASS_BTT2; 1457 default: 1458 return -ENXIO; 1459 } 1460 } 1461 1462 static ssize_t holder_show(struct device *dev, 1463 struct device_attribute *attr, char *buf) 1464 { 1465 struct nd_namespace_common *ndns = to_ndns(dev); 1466 ssize_t rc; 1467 1468 device_lock(dev); 1469 rc = sprintf(buf, "%s\n", ndns->claim ? dev_name(ndns->claim) : ""); 1470 device_unlock(dev); 1471 1472 return rc; 1473 } 1474 static DEVICE_ATTR_RO(holder); 1475 1476 static ssize_t __holder_class_store(struct device *dev, const char *buf) 1477 { 1478 struct nd_namespace_common *ndns = to_ndns(dev); 1479 1480 if (dev->driver || ndns->claim) 1481 return -EBUSY; 1482 1483 if (strcmp(buf, "btt") == 0 || strcmp(buf, "btt\n") == 0) 1484 ndns->claim_class = btt_claim_class(dev); 1485 else if (strcmp(buf, "pfn") == 0 || strcmp(buf, "pfn\n") == 0) 1486 ndns->claim_class = NVDIMM_CCLASS_PFN; 1487 else if (strcmp(buf, "dax") == 0 || strcmp(buf, "dax\n") == 0) 1488 ndns->claim_class = NVDIMM_CCLASS_DAX; 1489 else if (strcmp(buf, "") == 0 || strcmp(buf, "\n") == 0) 1490 ndns->claim_class = NVDIMM_CCLASS_NONE; 1491 else 1492 return -EINVAL; 1493 1494 /* btt_claim_class() could've returned an error */ 1495 if (ndns->claim_class < 0) 1496 return ndns->claim_class; 1497 1498 return 0; 1499 } 1500 1501 static ssize_t holder_class_store(struct device *dev, 1502 struct device_attribute *attr, const char *buf, size_t len) 1503 { 1504 struct nd_region *nd_region = to_nd_region(dev->parent); 1505 ssize_t rc; 1506 1507 device_lock(dev); 1508 nvdimm_bus_lock(dev); 1509 wait_nvdimm_bus_probe_idle(dev); 1510 rc = __holder_class_store(dev, buf); 1511 if (rc >= 0) 1512 rc = nd_namespace_label_update(nd_region, dev); 1513 dev_dbg(dev, "%s: %s(%zd)\n", __func__, rc < 0 ? "fail " : "", rc); 1514 nvdimm_bus_unlock(dev); 1515 device_unlock(dev); 1516 1517 return rc < 0 ? rc : len; 1518 } 1519 1520 static ssize_t holder_class_show(struct device *dev, 1521 struct device_attribute *attr, char *buf) 1522 { 1523 struct nd_namespace_common *ndns = to_ndns(dev); 1524 ssize_t rc; 1525 1526 device_lock(dev); 1527 if (ndns->claim_class == NVDIMM_CCLASS_NONE) 1528 rc = sprintf(buf, "\n"); 1529 else if ((ndns->claim_class == NVDIMM_CCLASS_BTT) || 1530 (ndns->claim_class == NVDIMM_CCLASS_BTT2)) 1531 rc = sprintf(buf, "btt\n"); 1532 else if (ndns->claim_class == NVDIMM_CCLASS_PFN) 1533 rc = sprintf(buf, "pfn\n"); 1534 else if (ndns->claim_class == NVDIMM_CCLASS_DAX) 1535 rc = sprintf(buf, "dax\n"); 1536 else 1537 rc = sprintf(buf, "<unknown>\n"); 1538 device_unlock(dev); 1539 1540 return rc; 1541 } 1542 static DEVICE_ATTR_RW(holder_class); 1543 1544 static ssize_t mode_show(struct device *dev, 1545 struct device_attribute *attr, char *buf) 1546 { 1547 struct nd_namespace_common *ndns = to_ndns(dev); 1548 struct device *claim; 1549 char *mode; 1550 ssize_t rc; 1551 1552 device_lock(dev); 1553 claim = ndns->claim; 1554 if (claim && is_nd_btt(claim)) 1555 mode = "safe"; 1556 else if (claim && is_nd_pfn(claim)) 1557 mode = "memory"; 1558 else if (claim && is_nd_dax(claim)) 1559 mode = "dax"; 1560 else if (!claim && pmem_should_map_pages(dev)) 1561 mode = "memory"; 1562 else 1563 mode = "raw"; 1564 rc = sprintf(buf, "%s\n", mode); 1565 device_unlock(dev); 1566 1567 return rc; 1568 } 1569 static DEVICE_ATTR_RO(mode); 1570 1571 static ssize_t force_raw_store(struct device *dev, 1572 struct device_attribute *attr, const char *buf, size_t len) 1573 { 1574 bool force_raw; 1575 int rc = strtobool(buf, &force_raw); 1576 1577 if (rc) 1578 return rc; 1579 1580 to_ndns(dev)->force_raw = force_raw; 1581 return len; 1582 } 1583 1584 static ssize_t force_raw_show(struct device *dev, 1585 struct device_attribute *attr, char *buf) 1586 { 1587 return sprintf(buf, "%d\n", to_ndns(dev)->force_raw); 1588 } 1589 static DEVICE_ATTR_RW(force_raw); 1590 1591 static struct attribute *nd_namespace_attributes[] = { 1592 &dev_attr_nstype.attr, 1593 &dev_attr_size.attr, 1594 &dev_attr_mode.attr, 1595 &dev_attr_uuid.attr, 1596 &dev_attr_holder.attr, 1597 &dev_attr_resource.attr, 1598 &dev_attr_alt_name.attr, 1599 &dev_attr_force_raw.attr, 1600 &dev_attr_sector_size.attr, 1601 &dev_attr_dpa_extents.attr, 1602 &dev_attr_holder_class.attr, 1603 NULL, 1604 }; 1605 1606 static umode_t namespace_visible(struct kobject *kobj, 1607 struct attribute *a, int n) 1608 { 1609 struct device *dev = container_of(kobj, struct device, kobj); 1610 1611 if (a == &dev_attr_resource.attr) { 1612 if (is_namespace_blk(dev)) 1613 return 0; 1614 return a->mode; 1615 } 1616 1617 if (is_namespace_pmem(dev) || is_namespace_blk(dev)) { 1618 if (a == &dev_attr_size.attr) 1619 return 0644; 1620 1621 return a->mode; 1622 } 1623 1624 if (a == &dev_attr_nstype.attr || a == &dev_attr_size.attr 1625 || a == &dev_attr_holder.attr 1626 || a == &dev_attr_holder_class.attr 1627 || a == &dev_attr_force_raw.attr 1628 || a == &dev_attr_mode.attr) 1629 return a->mode; 1630 1631 return 0; 1632 } 1633 1634 static struct attribute_group nd_namespace_attribute_group = { 1635 .attrs = nd_namespace_attributes, 1636 .is_visible = namespace_visible, 1637 }; 1638 1639 static const struct attribute_group *nd_namespace_attribute_groups[] = { 1640 &nd_device_attribute_group, 1641 &nd_namespace_attribute_group, 1642 &nd_numa_attribute_group, 1643 NULL, 1644 }; 1645 1646 struct nd_namespace_common *nvdimm_namespace_common_probe(struct device *dev) 1647 { 1648 struct nd_btt *nd_btt = is_nd_btt(dev) ? to_nd_btt(dev) : NULL; 1649 struct nd_pfn *nd_pfn = is_nd_pfn(dev) ? to_nd_pfn(dev) : NULL; 1650 struct nd_dax *nd_dax = is_nd_dax(dev) ? to_nd_dax(dev) : NULL; 1651 struct nd_namespace_common *ndns = NULL; 1652 resource_size_t size; 1653 1654 if (nd_btt || nd_pfn || nd_dax) { 1655 if (nd_btt) 1656 ndns = nd_btt->ndns; 1657 else if (nd_pfn) 1658 ndns = nd_pfn->ndns; 1659 else if (nd_dax) 1660 ndns = nd_dax->nd_pfn.ndns; 1661 1662 if (!ndns) 1663 return ERR_PTR(-ENODEV); 1664 1665 /* 1666 * Flush any in-progess probes / removals in the driver 1667 * for the raw personality of this namespace. 1668 */ 1669 device_lock(&ndns->dev); 1670 device_unlock(&ndns->dev); 1671 if (ndns->dev.driver) { 1672 dev_dbg(&ndns->dev, "is active, can't bind %s\n", 1673 dev_name(dev)); 1674 return ERR_PTR(-EBUSY); 1675 } 1676 if (dev_WARN_ONCE(&ndns->dev, ndns->claim != dev, 1677 "host (%s) vs claim (%s) mismatch\n", 1678 dev_name(dev), 1679 dev_name(ndns->claim))) 1680 return ERR_PTR(-ENXIO); 1681 } else { 1682 ndns = to_ndns(dev); 1683 if (ndns->claim) { 1684 dev_dbg(dev, "claimed by %s, failing probe\n", 1685 dev_name(ndns->claim)); 1686 1687 return ERR_PTR(-ENXIO); 1688 } 1689 } 1690 1691 size = nvdimm_namespace_capacity(ndns); 1692 if (size < ND_MIN_NAMESPACE_SIZE) { 1693 dev_dbg(&ndns->dev, "%pa, too small must be at least %#x\n", 1694 &size, ND_MIN_NAMESPACE_SIZE); 1695 return ERR_PTR(-ENODEV); 1696 } 1697 1698 if (is_namespace_pmem(&ndns->dev)) { 1699 struct nd_namespace_pmem *nspm; 1700 1701 nspm = to_nd_namespace_pmem(&ndns->dev); 1702 if (uuid_not_set(nspm->uuid, &ndns->dev, __func__)) 1703 return ERR_PTR(-ENODEV); 1704 } else if (is_namespace_blk(&ndns->dev)) { 1705 struct nd_namespace_blk *nsblk; 1706 1707 nsblk = to_nd_namespace_blk(&ndns->dev); 1708 if (uuid_not_set(nsblk->uuid, &ndns->dev, __func__)) 1709 return ERR_PTR(-ENODEV); 1710 if (!nsblk->lbasize) { 1711 dev_dbg(&ndns->dev, "%s: sector size not set\n", 1712 __func__); 1713 return ERR_PTR(-ENODEV); 1714 } 1715 if (!nd_namespace_blk_validate(nsblk)) 1716 return ERR_PTR(-ENODEV); 1717 } 1718 1719 return ndns; 1720 } 1721 EXPORT_SYMBOL(nvdimm_namespace_common_probe); 1722 1723 static struct device **create_namespace_io(struct nd_region *nd_region) 1724 { 1725 struct nd_namespace_io *nsio; 1726 struct device *dev, **devs; 1727 struct resource *res; 1728 1729 nsio = kzalloc(sizeof(*nsio), GFP_KERNEL); 1730 if (!nsio) 1731 return NULL; 1732 1733 devs = kcalloc(2, sizeof(struct device *), GFP_KERNEL); 1734 if (!devs) { 1735 kfree(nsio); 1736 return NULL; 1737 } 1738 1739 dev = &nsio->common.dev; 1740 dev->type = &namespace_io_device_type; 1741 dev->parent = &nd_region->dev; 1742 res = &nsio->res; 1743 res->name = dev_name(&nd_region->dev); 1744 res->flags = IORESOURCE_MEM; 1745 res->start = nd_region->ndr_start; 1746 res->end = res->start + nd_region->ndr_size - 1; 1747 1748 devs[0] = dev; 1749 return devs; 1750 } 1751 1752 static bool has_uuid_at_pos(struct nd_region *nd_region, u8 *uuid, 1753 u64 cookie, u16 pos) 1754 { 1755 struct nd_namespace_label *found = NULL; 1756 int i; 1757 1758 for (i = 0; i < nd_region->ndr_mappings; i++) { 1759 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; 1760 struct nd_interleave_set *nd_set = nd_region->nd_set; 1761 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 1762 struct nd_label_ent *label_ent; 1763 bool found_uuid = false; 1764 1765 list_for_each_entry(label_ent, &nd_mapping->labels, list) { 1766 struct nd_namespace_label *nd_label = label_ent->label; 1767 u16 position, nlabel; 1768 u64 isetcookie; 1769 1770 if (!nd_label) 1771 continue; 1772 isetcookie = __le64_to_cpu(nd_label->isetcookie); 1773 position = __le16_to_cpu(nd_label->position); 1774 nlabel = __le16_to_cpu(nd_label->nlabel); 1775 1776 if (isetcookie != cookie) 1777 continue; 1778 1779 if (memcmp(nd_label->uuid, uuid, NSLABEL_UUID_LEN) != 0) 1780 continue; 1781 1782 if (namespace_label_has(ndd, type_guid) 1783 && !guid_equal(&nd_set->type_guid, 1784 &nd_label->type_guid)) { 1785 dev_dbg(ndd->dev, "expect type_guid %pUb got %pUb\n", 1786 nd_set->type_guid.b, 1787 nd_label->type_guid.b); 1788 continue; 1789 } 1790 1791 if (found_uuid) { 1792 dev_dbg(ndd->dev, 1793 "%s duplicate entry for uuid\n", 1794 __func__); 1795 return false; 1796 } 1797 found_uuid = true; 1798 if (nlabel != nd_region->ndr_mappings) 1799 continue; 1800 if (position != pos) 1801 continue; 1802 found = nd_label; 1803 break; 1804 } 1805 if (found) 1806 break; 1807 } 1808 return found != NULL; 1809 } 1810 1811 static int select_pmem_id(struct nd_region *nd_region, u8 *pmem_id) 1812 { 1813 int i; 1814 1815 if (!pmem_id) 1816 return -ENODEV; 1817 1818 for (i = 0; i < nd_region->ndr_mappings; i++) { 1819 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; 1820 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 1821 struct nd_namespace_label *nd_label = NULL; 1822 u64 hw_start, hw_end, pmem_start, pmem_end; 1823 struct nd_label_ent *label_ent; 1824 1825 lockdep_assert_held(&nd_mapping->lock); 1826 list_for_each_entry(label_ent, &nd_mapping->labels, list) { 1827 nd_label = label_ent->label; 1828 if (!nd_label) 1829 continue; 1830 if (memcmp(nd_label->uuid, pmem_id, NSLABEL_UUID_LEN) == 0) 1831 break; 1832 nd_label = NULL; 1833 } 1834 1835 if (!nd_label) { 1836 WARN_ON(1); 1837 return -EINVAL; 1838 } 1839 1840 /* 1841 * Check that this label is compliant with the dpa 1842 * range published in NFIT 1843 */ 1844 hw_start = nd_mapping->start; 1845 hw_end = hw_start + nd_mapping->size; 1846 pmem_start = __le64_to_cpu(nd_label->dpa); 1847 pmem_end = pmem_start + __le64_to_cpu(nd_label->rawsize); 1848 if (pmem_start >= hw_start && pmem_start < hw_end 1849 && pmem_end <= hw_end && pmem_end > hw_start) 1850 /* pass */; 1851 else { 1852 dev_dbg(&nd_region->dev, "%s invalid label for %pUb\n", 1853 dev_name(ndd->dev), nd_label->uuid); 1854 return -EINVAL; 1855 } 1856 1857 /* move recently validated label to the front of the list */ 1858 list_move(&label_ent->list, &nd_mapping->labels); 1859 } 1860 return 0; 1861 } 1862 1863 /** 1864 * create_namespace_pmem - validate interleave set labelling, retrieve label0 1865 * @nd_region: region with mappings to validate 1866 * @nspm: target namespace to create 1867 * @nd_label: target pmem namespace label to evaluate 1868 */ 1869 struct device *create_namespace_pmem(struct nd_region *nd_region, 1870 struct nd_namespace_index *nsindex, 1871 struct nd_namespace_label *nd_label) 1872 { 1873 u64 cookie = nd_region_interleave_set_cookie(nd_region, nsindex); 1874 u64 altcookie = nd_region_interleave_set_altcookie(nd_region); 1875 struct nd_label_ent *label_ent; 1876 struct nd_namespace_pmem *nspm; 1877 struct nd_mapping *nd_mapping; 1878 resource_size_t size = 0; 1879 struct resource *res; 1880 struct device *dev; 1881 int rc = 0; 1882 u16 i; 1883 1884 if (cookie == 0) { 1885 dev_dbg(&nd_region->dev, "invalid interleave-set-cookie\n"); 1886 return ERR_PTR(-ENXIO); 1887 } 1888 1889 if (__le64_to_cpu(nd_label->isetcookie) != cookie) { 1890 dev_dbg(&nd_region->dev, "invalid cookie in label: %pUb\n", 1891 nd_label->uuid); 1892 if (__le64_to_cpu(nd_label->isetcookie) != altcookie) 1893 return ERR_PTR(-EAGAIN); 1894 1895 dev_dbg(&nd_region->dev, "valid altcookie in label: %pUb\n", 1896 nd_label->uuid); 1897 } 1898 1899 nspm = kzalloc(sizeof(*nspm), GFP_KERNEL); 1900 if (!nspm) 1901 return ERR_PTR(-ENOMEM); 1902 1903 nspm->id = -1; 1904 dev = &nspm->nsio.common.dev; 1905 dev->type = &namespace_pmem_device_type; 1906 dev->parent = &nd_region->dev; 1907 res = &nspm->nsio.res; 1908 res->name = dev_name(&nd_region->dev); 1909 res->flags = IORESOURCE_MEM; 1910 1911 for (i = 0; i < nd_region->ndr_mappings; i++) { 1912 if (has_uuid_at_pos(nd_region, nd_label->uuid, cookie, i)) 1913 continue; 1914 if (has_uuid_at_pos(nd_region, nd_label->uuid, altcookie, i)) 1915 continue; 1916 break; 1917 } 1918 1919 if (i < nd_region->ndr_mappings) { 1920 struct nvdimm_drvdata *ndd = to_ndd(&nd_region->mapping[i]); 1921 1922 /* 1923 * Give up if we don't find an instance of a uuid at each 1924 * position (from 0 to nd_region->ndr_mappings - 1), or if we 1925 * find a dimm with two instances of the same uuid. 1926 */ 1927 dev_err(&nd_region->dev, "%s missing label for %pUb\n", 1928 dev_name(ndd->dev), nd_label->uuid); 1929 rc = -EINVAL; 1930 goto err; 1931 } 1932 1933 /* 1934 * Fix up each mapping's 'labels' to have the validated pmem label for 1935 * that position at labels[0], and NULL at labels[1]. In the process, 1936 * check that the namespace aligns with interleave-set. We know 1937 * that it does not overlap with any blk namespaces by virtue of 1938 * the dimm being enabled (i.e. nd_label_reserve_dpa() 1939 * succeeded). 1940 */ 1941 rc = select_pmem_id(nd_region, nd_label->uuid); 1942 if (rc) 1943 goto err; 1944 1945 /* Calculate total size and populate namespace properties from label0 */ 1946 for (i = 0; i < nd_region->ndr_mappings; i++) { 1947 struct nd_namespace_label *label0; 1948 struct nvdimm_drvdata *ndd; 1949 1950 nd_mapping = &nd_region->mapping[i]; 1951 label_ent = list_first_entry_or_null(&nd_mapping->labels, 1952 typeof(*label_ent), list); 1953 label0 = label_ent ? label_ent->label : 0; 1954 1955 if (!label0) { 1956 WARN_ON(1); 1957 continue; 1958 } 1959 1960 size += __le64_to_cpu(label0->rawsize); 1961 if (__le16_to_cpu(label0->position) != 0) 1962 continue; 1963 WARN_ON(nspm->alt_name || nspm->uuid); 1964 nspm->alt_name = kmemdup((void __force *) label0->name, 1965 NSLABEL_NAME_LEN, GFP_KERNEL); 1966 nspm->uuid = kmemdup((void __force *) label0->uuid, 1967 NSLABEL_UUID_LEN, GFP_KERNEL); 1968 nspm->lbasize = __le64_to_cpu(label0->lbasize); 1969 ndd = to_ndd(nd_mapping); 1970 if (namespace_label_has(ndd, abstraction_guid)) 1971 nspm->nsio.common.claim_class 1972 = to_nvdimm_cclass(&label0->abstraction_guid); 1973 1974 } 1975 1976 if (!nspm->alt_name || !nspm->uuid) { 1977 rc = -ENOMEM; 1978 goto err; 1979 } 1980 1981 nd_namespace_pmem_set_resource(nd_region, nspm, size); 1982 1983 return dev; 1984 err: 1985 namespace_pmem_release(dev); 1986 switch (rc) { 1987 case -EINVAL: 1988 dev_dbg(&nd_region->dev, "%s: invalid label(s)\n", __func__); 1989 break; 1990 case -ENODEV: 1991 dev_dbg(&nd_region->dev, "%s: label not found\n", __func__); 1992 break; 1993 default: 1994 dev_dbg(&nd_region->dev, "%s: unexpected err: %d\n", 1995 __func__, rc); 1996 break; 1997 } 1998 return ERR_PTR(rc); 1999 } 2000 2001 struct resource *nsblk_add_resource(struct nd_region *nd_region, 2002 struct nvdimm_drvdata *ndd, struct nd_namespace_blk *nsblk, 2003 resource_size_t start) 2004 { 2005 struct nd_label_id label_id; 2006 struct resource *res; 2007 2008 nd_label_gen_id(&label_id, nsblk->uuid, NSLABEL_FLAG_LOCAL); 2009 res = krealloc(nsblk->res, 2010 sizeof(void *) * (nsblk->num_resources + 1), 2011 GFP_KERNEL); 2012 if (!res) 2013 return NULL; 2014 nsblk->res = (struct resource **) res; 2015 for_each_dpa_resource(ndd, res) 2016 if (strcmp(res->name, label_id.id) == 0 2017 && res->start == start) { 2018 nsblk->res[nsblk->num_resources++] = res; 2019 return res; 2020 } 2021 return NULL; 2022 } 2023 2024 static struct device *nd_namespace_blk_create(struct nd_region *nd_region) 2025 { 2026 struct nd_namespace_blk *nsblk; 2027 struct device *dev; 2028 2029 if (!is_nd_blk(&nd_region->dev)) 2030 return NULL; 2031 2032 nsblk = kzalloc(sizeof(*nsblk), GFP_KERNEL); 2033 if (!nsblk) 2034 return NULL; 2035 2036 dev = &nsblk->common.dev; 2037 dev->type = &namespace_blk_device_type; 2038 nsblk->id = ida_simple_get(&nd_region->ns_ida, 0, 0, GFP_KERNEL); 2039 if (nsblk->id < 0) { 2040 kfree(nsblk); 2041 return NULL; 2042 } 2043 dev_set_name(dev, "namespace%d.%d", nd_region->id, nsblk->id); 2044 dev->parent = &nd_region->dev; 2045 dev->groups = nd_namespace_attribute_groups; 2046 2047 return &nsblk->common.dev; 2048 } 2049 2050 static struct device *nd_namespace_pmem_create(struct nd_region *nd_region) 2051 { 2052 struct nd_namespace_pmem *nspm; 2053 struct resource *res; 2054 struct device *dev; 2055 2056 if (!is_memory(&nd_region->dev)) 2057 return NULL; 2058 2059 nspm = kzalloc(sizeof(*nspm), GFP_KERNEL); 2060 if (!nspm) 2061 return NULL; 2062 2063 dev = &nspm->nsio.common.dev; 2064 dev->type = &namespace_pmem_device_type; 2065 dev->parent = &nd_region->dev; 2066 res = &nspm->nsio.res; 2067 res->name = dev_name(&nd_region->dev); 2068 res->flags = IORESOURCE_MEM; 2069 2070 nspm->id = ida_simple_get(&nd_region->ns_ida, 0, 0, GFP_KERNEL); 2071 if (nspm->id < 0) { 2072 kfree(nspm); 2073 return NULL; 2074 } 2075 dev_set_name(dev, "namespace%d.%d", nd_region->id, nspm->id); 2076 dev->parent = &nd_region->dev; 2077 dev->groups = nd_namespace_attribute_groups; 2078 nd_namespace_pmem_set_resource(nd_region, nspm, 0); 2079 2080 return dev; 2081 } 2082 2083 void nd_region_create_ns_seed(struct nd_region *nd_region) 2084 { 2085 WARN_ON(!is_nvdimm_bus_locked(&nd_region->dev)); 2086 2087 if (nd_region_to_nstype(nd_region) == ND_DEVICE_NAMESPACE_IO) 2088 return; 2089 2090 if (is_nd_blk(&nd_region->dev)) 2091 nd_region->ns_seed = nd_namespace_blk_create(nd_region); 2092 else 2093 nd_region->ns_seed = nd_namespace_pmem_create(nd_region); 2094 2095 /* 2096 * Seed creation failures are not fatal, provisioning is simply 2097 * disabled until memory becomes available 2098 */ 2099 if (!nd_region->ns_seed) 2100 dev_err(&nd_region->dev, "failed to create %s namespace\n", 2101 is_nd_blk(&nd_region->dev) ? "blk" : "pmem"); 2102 else 2103 nd_device_register(nd_region->ns_seed); 2104 } 2105 2106 void nd_region_create_dax_seed(struct nd_region *nd_region) 2107 { 2108 WARN_ON(!is_nvdimm_bus_locked(&nd_region->dev)); 2109 nd_region->dax_seed = nd_dax_create(nd_region); 2110 /* 2111 * Seed creation failures are not fatal, provisioning is simply 2112 * disabled until memory becomes available 2113 */ 2114 if (!nd_region->dax_seed) 2115 dev_err(&nd_region->dev, "failed to create dax namespace\n"); 2116 } 2117 2118 void nd_region_create_pfn_seed(struct nd_region *nd_region) 2119 { 2120 WARN_ON(!is_nvdimm_bus_locked(&nd_region->dev)); 2121 nd_region->pfn_seed = nd_pfn_create(nd_region); 2122 /* 2123 * Seed creation failures are not fatal, provisioning is simply 2124 * disabled until memory becomes available 2125 */ 2126 if (!nd_region->pfn_seed) 2127 dev_err(&nd_region->dev, "failed to create pfn namespace\n"); 2128 } 2129 2130 void nd_region_create_btt_seed(struct nd_region *nd_region) 2131 { 2132 WARN_ON(!is_nvdimm_bus_locked(&nd_region->dev)); 2133 nd_region->btt_seed = nd_btt_create(nd_region); 2134 /* 2135 * Seed creation failures are not fatal, provisioning is simply 2136 * disabled until memory becomes available 2137 */ 2138 if (!nd_region->btt_seed) 2139 dev_err(&nd_region->dev, "failed to create btt namespace\n"); 2140 } 2141 2142 static int add_namespace_resource(struct nd_region *nd_region, 2143 struct nd_namespace_label *nd_label, struct device **devs, 2144 int count) 2145 { 2146 struct nd_mapping *nd_mapping = &nd_region->mapping[0]; 2147 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 2148 int i; 2149 2150 for (i = 0; i < count; i++) { 2151 u8 *uuid = namespace_to_uuid(devs[i]); 2152 struct resource *res; 2153 2154 if (IS_ERR_OR_NULL(uuid)) { 2155 WARN_ON(1); 2156 continue; 2157 } 2158 2159 if (memcmp(uuid, nd_label->uuid, NSLABEL_UUID_LEN) != 0) 2160 continue; 2161 if (is_namespace_blk(devs[i])) { 2162 res = nsblk_add_resource(nd_region, ndd, 2163 to_nd_namespace_blk(devs[i]), 2164 __le64_to_cpu(nd_label->dpa)); 2165 if (!res) 2166 return -ENXIO; 2167 nd_dbg_dpa(nd_region, ndd, res, "%d assign\n", count); 2168 } else { 2169 dev_err(&nd_region->dev, 2170 "error: conflicting extents for uuid: %pUb\n", 2171 nd_label->uuid); 2172 return -ENXIO; 2173 } 2174 break; 2175 } 2176 2177 return i; 2178 } 2179 2180 struct device *create_namespace_blk(struct nd_region *nd_region, 2181 struct nd_namespace_label *nd_label, int count) 2182 { 2183 2184 struct nd_mapping *nd_mapping = &nd_region->mapping[0]; 2185 struct nd_interleave_set *nd_set = nd_region->nd_set; 2186 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 2187 struct nd_namespace_blk *nsblk; 2188 char name[NSLABEL_NAME_LEN]; 2189 struct device *dev = NULL; 2190 struct resource *res; 2191 2192 if (namespace_label_has(ndd, type_guid)) { 2193 if (!guid_equal(&nd_set->type_guid, &nd_label->type_guid)) { 2194 dev_dbg(ndd->dev, "expect type_guid %pUb got %pUb\n", 2195 nd_set->type_guid.b, 2196 nd_label->type_guid.b); 2197 return ERR_PTR(-EAGAIN); 2198 } 2199 2200 if (nd_label->isetcookie != __cpu_to_le64(nd_set->cookie2)) { 2201 dev_dbg(ndd->dev, "expect cookie %#llx got %#llx\n", 2202 nd_set->cookie2, 2203 __le64_to_cpu(nd_label->isetcookie)); 2204 return ERR_PTR(-EAGAIN); 2205 } 2206 } 2207 2208 nsblk = kzalloc(sizeof(*nsblk), GFP_KERNEL); 2209 if (!nsblk) 2210 return ERR_PTR(-ENOMEM); 2211 dev = &nsblk->common.dev; 2212 dev->type = &namespace_blk_device_type; 2213 dev->parent = &nd_region->dev; 2214 nsblk->id = -1; 2215 nsblk->lbasize = __le64_to_cpu(nd_label->lbasize); 2216 nsblk->uuid = kmemdup(nd_label->uuid, NSLABEL_UUID_LEN, 2217 GFP_KERNEL); 2218 if (namespace_label_has(ndd, abstraction_guid)) 2219 nsblk->common.claim_class 2220 = to_nvdimm_cclass(&nd_label->abstraction_guid); 2221 if (!nsblk->uuid) 2222 goto blk_err; 2223 memcpy(name, nd_label->name, NSLABEL_NAME_LEN); 2224 if (name[0]) 2225 nsblk->alt_name = kmemdup(name, NSLABEL_NAME_LEN, 2226 GFP_KERNEL); 2227 res = nsblk_add_resource(nd_region, ndd, nsblk, 2228 __le64_to_cpu(nd_label->dpa)); 2229 if (!res) 2230 goto blk_err; 2231 nd_dbg_dpa(nd_region, ndd, res, "%d: assign\n", count); 2232 return dev; 2233 blk_err: 2234 namespace_blk_release(dev); 2235 return ERR_PTR(-ENXIO); 2236 } 2237 2238 static int cmp_dpa(const void *a, const void *b) 2239 { 2240 const struct device *dev_a = *(const struct device **) a; 2241 const struct device *dev_b = *(const struct device **) b; 2242 struct nd_namespace_blk *nsblk_a, *nsblk_b; 2243 struct nd_namespace_pmem *nspm_a, *nspm_b; 2244 2245 if (is_namespace_io(dev_a)) 2246 return 0; 2247 2248 if (is_namespace_blk(dev_a)) { 2249 nsblk_a = to_nd_namespace_blk(dev_a); 2250 nsblk_b = to_nd_namespace_blk(dev_b); 2251 2252 return memcmp(&nsblk_a->res[0]->start, &nsblk_b->res[0]->start, 2253 sizeof(resource_size_t)); 2254 } 2255 2256 nspm_a = to_nd_namespace_pmem(dev_a); 2257 nspm_b = to_nd_namespace_pmem(dev_b); 2258 2259 return memcmp(&nspm_a->nsio.res.start, &nspm_b->nsio.res.start, 2260 sizeof(resource_size_t)); 2261 } 2262 2263 static struct device **scan_labels(struct nd_region *nd_region) 2264 { 2265 int i, count = 0; 2266 struct device *dev, **devs = NULL; 2267 struct nd_label_ent *label_ent, *e; 2268 struct nd_mapping *nd_mapping = &nd_region->mapping[0]; 2269 resource_size_t map_end = nd_mapping->start + nd_mapping->size - 1; 2270 2271 /* "safe" because create_namespace_pmem() might list_move() label_ent */ 2272 list_for_each_entry_safe(label_ent, e, &nd_mapping->labels, list) { 2273 struct nd_namespace_label *nd_label = label_ent->label; 2274 struct device **__devs; 2275 u32 flags; 2276 2277 if (!nd_label) 2278 continue; 2279 flags = __le32_to_cpu(nd_label->flags); 2280 if (is_nd_blk(&nd_region->dev) 2281 == !!(flags & NSLABEL_FLAG_LOCAL)) 2282 /* pass, region matches label type */; 2283 else 2284 continue; 2285 2286 /* skip labels that describe extents outside of the region */ 2287 if (nd_label->dpa < nd_mapping->start || nd_label->dpa > map_end) 2288 continue; 2289 2290 i = add_namespace_resource(nd_region, nd_label, devs, count); 2291 if (i < 0) 2292 goto err; 2293 if (i < count) 2294 continue; 2295 __devs = kcalloc(count + 2, sizeof(dev), GFP_KERNEL); 2296 if (!__devs) 2297 goto err; 2298 memcpy(__devs, devs, sizeof(dev) * count); 2299 kfree(devs); 2300 devs = __devs; 2301 2302 if (is_nd_blk(&nd_region->dev)) 2303 dev = create_namespace_blk(nd_region, nd_label, count); 2304 else { 2305 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 2306 struct nd_namespace_index *nsindex; 2307 2308 nsindex = to_namespace_index(ndd, ndd->ns_current); 2309 dev = create_namespace_pmem(nd_region, nsindex, nd_label); 2310 } 2311 2312 if (IS_ERR(dev)) { 2313 switch (PTR_ERR(dev)) { 2314 case -EAGAIN: 2315 /* skip invalid labels */ 2316 continue; 2317 case -ENODEV: 2318 /* fallthrough to seed creation */ 2319 break; 2320 default: 2321 goto err; 2322 } 2323 } else 2324 devs[count++] = dev; 2325 2326 } 2327 2328 dev_dbg(&nd_region->dev, "%s: discovered %d %s namespace%s\n", 2329 __func__, count, is_nd_blk(&nd_region->dev) 2330 ? "blk" : "pmem", count == 1 ? "" : "s"); 2331 2332 if (count == 0) { 2333 /* Publish a zero-sized namespace for userspace to configure. */ 2334 nd_mapping_free_labels(nd_mapping); 2335 2336 devs = kcalloc(2, sizeof(dev), GFP_KERNEL); 2337 if (!devs) 2338 goto err; 2339 if (is_nd_blk(&nd_region->dev)) { 2340 struct nd_namespace_blk *nsblk; 2341 2342 nsblk = kzalloc(sizeof(*nsblk), GFP_KERNEL); 2343 if (!nsblk) 2344 goto err; 2345 dev = &nsblk->common.dev; 2346 dev->type = &namespace_blk_device_type; 2347 } else { 2348 struct nd_namespace_pmem *nspm; 2349 2350 nspm = kzalloc(sizeof(*nspm), GFP_KERNEL); 2351 if (!nspm) 2352 goto err; 2353 dev = &nspm->nsio.common.dev; 2354 dev->type = &namespace_pmem_device_type; 2355 nd_namespace_pmem_set_resource(nd_region, nspm, 0); 2356 } 2357 dev->parent = &nd_region->dev; 2358 devs[count++] = dev; 2359 } else if (is_memory(&nd_region->dev)) { 2360 /* clean unselected labels */ 2361 for (i = 0; i < nd_region->ndr_mappings; i++) { 2362 struct list_head *l, *e; 2363 LIST_HEAD(list); 2364 int j; 2365 2366 nd_mapping = &nd_region->mapping[i]; 2367 if (list_empty(&nd_mapping->labels)) { 2368 WARN_ON(1); 2369 continue; 2370 } 2371 2372 j = count; 2373 list_for_each_safe(l, e, &nd_mapping->labels) { 2374 if (!j--) 2375 break; 2376 list_move_tail(l, &list); 2377 } 2378 nd_mapping_free_labels(nd_mapping); 2379 list_splice_init(&list, &nd_mapping->labels); 2380 } 2381 } 2382 2383 if (count > 1) 2384 sort(devs, count, sizeof(struct device *), cmp_dpa, NULL); 2385 2386 return devs; 2387 2388 err: 2389 if (devs) { 2390 for (i = 0; devs[i]; i++) 2391 if (is_nd_blk(&nd_region->dev)) 2392 namespace_blk_release(devs[i]); 2393 else 2394 namespace_pmem_release(devs[i]); 2395 kfree(devs); 2396 } 2397 return NULL; 2398 } 2399 2400 static struct device **create_namespaces(struct nd_region *nd_region) 2401 { 2402 struct nd_mapping *nd_mapping = &nd_region->mapping[0]; 2403 struct device **devs; 2404 int i; 2405 2406 if (nd_region->ndr_mappings == 0) 2407 return NULL; 2408 2409 /* lock down all mappings while we scan labels */ 2410 for (i = 0; i < nd_region->ndr_mappings; i++) { 2411 nd_mapping = &nd_region->mapping[i]; 2412 mutex_lock_nested(&nd_mapping->lock, i); 2413 } 2414 2415 devs = scan_labels(nd_region); 2416 2417 for (i = 0; i < nd_region->ndr_mappings; i++) { 2418 int reverse = nd_region->ndr_mappings - 1 - i; 2419 2420 nd_mapping = &nd_region->mapping[reverse]; 2421 mutex_unlock(&nd_mapping->lock); 2422 } 2423 2424 return devs; 2425 } 2426 2427 static int init_active_labels(struct nd_region *nd_region) 2428 { 2429 int i; 2430 2431 for (i = 0; i < nd_region->ndr_mappings; i++) { 2432 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; 2433 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 2434 struct nvdimm *nvdimm = nd_mapping->nvdimm; 2435 struct nd_label_ent *label_ent; 2436 int count, j; 2437 2438 /* 2439 * If the dimm is disabled then we may need to prevent 2440 * the region from being activated. 2441 */ 2442 if (!ndd) { 2443 if (test_bit(NDD_LOCKED, &nvdimm->flags)) 2444 /* fail, label data may be unreadable */; 2445 else if (test_bit(NDD_ALIASING, &nvdimm->flags)) 2446 /* fail, labels needed to disambiguate dpa */; 2447 else 2448 return 0; 2449 2450 dev_err(&nd_region->dev, "%s: is %s, failing probe\n", 2451 dev_name(&nd_mapping->nvdimm->dev), 2452 test_bit(NDD_LOCKED, &nvdimm->flags) 2453 ? "locked" : "disabled"); 2454 return -ENXIO; 2455 } 2456 nd_mapping->ndd = ndd; 2457 atomic_inc(&nvdimm->busy); 2458 get_ndd(ndd); 2459 2460 count = nd_label_active_count(ndd); 2461 dev_dbg(ndd->dev, "%s: %d\n", __func__, count); 2462 if (!count) 2463 continue; 2464 for (j = 0; j < count; j++) { 2465 struct nd_namespace_label *label; 2466 2467 label_ent = kzalloc(sizeof(*label_ent), GFP_KERNEL); 2468 if (!label_ent) 2469 break; 2470 label = nd_label_active(ndd, j); 2471 label_ent->label = label; 2472 2473 mutex_lock(&nd_mapping->lock); 2474 list_add_tail(&label_ent->list, &nd_mapping->labels); 2475 mutex_unlock(&nd_mapping->lock); 2476 } 2477 2478 if (j >= count) 2479 continue; 2480 2481 mutex_lock(&nd_mapping->lock); 2482 nd_mapping_free_labels(nd_mapping); 2483 mutex_unlock(&nd_mapping->lock); 2484 return -ENOMEM; 2485 } 2486 2487 return 0; 2488 } 2489 2490 int nd_region_register_namespaces(struct nd_region *nd_region, int *err) 2491 { 2492 struct device **devs = NULL; 2493 int i, rc = 0, type; 2494 2495 *err = 0; 2496 nvdimm_bus_lock(&nd_region->dev); 2497 rc = init_active_labels(nd_region); 2498 if (rc) { 2499 nvdimm_bus_unlock(&nd_region->dev); 2500 return rc; 2501 } 2502 2503 type = nd_region_to_nstype(nd_region); 2504 switch (type) { 2505 case ND_DEVICE_NAMESPACE_IO: 2506 devs = create_namespace_io(nd_region); 2507 break; 2508 case ND_DEVICE_NAMESPACE_PMEM: 2509 case ND_DEVICE_NAMESPACE_BLK: 2510 devs = create_namespaces(nd_region); 2511 break; 2512 default: 2513 break; 2514 } 2515 nvdimm_bus_unlock(&nd_region->dev); 2516 2517 if (!devs) 2518 return -ENODEV; 2519 2520 for (i = 0; devs[i]; i++) { 2521 struct device *dev = devs[i]; 2522 int id; 2523 2524 if (type == ND_DEVICE_NAMESPACE_BLK) { 2525 struct nd_namespace_blk *nsblk; 2526 2527 nsblk = to_nd_namespace_blk(dev); 2528 id = ida_simple_get(&nd_region->ns_ida, 0, 0, 2529 GFP_KERNEL); 2530 nsblk->id = id; 2531 } else if (type == ND_DEVICE_NAMESPACE_PMEM) { 2532 struct nd_namespace_pmem *nspm; 2533 2534 nspm = to_nd_namespace_pmem(dev); 2535 id = ida_simple_get(&nd_region->ns_ida, 0, 0, 2536 GFP_KERNEL); 2537 nspm->id = id; 2538 } else 2539 id = i; 2540 2541 if (id < 0) 2542 break; 2543 dev_set_name(dev, "namespace%d.%d", nd_region->id, id); 2544 dev->groups = nd_namespace_attribute_groups; 2545 nd_device_register(dev); 2546 } 2547 if (i) 2548 nd_region->ns_seed = devs[0]; 2549 2550 if (devs[i]) { 2551 int j; 2552 2553 for (j = i; devs[j]; j++) { 2554 struct device *dev = devs[j]; 2555 2556 device_initialize(dev); 2557 put_device(dev); 2558 } 2559 *err = j - i; 2560 /* 2561 * All of the namespaces we tried to register failed, so 2562 * fail region activation. 2563 */ 2564 if (*err == 0) 2565 rc = -ENODEV; 2566 } 2567 kfree(devs); 2568 2569 if (rc == -ENODEV) 2570 return rc; 2571 2572 return i; 2573 } 2574