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(%zd)\n", 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 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 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, "not associated with dimm(s)\n"); 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_allocatable_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, "%llx %s (%d)\n", val, rc < 0 ? "fail" : "success", rc); 1109 1110 nvdimm_bus_unlock(dev); 1111 device_unlock(dev); 1112 1113 return rc < 0 ? rc : len; 1114 } 1115 1116 resource_size_t __nvdimm_namespace_capacity(struct nd_namespace_common *ndns) 1117 { 1118 struct device *dev = &ndns->dev; 1119 1120 if (is_namespace_pmem(dev)) { 1121 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 1122 1123 return resource_size(&nspm->nsio.res); 1124 } else if (is_namespace_blk(dev)) { 1125 return nd_namespace_blk_size(to_nd_namespace_blk(dev)); 1126 } else if (is_namespace_io(dev)) { 1127 struct nd_namespace_io *nsio = to_nd_namespace_io(dev); 1128 1129 return resource_size(&nsio->res); 1130 } else 1131 WARN_ONCE(1, "unknown namespace type\n"); 1132 return 0; 1133 } 1134 1135 resource_size_t nvdimm_namespace_capacity(struct nd_namespace_common *ndns) 1136 { 1137 resource_size_t size; 1138 1139 nvdimm_bus_lock(&ndns->dev); 1140 size = __nvdimm_namespace_capacity(ndns); 1141 nvdimm_bus_unlock(&ndns->dev); 1142 1143 return size; 1144 } 1145 EXPORT_SYMBOL(nvdimm_namespace_capacity); 1146 1147 bool nvdimm_namespace_locked(struct nd_namespace_common *ndns) 1148 { 1149 int i; 1150 bool locked = false; 1151 struct device *dev = &ndns->dev; 1152 struct nd_region *nd_region = to_nd_region(dev->parent); 1153 1154 for (i = 0; i < nd_region->ndr_mappings; i++) { 1155 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; 1156 struct nvdimm *nvdimm = nd_mapping->nvdimm; 1157 1158 if (test_bit(NDD_LOCKED, &nvdimm->flags)) { 1159 dev_dbg(dev, "%s locked\n", nvdimm_name(nvdimm)); 1160 locked = true; 1161 } 1162 } 1163 return locked; 1164 } 1165 EXPORT_SYMBOL(nvdimm_namespace_locked); 1166 1167 static ssize_t size_show(struct device *dev, 1168 struct device_attribute *attr, char *buf) 1169 { 1170 return sprintf(buf, "%llu\n", (unsigned long long) 1171 nvdimm_namespace_capacity(to_ndns(dev))); 1172 } 1173 static DEVICE_ATTR(size, 0444, size_show, size_store); 1174 1175 static u8 *namespace_to_uuid(struct device *dev) 1176 { 1177 if (is_namespace_pmem(dev)) { 1178 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 1179 1180 return nspm->uuid; 1181 } else if (is_namespace_blk(dev)) { 1182 struct nd_namespace_blk *nsblk = to_nd_namespace_blk(dev); 1183 1184 return nsblk->uuid; 1185 } else 1186 return ERR_PTR(-ENXIO); 1187 } 1188 1189 static ssize_t uuid_show(struct device *dev, 1190 struct device_attribute *attr, char *buf) 1191 { 1192 u8 *uuid = namespace_to_uuid(dev); 1193 1194 if (IS_ERR(uuid)) 1195 return PTR_ERR(uuid); 1196 if (uuid) 1197 return sprintf(buf, "%pUb\n", uuid); 1198 return sprintf(buf, "\n"); 1199 } 1200 1201 /** 1202 * namespace_update_uuid - check for a unique uuid and whether we're "renaming" 1203 * @nd_region: parent region so we can updates all dimms in the set 1204 * @dev: namespace type for generating label_id 1205 * @new_uuid: incoming uuid 1206 * @old_uuid: reference to the uuid storage location in the namespace object 1207 */ 1208 static int namespace_update_uuid(struct nd_region *nd_region, 1209 struct device *dev, u8 *new_uuid, u8 **old_uuid) 1210 { 1211 u32 flags = is_namespace_blk(dev) ? NSLABEL_FLAG_LOCAL : 0; 1212 struct nd_label_id old_label_id; 1213 struct nd_label_id new_label_id; 1214 int i; 1215 1216 if (!nd_is_uuid_unique(dev, new_uuid)) 1217 return -EINVAL; 1218 1219 if (*old_uuid == NULL) 1220 goto out; 1221 1222 /* 1223 * If we've already written a label with this uuid, then it's 1224 * too late to rename because we can't reliably update the uuid 1225 * without losing the old namespace. Userspace must delete this 1226 * namespace to abandon the old uuid. 1227 */ 1228 for (i = 0; i < nd_region->ndr_mappings; i++) { 1229 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; 1230 1231 /* 1232 * This check by itself is sufficient because old_uuid 1233 * would be NULL above if this uuid did not exist in the 1234 * currently written set. 1235 * 1236 * FIXME: can we delete uuid with zero dpa allocated? 1237 */ 1238 if (list_empty(&nd_mapping->labels)) 1239 return -EBUSY; 1240 } 1241 1242 nd_label_gen_id(&old_label_id, *old_uuid, flags); 1243 nd_label_gen_id(&new_label_id, new_uuid, flags); 1244 for (i = 0; i < nd_region->ndr_mappings; i++) { 1245 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; 1246 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 1247 struct resource *res; 1248 1249 for_each_dpa_resource(ndd, res) 1250 if (strcmp(res->name, old_label_id.id) == 0) 1251 sprintf((void *) res->name, "%s", 1252 new_label_id.id); 1253 } 1254 kfree(*old_uuid); 1255 out: 1256 *old_uuid = new_uuid; 1257 return 0; 1258 } 1259 1260 static ssize_t uuid_store(struct device *dev, 1261 struct device_attribute *attr, const char *buf, size_t len) 1262 { 1263 struct nd_region *nd_region = to_nd_region(dev->parent); 1264 u8 *uuid = NULL; 1265 ssize_t rc = 0; 1266 u8 **ns_uuid; 1267 1268 if (is_namespace_pmem(dev)) { 1269 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 1270 1271 ns_uuid = &nspm->uuid; 1272 } else if (is_namespace_blk(dev)) { 1273 struct nd_namespace_blk *nsblk = to_nd_namespace_blk(dev); 1274 1275 ns_uuid = &nsblk->uuid; 1276 } else 1277 return -ENXIO; 1278 1279 device_lock(dev); 1280 nvdimm_bus_lock(dev); 1281 wait_nvdimm_bus_probe_idle(dev); 1282 if (to_ndns(dev)->claim) 1283 rc = -EBUSY; 1284 if (rc >= 0) 1285 rc = nd_uuid_store(dev, &uuid, buf, len); 1286 if (rc >= 0) 1287 rc = namespace_update_uuid(nd_region, dev, uuid, ns_uuid); 1288 if (rc >= 0) 1289 rc = nd_namespace_label_update(nd_region, dev); 1290 else 1291 kfree(uuid); 1292 dev_dbg(dev, "result: %zd wrote: %s%s", rc, buf, 1293 buf[len - 1] == '\n' ? "" : "\n"); 1294 nvdimm_bus_unlock(dev); 1295 device_unlock(dev); 1296 1297 return rc < 0 ? rc : len; 1298 } 1299 static DEVICE_ATTR_RW(uuid); 1300 1301 static ssize_t resource_show(struct device *dev, 1302 struct device_attribute *attr, char *buf) 1303 { 1304 struct resource *res; 1305 1306 if (is_namespace_pmem(dev)) { 1307 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 1308 1309 res = &nspm->nsio.res; 1310 } else if (is_namespace_io(dev)) { 1311 struct nd_namespace_io *nsio = to_nd_namespace_io(dev); 1312 1313 res = &nsio->res; 1314 } else 1315 return -ENXIO; 1316 1317 /* no address to convey if the namespace has no allocation */ 1318 if (resource_size(res) == 0) 1319 return -ENXIO; 1320 return sprintf(buf, "%#llx\n", (unsigned long long) res->start); 1321 } 1322 static DEVICE_ATTR_RO(resource); 1323 1324 static const unsigned long blk_lbasize_supported[] = { 512, 520, 528, 1325 4096, 4104, 4160, 4224, 0 }; 1326 1327 static const unsigned long pmem_lbasize_supported[] = { 512, 4096, 0 }; 1328 1329 static ssize_t sector_size_show(struct device *dev, 1330 struct device_attribute *attr, char *buf) 1331 { 1332 if (is_namespace_blk(dev)) { 1333 struct nd_namespace_blk *nsblk = to_nd_namespace_blk(dev); 1334 1335 return nd_size_select_show(nsblk->lbasize, 1336 blk_lbasize_supported, buf); 1337 } 1338 1339 if (is_namespace_pmem(dev)) { 1340 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 1341 1342 return nd_size_select_show(nspm->lbasize, 1343 pmem_lbasize_supported, buf); 1344 } 1345 return -ENXIO; 1346 } 1347 1348 static ssize_t sector_size_store(struct device *dev, 1349 struct device_attribute *attr, const char *buf, size_t len) 1350 { 1351 struct nd_region *nd_region = to_nd_region(dev->parent); 1352 const unsigned long *supported; 1353 unsigned long *lbasize; 1354 ssize_t rc = 0; 1355 1356 if (is_namespace_blk(dev)) { 1357 struct nd_namespace_blk *nsblk = to_nd_namespace_blk(dev); 1358 1359 lbasize = &nsblk->lbasize; 1360 supported = blk_lbasize_supported; 1361 } else if (is_namespace_pmem(dev)) { 1362 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 1363 1364 lbasize = &nspm->lbasize; 1365 supported = pmem_lbasize_supported; 1366 } else 1367 return -ENXIO; 1368 1369 device_lock(dev); 1370 nvdimm_bus_lock(dev); 1371 if (to_ndns(dev)->claim) 1372 rc = -EBUSY; 1373 if (rc >= 0) 1374 rc = nd_size_select_store(dev, buf, lbasize, supported); 1375 if (rc >= 0) 1376 rc = nd_namespace_label_update(nd_region, dev); 1377 dev_dbg(dev, "result: %zd %s: %s%s", rc, rc < 0 ? "tried" : "wrote", 1378 buf, buf[len - 1] == '\n' ? "" : "\n"); 1379 nvdimm_bus_unlock(dev); 1380 device_unlock(dev); 1381 1382 return rc ? rc : len; 1383 } 1384 static DEVICE_ATTR_RW(sector_size); 1385 1386 static ssize_t dpa_extents_show(struct device *dev, 1387 struct device_attribute *attr, char *buf) 1388 { 1389 struct nd_region *nd_region = to_nd_region(dev->parent); 1390 struct nd_label_id label_id; 1391 int count = 0, i; 1392 u8 *uuid = NULL; 1393 u32 flags = 0; 1394 1395 nvdimm_bus_lock(dev); 1396 if (is_namespace_pmem(dev)) { 1397 struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev); 1398 1399 uuid = nspm->uuid; 1400 flags = 0; 1401 } else if (is_namespace_blk(dev)) { 1402 struct nd_namespace_blk *nsblk = to_nd_namespace_blk(dev); 1403 1404 uuid = nsblk->uuid; 1405 flags = NSLABEL_FLAG_LOCAL; 1406 } 1407 1408 if (!uuid) 1409 goto out; 1410 1411 nd_label_gen_id(&label_id, uuid, flags); 1412 for (i = 0; i < nd_region->ndr_mappings; i++) { 1413 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; 1414 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 1415 struct resource *res; 1416 1417 for_each_dpa_resource(ndd, res) 1418 if (strcmp(res->name, label_id.id) == 0) 1419 count++; 1420 } 1421 out: 1422 nvdimm_bus_unlock(dev); 1423 1424 return sprintf(buf, "%d\n", count); 1425 } 1426 static DEVICE_ATTR_RO(dpa_extents); 1427 1428 static int btt_claim_class(struct device *dev) 1429 { 1430 struct nd_region *nd_region = to_nd_region(dev->parent); 1431 int i, loop_bitmask = 0; 1432 1433 for (i = 0; i < nd_region->ndr_mappings; i++) { 1434 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; 1435 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 1436 struct nd_namespace_index *nsindex; 1437 1438 /* 1439 * If any of the DIMMs do not support labels the only 1440 * possible BTT format is v1. 1441 */ 1442 if (!ndd) { 1443 loop_bitmask = 0; 1444 break; 1445 } 1446 1447 nsindex = to_namespace_index(ndd, ndd->ns_current); 1448 if (nsindex == NULL) 1449 loop_bitmask |= 1; 1450 else { 1451 /* check whether existing labels are v1.1 or v1.2 */ 1452 if (__le16_to_cpu(nsindex->major) == 1 1453 && __le16_to_cpu(nsindex->minor) == 1) 1454 loop_bitmask |= 2; 1455 else 1456 loop_bitmask |= 4; 1457 } 1458 } 1459 /* 1460 * If nsindex is null loop_bitmask's bit 0 will be set, and if an index 1461 * block is found, a v1.1 label for any mapping will set bit 1, and a 1462 * v1.2 label will set bit 2. 1463 * 1464 * At the end of the loop, at most one of the three bits must be set. 1465 * If multiple bits were set, it means the different mappings disagree 1466 * about their labels, and this must be cleaned up first. 1467 * 1468 * If all the label index blocks are found to agree, nsindex of NULL 1469 * implies labels haven't been initialized yet, and when they will, 1470 * they will be of the 1.2 format, so we can assume BTT2.0 1471 * 1472 * If 1.1 labels are found, we enforce BTT1.1, and if 1.2 labels are 1473 * found, we enforce BTT2.0 1474 * 1475 * If the loop was never entered, default to BTT1.1 (legacy namespaces) 1476 */ 1477 switch (loop_bitmask) { 1478 case 0: 1479 case 2: 1480 return NVDIMM_CCLASS_BTT; 1481 case 1: 1482 case 4: 1483 return NVDIMM_CCLASS_BTT2; 1484 default: 1485 return -ENXIO; 1486 } 1487 } 1488 1489 static ssize_t holder_show(struct device *dev, 1490 struct device_attribute *attr, char *buf) 1491 { 1492 struct nd_namespace_common *ndns = to_ndns(dev); 1493 ssize_t rc; 1494 1495 device_lock(dev); 1496 rc = sprintf(buf, "%s\n", ndns->claim ? dev_name(ndns->claim) : ""); 1497 device_unlock(dev); 1498 1499 return rc; 1500 } 1501 static DEVICE_ATTR_RO(holder); 1502 1503 static ssize_t __holder_class_store(struct device *dev, const char *buf) 1504 { 1505 struct nd_namespace_common *ndns = to_ndns(dev); 1506 1507 if (dev->driver || ndns->claim) 1508 return -EBUSY; 1509 1510 if (strcmp(buf, "btt") == 0 || strcmp(buf, "btt\n") == 0) 1511 ndns->claim_class = btt_claim_class(dev); 1512 else if (strcmp(buf, "pfn") == 0 || strcmp(buf, "pfn\n") == 0) 1513 ndns->claim_class = NVDIMM_CCLASS_PFN; 1514 else if (strcmp(buf, "dax") == 0 || strcmp(buf, "dax\n") == 0) 1515 ndns->claim_class = NVDIMM_CCLASS_DAX; 1516 else if (strcmp(buf, "") == 0 || strcmp(buf, "\n") == 0) 1517 ndns->claim_class = NVDIMM_CCLASS_NONE; 1518 else 1519 return -EINVAL; 1520 1521 /* btt_claim_class() could've returned an error */ 1522 if (ndns->claim_class < 0) 1523 return ndns->claim_class; 1524 1525 return 0; 1526 } 1527 1528 static ssize_t holder_class_store(struct device *dev, 1529 struct device_attribute *attr, const char *buf, size_t len) 1530 { 1531 struct nd_region *nd_region = to_nd_region(dev->parent); 1532 ssize_t rc; 1533 1534 device_lock(dev); 1535 nvdimm_bus_lock(dev); 1536 wait_nvdimm_bus_probe_idle(dev); 1537 rc = __holder_class_store(dev, buf); 1538 if (rc >= 0) 1539 rc = nd_namespace_label_update(nd_region, dev); 1540 dev_dbg(dev, "%s(%zd)\n", rc < 0 ? "fail " : "", rc); 1541 nvdimm_bus_unlock(dev); 1542 device_unlock(dev); 1543 1544 return rc < 0 ? rc : len; 1545 } 1546 1547 static ssize_t holder_class_show(struct device *dev, 1548 struct device_attribute *attr, char *buf) 1549 { 1550 struct nd_namespace_common *ndns = to_ndns(dev); 1551 ssize_t rc; 1552 1553 device_lock(dev); 1554 if (ndns->claim_class == NVDIMM_CCLASS_NONE) 1555 rc = sprintf(buf, "\n"); 1556 else if ((ndns->claim_class == NVDIMM_CCLASS_BTT) || 1557 (ndns->claim_class == NVDIMM_CCLASS_BTT2)) 1558 rc = sprintf(buf, "btt\n"); 1559 else if (ndns->claim_class == NVDIMM_CCLASS_PFN) 1560 rc = sprintf(buf, "pfn\n"); 1561 else if (ndns->claim_class == NVDIMM_CCLASS_DAX) 1562 rc = sprintf(buf, "dax\n"); 1563 else 1564 rc = sprintf(buf, "<unknown>\n"); 1565 device_unlock(dev); 1566 1567 return rc; 1568 } 1569 static DEVICE_ATTR_RW(holder_class); 1570 1571 static ssize_t mode_show(struct device *dev, 1572 struct device_attribute *attr, char *buf) 1573 { 1574 struct nd_namespace_common *ndns = to_ndns(dev); 1575 struct device *claim; 1576 char *mode; 1577 ssize_t rc; 1578 1579 device_lock(dev); 1580 claim = ndns->claim; 1581 if (claim && is_nd_btt(claim)) 1582 mode = "safe"; 1583 else if (claim && is_nd_pfn(claim)) 1584 mode = "memory"; 1585 else if (claim && is_nd_dax(claim)) 1586 mode = "dax"; 1587 else if (!claim && pmem_should_map_pages(dev)) 1588 mode = "memory"; 1589 else 1590 mode = "raw"; 1591 rc = sprintf(buf, "%s\n", mode); 1592 device_unlock(dev); 1593 1594 return rc; 1595 } 1596 static DEVICE_ATTR_RO(mode); 1597 1598 static ssize_t force_raw_store(struct device *dev, 1599 struct device_attribute *attr, const char *buf, size_t len) 1600 { 1601 bool force_raw; 1602 int rc = strtobool(buf, &force_raw); 1603 1604 if (rc) 1605 return rc; 1606 1607 to_ndns(dev)->force_raw = force_raw; 1608 return len; 1609 } 1610 1611 static ssize_t force_raw_show(struct device *dev, 1612 struct device_attribute *attr, char *buf) 1613 { 1614 return sprintf(buf, "%d\n", to_ndns(dev)->force_raw); 1615 } 1616 static DEVICE_ATTR_RW(force_raw); 1617 1618 static struct attribute *nd_namespace_attributes[] = { 1619 &dev_attr_nstype.attr, 1620 &dev_attr_size.attr, 1621 &dev_attr_mode.attr, 1622 &dev_attr_uuid.attr, 1623 &dev_attr_holder.attr, 1624 &dev_attr_resource.attr, 1625 &dev_attr_alt_name.attr, 1626 &dev_attr_force_raw.attr, 1627 &dev_attr_sector_size.attr, 1628 &dev_attr_dpa_extents.attr, 1629 &dev_attr_holder_class.attr, 1630 NULL, 1631 }; 1632 1633 static umode_t namespace_visible(struct kobject *kobj, 1634 struct attribute *a, int n) 1635 { 1636 struct device *dev = container_of(kobj, struct device, kobj); 1637 1638 if (a == &dev_attr_resource.attr) { 1639 if (is_namespace_blk(dev)) 1640 return 0; 1641 return 0400; 1642 } 1643 1644 if (is_namespace_pmem(dev) || is_namespace_blk(dev)) { 1645 if (a == &dev_attr_size.attr) 1646 return 0644; 1647 1648 return a->mode; 1649 } 1650 1651 if (a == &dev_attr_nstype.attr || a == &dev_attr_size.attr 1652 || a == &dev_attr_holder.attr 1653 || a == &dev_attr_holder_class.attr 1654 || a == &dev_attr_force_raw.attr 1655 || a == &dev_attr_mode.attr) 1656 return a->mode; 1657 1658 return 0; 1659 } 1660 1661 static struct attribute_group nd_namespace_attribute_group = { 1662 .attrs = nd_namespace_attributes, 1663 .is_visible = namespace_visible, 1664 }; 1665 1666 static const struct attribute_group *nd_namespace_attribute_groups[] = { 1667 &nd_device_attribute_group, 1668 &nd_namespace_attribute_group, 1669 &nd_numa_attribute_group, 1670 NULL, 1671 }; 1672 1673 struct nd_namespace_common *nvdimm_namespace_common_probe(struct device *dev) 1674 { 1675 struct nd_btt *nd_btt = is_nd_btt(dev) ? to_nd_btt(dev) : NULL; 1676 struct nd_pfn *nd_pfn = is_nd_pfn(dev) ? to_nd_pfn(dev) : NULL; 1677 struct nd_dax *nd_dax = is_nd_dax(dev) ? to_nd_dax(dev) : NULL; 1678 struct nd_namespace_common *ndns = NULL; 1679 resource_size_t size; 1680 1681 if (nd_btt || nd_pfn || nd_dax) { 1682 if (nd_btt) 1683 ndns = nd_btt->ndns; 1684 else if (nd_pfn) 1685 ndns = nd_pfn->ndns; 1686 else if (nd_dax) 1687 ndns = nd_dax->nd_pfn.ndns; 1688 1689 if (!ndns) 1690 return ERR_PTR(-ENODEV); 1691 1692 /* 1693 * Flush any in-progess probes / removals in the driver 1694 * for the raw personality of this namespace. 1695 */ 1696 device_lock(&ndns->dev); 1697 device_unlock(&ndns->dev); 1698 if (ndns->dev.driver) { 1699 dev_dbg(&ndns->dev, "is active, can't bind %s\n", 1700 dev_name(dev)); 1701 return ERR_PTR(-EBUSY); 1702 } 1703 if (dev_WARN_ONCE(&ndns->dev, ndns->claim != dev, 1704 "host (%s) vs claim (%s) mismatch\n", 1705 dev_name(dev), 1706 dev_name(ndns->claim))) 1707 return ERR_PTR(-ENXIO); 1708 } else { 1709 ndns = to_ndns(dev); 1710 if (ndns->claim) { 1711 dev_dbg(dev, "claimed by %s, failing probe\n", 1712 dev_name(ndns->claim)); 1713 1714 return ERR_PTR(-ENXIO); 1715 } 1716 } 1717 1718 if (nvdimm_namespace_locked(ndns)) 1719 return ERR_PTR(-EACCES); 1720 1721 size = nvdimm_namespace_capacity(ndns); 1722 if (size < ND_MIN_NAMESPACE_SIZE) { 1723 dev_dbg(&ndns->dev, "%pa, too small must be at least %#x\n", 1724 &size, ND_MIN_NAMESPACE_SIZE); 1725 return ERR_PTR(-ENODEV); 1726 } 1727 1728 if (is_namespace_pmem(&ndns->dev)) { 1729 struct nd_namespace_pmem *nspm; 1730 1731 nspm = to_nd_namespace_pmem(&ndns->dev); 1732 if (uuid_not_set(nspm->uuid, &ndns->dev, __func__)) 1733 return ERR_PTR(-ENODEV); 1734 } else if (is_namespace_blk(&ndns->dev)) { 1735 struct nd_namespace_blk *nsblk; 1736 1737 nsblk = to_nd_namespace_blk(&ndns->dev); 1738 if (uuid_not_set(nsblk->uuid, &ndns->dev, __func__)) 1739 return ERR_PTR(-ENODEV); 1740 if (!nsblk->lbasize) { 1741 dev_dbg(&ndns->dev, "sector size not set\n"); 1742 return ERR_PTR(-ENODEV); 1743 } 1744 if (!nd_namespace_blk_validate(nsblk)) 1745 return ERR_PTR(-ENODEV); 1746 } 1747 1748 return ndns; 1749 } 1750 EXPORT_SYMBOL(nvdimm_namespace_common_probe); 1751 1752 static struct device **create_namespace_io(struct nd_region *nd_region) 1753 { 1754 struct nd_namespace_io *nsio; 1755 struct device *dev, **devs; 1756 struct resource *res; 1757 1758 nsio = kzalloc(sizeof(*nsio), GFP_KERNEL); 1759 if (!nsio) 1760 return NULL; 1761 1762 devs = kcalloc(2, sizeof(struct device *), GFP_KERNEL); 1763 if (!devs) { 1764 kfree(nsio); 1765 return NULL; 1766 } 1767 1768 dev = &nsio->common.dev; 1769 dev->type = &namespace_io_device_type; 1770 dev->parent = &nd_region->dev; 1771 res = &nsio->res; 1772 res->name = dev_name(&nd_region->dev); 1773 res->flags = IORESOURCE_MEM; 1774 res->start = nd_region->ndr_start; 1775 res->end = res->start + nd_region->ndr_size - 1; 1776 1777 devs[0] = dev; 1778 return devs; 1779 } 1780 1781 static bool has_uuid_at_pos(struct nd_region *nd_region, u8 *uuid, 1782 u64 cookie, u16 pos) 1783 { 1784 struct nd_namespace_label *found = NULL; 1785 int i; 1786 1787 for (i = 0; i < nd_region->ndr_mappings; i++) { 1788 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; 1789 struct nd_interleave_set *nd_set = nd_region->nd_set; 1790 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 1791 struct nd_label_ent *label_ent; 1792 bool found_uuid = false; 1793 1794 list_for_each_entry(label_ent, &nd_mapping->labels, list) { 1795 struct nd_namespace_label *nd_label = label_ent->label; 1796 u16 position, nlabel; 1797 u64 isetcookie; 1798 1799 if (!nd_label) 1800 continue; 1801 isetcookie = __le64_to_cpu(nd_label->isetcookie); 1802 position = __le16_to_cpu(nd_label->position); 1803 nlabel = __le16_to_cpu(nd_label->nlabel); 1804 1805 if (isetcookie != cookie) 1806 continue; 1807 1808 if (memcmp(nd_label->uuid, uuid, NSLABEL_UUID_LEN) != 0) 1809 continue; 1810 1811 if (namespace_label_has(ndd, type_guid) 1812 && !guid_equal(&nd_set->type_guid, 1813 &nd_label->type_guid)) { 1814 dev_dbg(ndd->dev, "expect type_guid %pUb got %pUb\n", 1815 nd_set->type_guid.b, 1816 nd_label->type_guid.b); 1817 continue; 1818 } 1819 1820 if (found_uuid) { 1821 dev_dbg(ndd->dev, "duplicate entry for uuid\n"); 1822 return false; 1823 } 1824 found_uuid = true; 1825 if (nlabel != nd_region->ndr_mappings) 1826 continue; 1827 if (position != pos) 1828 continue; 1829 found = nd_label; 1830 break; 1831 } 1832 if (found) 1833 break; 1834 } 1835 return found != NULL; 1836 } 1837 1838 static int select_pmem_id(struct nd_region *nd_region, u8 *pmem_id) 1839 { 1840 int i; 1841 1842 if (!pmem_id) 1843 return -ENODEV; 1844 1845 for (i = 0; i < nd_region->ndr_mappings; i++) { 1846 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; 1847 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 1848 struct nd_namespace_label *nd_label = NULL; 1849 u64 hw_start, hw_end, pmem_start, pmem_end; 1850 struct nd_label_ent *label_ent; 1851 1852 lockdep_assert_held(&nd_mapping->lock); 1853 list_for_each_entry(label_ent, &nd_mapping->labels, list) { 1854 nd_label = label_ent->label; 1855 if (!nd_label) 1856 continue; 1857 if (memcmp(nd_label->uuid, pmem_id, NSLABEL_UUID_LEN) == 0) 1858 break; 1859 nd_label = NULL; 1860 } 1861 1862 if (!nd_label) { 1863 WARN_ON(1); 1864 return -EINVAL; 1865 } 1866 1867 /* 1868 * Check that this label is compliant with the dpa 1869 * range published in NFIT 1870 */ 1871 hw_start = nd_mapping->start; 1872 hw_end = hw_start + nd_mapping->size; 1873 pmem_start = __le64_to_cpu(nd_label->dpa); 1874 pmem_end = pmem_start + __le64_to_cpu(nd_label->rawsize); 1875 if (pmem_start >= hw_start && pmem_start < hw_end 1876 && pmem_end <= hw_end && pmem_end > hw_start) 1877 /* pass */; 1878 else { 1879 dev_dbg(&nd_region->dev, "%s invalid label for %pUb\n", 1880 dev_name(ndd->dev), nd_label->uuid); 1881 return -EINVAL; 1882 } 1883 1884 /* move recently validated label to the front of the list */ 1885 list_move(&label_ent->list, &nd_mapping->labels); 1886 } 1887 return 0; 1888 } 1889 1890 /** 1891 * create_namespace_pmem - validate interleave set labelling, retrieve label0 1892 * @nd_region: region with mappings to validate 1893 * @nspm: target namespace to create 1894 * @nd_label: target pmem namespace label to evaluate 1895 */ 1896 static struct device *create_namespace_pmem(struct nd_region *nd_region, 1897 struct nd_namespace_index *nsindex, 1898 struct nd_namespace_label *nd_label) 1899 { 1900 u64 cookie = nd_region_interleave_set_cookie(nd_region, nsindex); 1901 u64 altcookie = nd_region_interleave_set_altcookie(nd_region); 1902 struct nd_label_ent *label_ent; 1903 struct nd_namespace_pmem *nspm; 1904 struct nd_mapping *nd_mapping; 1905 resource_size_t size = 0; 1906 struct resource *res; 1907 struct device *dev; 1908 int rc = 0; 1909 u16 i; 1910 1911 if (cookie == 0) { 1912 dev_dbg(&nd_region->dev, "invalid interleave-set-cookie\n"); 1913 return ERR_PTR(-ENXIO); 1914 } 1915 1916 if (__le64_to_cpu(nd_label->isetcookie) != cookie) { 1917 dev_dbg(&nd_region->dev, "invalid cookie in label: %pUb\n", 1918 nd_label->uuid); 1919 if (__le64_to_cpu(nd_label->isetcookie) != altcookie) 1920 return ERR_PTR(-EAGAIN); 1921 1922 dev_dbg(&nd_region->dev, "valid altcookie in label: %pUb\n", 1923 nd_label->uuid); 1924 } 1925 1926 nspm = kzalloc(sizeof(*nspm), GFP_KERNEL); 1927 if (!nspm) 1928 return ERR_PTR(-ENOMEM); 1929 1930 nspm->id = -1; 1931 dev = &nspm->nsio.common.dev; 1932 dev->type = &namespace_pmem_device_type; 1933 dev->parent = &nd_region->dev; 1934 res = &nspm->nsio.res; 1935 res->name = dev_name(&nd_region->dev); 1936 res->flags = IORESOURCE_MEM; 1937 1938 for (i = 0; i < nd_region->ndr_mappings; i++) { 1939 if (has_uuid_at_pos(nd_region, nd_label->uuid, cookie, i)) 1940 continue; 1941 if (has_uuid_at_pos(nd_region, nd_label->uuid, altcookie, i)) 1942 continue; 1943 break; 1944 } 1945 1946 if (i < nd_region->ndr_mappings) { 1947 struct nvdimm *nvdimm = nd_region->mapping[i].nvdimm; 1948 1949 /* 1950 * Give up if we don't find an instance of a uuid at each 1951 * position (from 0 to nd_region->ndr_mappings - 1), or if we 1952 * find a dimm with two instances of the same uuid. 1953 */ 1954 dev_err(&nd_region->dev, "%s missing label for %pUb\n", 1955 nvdimm_name(nvdimm), nd_label->uuid); 1956 rc = -EINVAL; 1957 goto err; 1958 } 1959 1960 /* 1961 * Fix up each mapping's 'labels' to have the validated pmem label for 1962 * that position at labels[0], and NULL at labels[1]. In the process, 1963 * check that the namespace aligns with interleave-set. We know 1964 * that it does not overlap with any blk namespaces by virtue of 1965 * the dimm being enabled (i.e. nd_label_reserve_dpa() 1966 * succeeded). 1967 */ 1968 rc = select_pmem_id(nd_region, nd_label->uuid); 1969 if (rc) 1970 goto err; 1971 1972 /* Calculate total size and populate namespace properties from label0 */ 1973 for (i = 0; i < nd_region->ndr_mappings; i++) { 1974 struct nd_namespace_label *label0; 1975 struct nvdimm_drvdata *ndd; 1976 1977 nd_mapping = &nd_region->mapping[i]; 1978 label_ent = list_first_entry_or_null(&nd_mapping->labels, 1979 typeof(*label_ent), list); 1980 label0 = label_ent ? label_ent->label : 0; 1981 1982 if (!label0) { 1983 WARN_ON(1); 1984 continue; 1985 } 1986 1987 size += __le64_to_cpu(label0->rawsize); 1988 if (__le16_to_cpu(label0->position) != 0) 1989 continue; 1990 WARN_ON(nspm->alt_name || nspm->uuid); 1991 nspm->alt_name = kmemdup((void __force *) label0->name, 1992 NSLABEL_NAME_LEN, GFP_KERNEL); 1993 nspm->uuid = kmemdup((void __force *) label0->uuid, 1994 NSLABEL_UUID_LEN, GFP_KERNEL); 1995 nspm->lbasize = __le64_to_cpu(label0->lbasize); 1996 ndd = to_ndd(nd_mapping); 1997 if (namespace_label_has(ndd, abstraction_guid)) 1998 nspm->nsio.common.claim_class 1999 = to_nvdimm_cclass(&label0->abstraction_guid); 2000 2001 } 2002 2003 if (!nspm->alt_name || !nspm->uuid) { 2004 rc = -ENOMEM; 2005 goto err; 2006 } 2007 2008 nd_namespace_pmem_set_resource(nd_region, nspm, size); 2009 2010 return dev; 2011 err: 2012 namespace_pmem_release(dev); 2013 switch (rc) { 2014 case -EINVAL: 2015 dev_dbg(&nd_region->dev, "invalid label(s)\n"); 2016 break; 2017 case -ENODEV: 2018 dev_dbg(&nd_region->dev, "label not found\n"); 2019 break; 2020 default: 2021 dev_dbg(&nd_region->dev, "unexpected err: %d\n", rc); 2022 break; 2023 } 2024 return ERR_PTR(rc); 2025 } 2026 2027 struct resource *nsblk_add_resource(struct nd_region *nd_region, 2028 struct nvdimm_drvdata *ndd, struct nd_namespace_blk *nsblk, 2029 resource_size_t start) 2030 { 2031 struct nd_label_id label_id; 2032 struct resource *res; 2033 2034 nd_label_gen_id(&label_id, nsblk->uuid, NSLABEL_FLAG_LOCAL); 2035 res = krealloc(nsblk->res, 2036 sizeof(void *) * (nsblk->num_resources + 1), 2037 GFP_KERNEL); 2038 if (!res) 2039 return NULL; 2040 nsblk->res = (struct resource **) res; 2041 for_each_dpa_resource(ndd, res) 2042 if (strcmp(res->name, label_id.id) == 0 2043 && res->start == start) { 2044 nsblk->res[nsblk->num_resources++] = res; 2045 return res; 2046 } 2047 return NULL; 2048 } 2049 2050 static struct device *nd_namespace_blk_create(struct nd_region *nd_region) 2051 { 2052 struct nd_namespace_blk *nsblk; 2053 struct device *dev; 2054 2055 if (!is_nd_blk(&nd_region->dev)) 2056 return NULL; 2057 2058 nsblk = kzalloc(sizeof(*nsblk), GFP_KERNEL); 2059 if (!nsblk) 2060 return NULL; 2061 2062 dev = &nsblk->common.dev; 2063 dev->type = &namespace_blk_device_type; 2064 nsblk->id = ida_simple_get(&nd_region->ns_ida, 0, 0, GFP_KERNEL); 2065 if (nsblk->id < 0) { 2066 kfree(nsblk); 2067 return NULL; 2068 } 2069 dev_set_name(dev, "namespace%d.%d", nd_region->id, nsblk->id); 2070 dev->parent = &nd_region->dev; 2071 dev->groups = nd_namespace_attribute_groups; 2072 2073 return &nsblk->common.dev; 2074 } 2075 2076 static struct device *nd_namespace_pmem_create(struct nd_region *nd_region) 2077 { 2078 struct nd_namespace_pmem *nspm; 2079 struct resource *res; 2080 struct device *dev; 2081 2082 if (!is_memory(&nd_region->dev)) 2083 return NULL; 2084 2085 nspm = kzalloc(sizeof(*nspm), GFP_KERNEL); 2086 if (!nspm) 2087 return NULL; 2088 2089 dev = &nspm->nsio.common.dev; 2090 dev->type = &namespace_pmem_device_type; 2091 dev->parent = &nd_region->dev; 2092 res = &nspm->nsio.res; 2093 res->name = dev_name(&nd_region->dev); 2094 res->flags = IORESOURCE_MEM; 2095 2096 nspm->id = ida_simple_get(&nd_region->ns_ida, 0, 0, GFP_KERNEL); 2097 if (nspm->id < 0) { 2098 kfree(nspm); 2099 return NULL; 2100 } 2101 dev_set_name(dev, "namespace%d.%d", nd_region->id, nspm->id); 2102 dev->groups = nd_namespace_attribute_groups; 2103 nd_namespace_pmem_set_resource(nd_region, nspm, 0); 2104 2105 return dev; 2106 } 2107 2108 void nd_region_create_ns_seed(struct nd_region *nd_region) 2109 { 2110 WARN_ON(!is_nvdimm_bus_locked(&nd_region->dev)); 2111 2112 if (nd_region_to_nstype(nd_region) == ND_DEVICE_NAMESPACE_IO) 2113 return; 2114 2115 if (is_nd_blk(&nd_region->dev)) 2116 nd_region->ns_seed = nd_namespace_blk_create(nd_region); 2117 else 2118 nd_region->ns_seed = nd_namespace_pmem_create(nd_region); 2119 2120 /* 2121 * Seed creation failures are not fatal, provisioning is simply 2122 * disabled until memory becomes available 2123 */ 2124 if (!nd_region->ns_seed) 2125 dev_err(&nd_region->dev, "failed to create %s namespace\n", 2126 is_nd_blk(&nd_region->dev) ? "blk" : "pmem"); 2127 else 2128 nd_device_register(nd_region->ns_seed); 2129 } 2130 2131 void nd_region_create_dax_seed(struct nd_region *nd_region) 2132 { 2133 WARN_ON(!is_nvdimm_bus_locked(&nd_region->dev)); 2134 nd_region->dax_seed = nd_dax_create(nd_region); 2135 /* 2136 * Seed creation failures are not fatal, provisioning is simply 2137 * disabled until memory becomes available 2138 */ 2139 if (!nd_region->dax_seed) 2140 dev_err(&nd_region->dev, "failed to create dax namespace\n"); 2141 } 2142 2143 void nd_region_create_pfn_seed(struct nd_region *nd_region) 2144 { 2145 WARN_ON(!is_nvdimm_bus_locked(&nd_region->dev)); 2146 nd_region->pfn_seed = nd_pfn_create(nd_region); 2147 /* 2148 * Seed creation failures are not fatal, provisioning is simply 2149 * disabled until memory becomes available 2150 */ 2151 if (!nd_region->pfn_seed) 2152 dev_err(&nd_region->dev, "failed to create pfn namespace\n"); 2153 } 2154 2155 void nd_region_create_btt_seed(struct nd_region *nd_region) 2156 { 2157 WARN_ON(!is_nvdimm_bus_locked(&nd_region->dev)); 2158 nd_region->btt_seed = nd_btt_create(nd_region); 2159 /* 2160 * Seed creation failures are not fatal, provisioning is simply 2161 * disabled until memory becomes available 2162 */ 2163 if (!nd_region->btt_seed) 2164 dev_err(&nd_region->dev, "failed to create btt namespace\n"); 2165 } 2166 2167 static int add_namespace_resource(struct nd_region *nd_region, 2168 struct nd_namespace_label *nd_label, struct device **devs, 2169 int count) 2170 { 2171 struct nd_mapping *nd_mapping = &nd_region->mapping[0]; 2172 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 2173 int i; 2174 2175 for (i = 0; i < count; i++) { 2176 u8 *uuid = namespace_to_uuid(devs[i]); 2177 struct resource *res; 2178 2179 if (IS_ERR_OR_NULL(uuid)) { 2180 WARN_ON(1); 2181 continue; 2182 } 2183 2184 if (memcmp(uuid, nd_label->uuid, NSLABEL_UUID_LEN) != 0) 2185 continue; 2186 if (is_namespace_blk(devs[i])) { 2187 res = nsblk_add_resource(nd_region, ndd, 2188 to_nd_namespace_blk(devs[i]), 2189 __le64_to_cpu(nd_label->dpa)); 2190 if (!res) 2191 return -ENXIO; 2192 nd_dbg_dpa(nd_region, ndd, res, "%d assign\n", count); 2193 } else { 2194 dev_err(&nd_region->dev, 2195 "error: conflicting extents for uuid: %pUb\n", 2196 nd_label->uuid); 2197 return -ENXIO; 2198 } 2199 break; 2200 } 2201 2202 return i; 2203 } 2204 2205 static struct device *create_namespace_blk(struct nd_region *nd_region, 2206 struct nd_namespace_label *nd_label, int count) 2207 { 2208 2209 struct nd_mapping *nd_mapping = &nd_region->mapping[0]; 2210 struct nd_interleave_set *nd_set = nd_region->nd_set; 2211 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 2212 struct nd_namespace_blk *nsblk; 2213 char name[NSLABEL_NAME_LEN]; 2214 struct device *dev = NULL; 2215 struct resource *res; 2216 2217 if (namespace_label_has(ndd, type_guid)) { 2218 if (!guid_equal(&nd_set->type_guid, &nd_label->type_guid)) { 2219 dev_dbg(ndd->dev, "expect type_guid %pUb got %pUb\n", 2220 nd_set->type_guid.b, 2221 nd_label->type_guid.b); 2222 return ERR_PTR(-EAGAIN); 2223 } 2224 2225 if (nd_label->isetcookie != __cpu_to_le64(nd_set->cookie2)) { 2226 dev_dbg(ndd->dev, "expect cookie %#llx got %#llx\n", 2227 nd_set->cookie2, 2228 __le64_to_cpu(nd_label->isetcookie)); 2229 return ERR_PTR(-EAGAIN); 2230 } 2231 } 2232 2233 nsblk = kzalloc(sizeof(*nsblk), GFP_KERNEL); 2234 if (!nsblk) 2235 return ERR_PTR(-ENOMEM); 2236 dev = &nsblk->common.dev; 2237 dev->type = &namespace_blk_device_type; 2238 dev->parent = &nd_region->dev; 2239 nsblk->id = -1; 2240 nsblk->lbasize = __le64_to_cpu(nd_label->lbasize); 2241 nsblk->uuid = kmemdup(nd_label->uuid, NSLABEL_UUID_LEN, 2242 GFP_KERNEL); 2243 if (namespace_label_has(ndd, abstraction_guid)) 2244 nsblk->common.claim_class 2245 = to_nvdimm_cclass(&nd_label->abstraction_guid); 2246 if (!nsblk->uuid) 2247 goto blk_err; 2248 memcpy(name, nd_label->name, NSLABEL_NAME_LEN); 2249 if (name[0]) 2250 nsblk->alt_name = kmemdup(name, NSLABEL_NAME_LEN, 2251 GFP_KERNEL); 2252 res = nsblk_add_resource(nd_region, ndd, nsblk, 2253 __le64_to_cpu(nd_label->dpa)); 2254 if (!res) 2255 goto blk_err; 2256 nd_dbg_dpa(nd_region, ndd, res, "%d: assign\n", count); 2257 return dev; 2258 blk_err: 2259 namespace_blk_release(dev); 2260 return ERR_PTR(-ENXIO); 2261 } 2262 2263 static int cmp_dpa(const void *a, const void *b) 2264 { 2265 const struct device *dev_a = *(const struct device **) a; 2266 const struct device *dev_b = *(const struct device **) b; 2267 struct nd_namespace_blk *nsblk_a, *nsblk_b; 2268 struct nd_namespace_pmem *nspm_a, *nspm_b; 2269 2270 if (is_namespace_io(dev_a)) 2271 return 0; 2272 2273 if (is_namespace_blk(dev_a)) { 2274 nsblk_a = to_nd_namespace_blk(dev_a); 2275 nsblk_b = to_nd_namespace_blk(dev_b); 2276 2277 return memcmp(&nsblk_a->res[0]->start, &nsblk_b->res[0]->start, 2278 sizeof(resource_size_t)); 2279 } 2280 2281 nspm_a = to_nd_namespace_pmem(dev_a); 2282 nspm_b = to_nd_namespace_pmem(dev_b); 2283 2284 return memcmp(&nspm_a->nsio.res.start, &nspm_b->nsio.res.start, 2285 sizeof(resource_size_t)); 2286 } 2287 2288 static struct device **scan_labels(struct nd_region *nd_region) 2289 { 2290 int i, count = 0; 2291 struct device *dev, **devs = NULL; 2292 struct nd_label_ent *label_ent, *e; 2293 struct nd_mapping *nd_mapping = &nd_region->mapping[0]; 2294 resource_size_t map_end = nd_mapping->start + nd_mapping->size - 1; 2295 2296 /* "safe" because create_namespace_pmem() might list_move() label_ent */ 2297 list_for_each_entry_safe(label_ent, e, &nd_mapping->labels, list) { 2298 struct nd_namespace_label *nd_label = label_ent->label; 2299 struct device **__devs; 2300 u32 flags; 2301 2302 if (!nd_label) 2303 continue; 2304 flags = __le32_to_cpu(nd_label->flags); 2305 if (is_nd_blk(&nd_region->dev) 2306 == !!(flags & NSLABEL_FLAG_LOCAL)) 2307 /* pass, region matches label type */; 2308 else 2309 continue; 2310 2311 /* skip labels that describe extents outside of the region */ 2312 if (nd_label->dpa < nd_mapping->start || nd_label->dpa > map_end) 2313 continue; 2314 2315 i = add_namespace_resource(nd_region, nd_label, devs, count); 2316 if (i < 0) 2317 goto err; 2318 if (i < count) 2319 continue; 2320 __devs = kcalloc(count + 2, sizeof(dev), GFP_KERNEL); 2321 if (!__devs) 2322 goto err; 2323 memcpy(__devs, devs, sizeof(dev) * count); 2324 kfree(devs); 2325 devs = __devs; 2326 2327 if (is_nd_blk(&nd_region->dev)) 2328 dev = create_namespace_blk(nd_region, nd_label, count); 2329 else { 2330 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 2331 struct nd_namespace_index *nsindex; 2332 2333 nsindex = to_namespace_index(ndd, ndd->ns_current); 2334 dev = create_namespace_pmem(nd_region, nsindex, nd_label); 2335 } 2336 2337 if (IS_ERR(dev)) { 2338 switch (PTR_ERR(dev)) { 2339 case -EAGAIN: 2340 /* skip invalid labels */ 2341 continue; 2342 case -ENODEV: 2343 /* fallthrough to seed creation */ 2344 break; 2345 default: 2346 goto err; 2347 } 2348 } else 2349 devs[count++] = dev; 2350 2351 } 2352 2353 dev_dbg(&nd_region->dev, "discovered %d %s namespace%s\n", 2354 count, is_nd_blk(&nd_region->dev) 2355 ? "blk" : "pmem", count == 1 ? "" : "s"); 2356 2357 if (count == 0) { 2358 /* Publish a zero-sized namespace for userspace to configure. */ 2359 nd_mapping_free_labels(nd_mapping); 2360 2361 devs = kcalloc(2, sizeof(dev), GFP_KERNEL); 2362 if (!devs) 2363 goto err; 2364 if (is_nd_blk(&nd_region->dev)) { 2365 struct nd_namespace_blk *nsblk; 2366 2367 nsblk = kzalloc(sizeof(*nsblk), GFP_KERNEL); 2368 if (!nsblk) 2369 goto err; 2370 dev = &nsblk->common.dev; 2371 dev->type = &namespace_blk_device_type; 2372 } else { 2373 struct nd_namespace_pmem *nspm; 2374 2375 nspm = kzalloc(sizeof(*nspm), GFP_KERNEL); 2376 if (!nspm) 2377 goto err; 2378 dev = &nspm->nsio.common.dev; 2379 dev->type = &namespace_pmem_device_type; 2380 nd_namespace_pmem_set_resource(nd_region, nspm, 0); 2381 } 2382 dev->parent = &nd_region->dev; 2383 devs[count++] = dev; 2384 } else if (is_memory(&nd_region->dev)) { 2385 /* clean unselected labels */ 2386 for (i = 0; i < nd_region->ndr_mappings; i++) { 2387 struct list_head *l, *e; 2388 LIST_HEAD(list); 2389 int j; 2390 2391 nd_mapping = &nd_region->mapping[i]; 2392 if (list_empty(&nd_mapping->labels)) { 2393 WARN_ON(1); 2394 continue; 2395 } 2396 2397 j = count; 2398 list_for_each_safe(l, e, &nd_mapping->labels) { 2399 if (!j--) 2400 break; 2401 list_move_tail(l, &list); 2402 } 2403 nd_mapping_free_labels(nd_mapping); 2404 list_splice_init(&list, &nd_mapping->labels); 2405 } 2406 } 2407 2408 if (count > 1) 2409 sort(devs, count, sizeof(struct device *), cmp_dpa, NULL); 2410 2411 return devs; 2412 2413 err: 2414 if (devs) { 2415 for (i = 0; devs[i]; i++) 2416 if (is_nd_blk(&nd_region->dev)) 2417 namespace_blk_release(devs[i]); 2418 else 2419 namespace_pmem_release(devs[i]); 2420 kfree(devs); 2421 } 2422 return NULL; 2423 } 2424 2425 static struct device **create_namespaces(struct nd_region *nd_region) 2426 { 2427 struct nd_mapping *nd_mapping; 2428 struct device **devs; 2429 int i; 2430 2431 if (nd_region->ndr_mappings == 0) 2432 return NULL; 2433 2434 /* lock down all mappings while we scan labels */ 2435 for (i = 0; i < nd_region->ndr_mappings; i++) { 2436 nd_mapping = &nd_region->mapping[i]; 2437 mutex_lock_nested(&nd_mapping->lock, i); 2438 } 2439 2440 devs = scan_labels(nd_region); 2441 2442 for (i = 0; i < nd_region->ndr_mappings; i++) { 2443 int reverse = nd_region->ndr_mappings - 1 - i; 2444 2445 nd_mapping = &nd_region->mapping[reverse]; 2446 mutex_unlock(&nd_mapping->lock); 2447 } 2448 2449 return devs; 2450 } 2451 2452 static int init_active_labels(struct nd_region *nd_region) 2453 { 2454 int i; 2455 2456 for (i = 0; i < nd_region->ndr_mappings; i++) { 2457 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; 2458 struct nvdimm_drvdata *ndd = to_ndd(nd_mapping); 2459 struct nvdimm *nvdimm = nd_mapping->nvdimm; 2460 struct nd_label_ent *label_ent; 2461 int count, j; 2462 2463 /* 2464 * If the dimm is disabled then we may need to prevent 2465 * the region from being activated. 2466 */ 2467 if (!ndd) { 2468 if (test_bit(NDD_LOCKED, &nvdimm->flags)) 2469 /* fail, label data may be unreadable */; 2470 else if (test_bit(NDD_ALIASING, &nvdimm->flags)) 2471 /* fail, labels needed to disambiguate dpa */; 2472 else 2473 return 0; 2474 2475 dev_err(&nd_region->dev, "%s: is %s, failing probe\n", 2476 dev_name(&nd_mapping->nvdimm->dev), 2477 test_bit(NDD_LOCKED, &nvdimm->flags) 2478 ? "locked" : "disabled"); 2479 return -ENXIO; 2480 } 2481 nd_mapping->ndd = ndd; 2482 atomic_inc(&nvdimm->busy); 2483 get_ndd(ndd); 2484 2485 count = nd_label_active_count(ndd); 2486 dev_dbg(ndd->dev, "count: %d\n", count); 2487 if (!count) 2488 continue; 2489 for (j = 0; j < count; j++) { 2490 struct nd_namespace_label *label; 2491 2492 label_ent = kzalloc(sizeof(*label_ent), GFP_KERNEL); 2493 if (!label_ent) 2494 break; 2495 label = nd_label_active(ndd, j); 2496 label_ent->label = label; 2497 2498 mutex_lock(&nd_mapping->lock); 2499 list_add_tail(&label_ent->list, &nd_mapping->labels); 2500 mutex_unlock(&nd_mapping->lock); 2501 } 2502 2503 if (j >= count) 2504 continue; 2505 2506 mutex_lock(&nd_mapping->lock); 2507 nd_mapping_free_labels(nd_mapping); 2508 mutex_unlock(&nd_mapping->lock); 2509 return -ENOMEM; 2510 } 2511 2512 return 0; 2513 } 2514 2515 int nd_region_register_namespaces(struct nd_region *nd_region, int *err) 2516 { 2517 struct device **devs = NULL; 2518 int i, rc = 0, type; 2519 2520 *err = 0; 2521 nvdimm_bus_lock(&nd_region->dev); 2522 rc = init_active_labels(nd_region); 2523 if (rc) { 2524 nvdimm_bus_unlock(&nd_region->dev); 2525 return rc; 2526 } 2527 2528 type = nd_region_to_nstype(nd_region); 2529 switch (type) { 2530 case ND_DEVICE_NAMESPACE_IO: 2531 devs = create_namespace_io(nd_region); 2532 break; 2533 case ND_DEVICE_NAMESPACE_PMEM: 2534 case ND_DEVICE_NAMESPACE_BLK: 2535 devs = create_namespaces(nd_region); 2536 break; 2537 default: 2538 break; 2539 } 2540 nvdimm_bus_unlock(&nd_region->dev); 2541 2542 if (!devs) 2543 return -ENODEV; 2544 2545 for (i = 0; devs[i]; i++) { 2546 struct device *dev = devs[i]; 2547 int id; 2548 2549 if (type == ND_DEVICE_NAMESPACE_BLK) { 2550 struct nd_namespace_blk *nsblk; 2551 2552 nsblk = to_nd_namespace_blk(dev); 2553 id = ida_simple_get(&nd_region->ns_ida, 0, 0, 2554 GFP_KERNEL); 2555 nsblk->id = id; 2556 } else if (type == ND_DEVICE_NAMESPACE_PMEM) { 2557 struct nd_namespace_pmem *nspm; 2558 2559 nspm = to_nd_namespace_pmem(dev); 2560 id = ida_simple_get(&nd_region->ns_ida, 0, 0, 2561 GFP_KERNEL); 2562 nspm->id = id; 2563 } else 2564 id = i; 2565 2566 if (id < 0) 2567 break; 2568 dev_set_name(dev, "namespace%d.%d", nd_region->id, id); 2569 dev->groups = nd_namespace_attribute_groups; 2570 nd_device_register(dev); 2571 } 2572 if (i) 2573 nd_region->ns_seed = devs[0]; 2574 2575 if (devs[i]) { 2576 int j; 2577 2578 for (j = i; devs[j]; j++) { 2579 struct device *dev = devs[j]; 2580 2581 device_initialize(dev); 2582 put_device(dev); 2583 } 2584 *err = j - i; 2585 /* 2586 * All of the namespaces we tried to register failed, so 2587 * fail region activation. 2588 */ 2589 if (*err == 0) 2590 rc = -ENODEV; 2591 } 2592 kfree(devs); 2593 2594 if (rc == -ENODEV) 2595 return rc; 2596 2597 return i; 2598 } 2599