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