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