Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'memblock-v5.20-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock

Pull memblock updates from Mike Rapoport:

- An optimization in memblock_add_range() to reduce array traversals

- Improvements to the memblock test suite

* tag 'memblock-v5.20-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock:
memblock test: Modify the obsolete description in README
memblock tests: fix compilation errors
memblock tests: change build options to run-time options
memblock tests: remove completed TODO items
memblock tests: set memblock_debug to enable memblock_dbg() messages
memblock tests: add verbose output to memblock tests
memblock tests: Makefile: add arguments to control verbosity
memblock: avoid some repeat when add new range

+920 -370
+11
mm/memblock.c
··· 597 597 type->total_size = size; 598 598 return 0; 599 599 } 600 + 601 + /* 602 + * The worst case is when new range overlaps all existing regions, 603 + * then we'll need type->cnt + 1 empty regions in @type. So if 604 + * type->cnt * 2 + 1 is less than type->max, we know 605 + * that there is enough empty regions in @type, and we can insert 606 + * regions directly. 607 + */ 608 + if (type->cnt * 2 + 1 < type->max) 609 + insert = true; 610 + 600 611 repeat: 601 612 /* 602 613 * The following is executed twice. Once with %false @insert and
+1 -2
tools/testing/memblock/Makefile
··· 45 45 @echo ' clean - Remove generated files and symlinks in the directory' 46 46 @echo '' 47 47 @echo 'Configuration:' 48 + @echo ' make MEMBLOCK_DEBUG=1 - enable memblock_dbg() messages' 48 49 @echo ' make NUMA=1 - simulate enabled NUMA' 49 - @echo ' make MOVABLE_NODE=1 - override `movable_node_is_enabled`' 50 - @echo ' definition to simulate movable NUMA nodes' 51 50 @echo ' make 32BIT_PHYS_ADDR_T=1 - Use 32 bit physical addresses' 52 51 53 52 vpath %.c ../../lib
+14 -3
tools/testing/memblock/README
··· 33 33 34 34 $ make && ./main 35 35 36 - A successful run produces no output. It is also possible to override different 37 - configuration parameters. For example, to simulate enabled NUMA, use: 36 + A successful run produces no output. It is possible to control the behavior 37 + by passing options from command line. For example, to include verbose output, 38 + append the `-v` options when you run the tests: 39 + 40 + $ ./main -v 41 + 42 + This will print information about which functions are being tested and the 43 + number of test cases that passed. 44 + 45 + For the full list of options from command line, see `./main --help`. 46 + 47 + It is also possible to override different configuration parameters to change 48 + the test functions. For example, to simulate enabled NUMA, use: 38 49 39 50 $ make NUMA=1 40 51 41 - For the full list of options, see `make help`. 52 + For the full list of build options, see `make help`. 42 53 43 54 Project structure 44 55 =================
+3 -11
tools/testing/memblock/TODO
··· 1 1 TODO 2 2 ===== 3 3 4 - 1. Add verbose output (e.g., what is being tested and how many tests cases are 5 - passing) 6 - 7 - 2. Add flags to Makefile: 8 - + verbosity level 9 - + enable memblock_dbg() messages (i.e. pass "-D CONFIG_DEBUG_MEMORY_INIT" 10 - flag) 11 - 12 - 3. Add tests trying to memblock_add() or memblock_reserve() 129th region. 4 + 1. Add tests trying to memblock_add() or memblock_reserve() 129th region. 13 5 This will trigger memblock_double_array(), make sure it succeeds. 14 6 *Important:* These tests require valid memory ranges, use dummy physical 15 7 memory block from common.c to implement them. It is also very 16 8 likely that the current MEM_SIZE won't be enough for these 17 9 test cases. Use realloc to adjust the size accordingly. 18 10 19 - 4. Add test cases using this functions (implement them for both directions): 11 + 2. Add test cases using this functions (implement them for both directions): 20 12 + memblock_alloc_raw() 21 13 + memblock_alloc_exact_nid_raw() 22 14 + memblock_alloc_try_nid_raw() 23 15 24 - 5. Add tests for memblock_alloc_node() to check if the correct NUMA node is set 16 + 3. Add tests for memblock_alloc_node() to check if the correct NUMA node is set 25 17 for the new region
+11
tools/testing/memblock/internal.h
··· 2 2 #ifndef _MM_INTERNAL_H 3 3 #define _MM_INTERNAL_H 4 4 5 + /* 6 + * Enable memblock_dbg() messages 7 + */ 8 + #ifdef MEMBLOCK_DEBUG 9 + static int memblock_debug = 1; 10 + #endif 11 + 12 + #define pr_warn_ratelimited(fmt, ...) printf(fmt, ##__VA_ARGS__) 13 + 14 + bool mirrored_kernelcore = false; 15 + 5 16 struct page {}; 6 17 7 18 void memblock_free_pages(struct page *page, unsigned long pfn,
+3 -5
tools/testing/memblock/linux/memory_hotplug.h
··· 7 7 #include <linux/cache.h> 8 8 #include <linux/types.h> 9 9 10 + extern bool movable_node_enabled; 11 + 10 12 static inline bool movable_node_is_enabled(void) 11 13 { 12 - #ifdef MOVABLE_NODE 13 - return true; 14 - #else 15 - return false; 16 - #endif 14 + return movable_node_enabled; 17 15 } 18 16 19 17 #endif
+2
tools/testing/memblock/main.c
··· 3 3 #include "tests/alloc_api.h" 4 4 #include "tests/alloc_helpers_api.h" 5 5 #include "tests/alloc_nid_api.h" 6 + #include "tests/common.h" 6 7 7 8 int main(int argc, char **argv) 8 9 { 10 + parse_args(argc, argv); 9 11 memblock_basic_checks(); 10 12 memblock_alloc_checks(); 11 13 memblock_alloc_helpers_checks();
+5 -5
tools/testing/memblock/scripts/Makefile.include
··· 6 6 CFLAGS += -D CONFIG_NUMA 7 7 endif 8 8 9 - # Simulate movable NUMA memory regions 10 - ifeq ($(MOVABLE_NODE), 1) 11 - CFLAGS += -D MOVABLE_NODE 12 - endif 13 - 14 9 # Use 32 bit physical addresses. 15 10 # Remember to install 32-bit version of dependencies. 16 11 ifeq ($(32BIT_PHYS_ADDR_T), 1) 17 12 CFLAGS += -m32 -U CONFIG_PHYS_ADDR_T_64BIT 18 13 LDFLAGS += -m32 14 + endif 15 + 16 + # Enable memblock_dbg() messages 17 + ifeq ($(MEMBLOCK_DEBUG), 1) 18 + CFLAGS += -D MEMBLOCK_DEBUG 19 19 endif
+154 -71
tools/testing/memblock/tests/alloc_api.c
··· 10 10 struct memblock_region *rgn = &memblock.reserved.regions[0]; 11 11 void *allocated_ptr = NULL; 12 12 13 + PREFIX_PUSH(); 14 + 13 15 phys_addr_t size = SZ_2; 14 16 phys_addr_t expected_start; 15 17 ··· 21 19 22 20 allocated_ptr = memblock_alloc(size, SMP_CACHE_BYTES); 23 21 24 - assert(allocated_ptr); 25 - assert(rgn->size == size); 26 - assert(rgn->base == expected_start); 22 + ASSERT_NE(allocated_ptr, NULL); 23 + ASSERT_EQ(rgn->size, size); 24 + ASSERT_EQ(rgn->base, expected_start); 27 25 28 - assert(memblock.reserved.cnt == 1); 29 - assert(memblock.reserved.total_size == size); 26 + ASSERT_EQ(memblock.reserved.cnt, 1); 27 + ASSERT_EQ(memblock.reserved.total_size, size); 28 + 29 + test_pass_pop(); 30 30 31 31 return 0; 32 32 } ··· 59 55 struct region r1; 60 56 void *allocated_ptr = NULL; 61 57 58 + PREFIX_PUSH(); 59 + 62 60 phys_addr_t r2_size = SZ_16; 63 61 /* Use custom alignment */ 64 62 phys_addr_t alignment = SMP_CACHE_BYTES * 2; ··· 79 73 80 74 allocated_ptr = memblock_alloc(r2_size, alignment); 81 75 82 - assert(allocated_ptr); 83 - assert(rgn1->size == r1.size); 84 - assert(rgn1->base == r1.base); 76 + ASSERT_NE(allocated_ptr, NULL); 77 + ASSERT_EQ(rgn1->size, r1.size); 78 + ASSERT_EQ(rgn1->base, r1.base); 85 79 86 - assert(rgn2->size == r2_size); 87 - assert(rgn2->base == expected_start); 80 + ASSERT_EQ(rgn2->size, r2_size); 81 + ASSERT_EQ(rgn2->base, expected_start); 88 82 89 - assert(memblock.reserved.cnt == 2); 90 - assert(memblock.reserved.total_size == total_size); 83 + ASSERT_EQ(memblock.reserved.cnt, 2); 84 + ASSERT_EQ(memblock.reserved.total_size, total_size); 85 + 86 + test_pass_pop(); 91 87 92 88 return 0; 93 89 } ··· 109 101 struct memblock_region *rgn = &memblock.reserved.regions[0]; 110 102 void *allocated_ptr = NULL; 111 103 104 + PREFIX_PUSH(); 105 + 112 106 /* 113 107 * The first region ends at the aligned address to test region merging 114 108 */ ··· 124 114 125 115 allocated_ptr = memblock_alloc(r2_size, SMP_CACHE_BYTES); 126 116 127 - assert(allocated_ptr); 128 - assert(rgn->size == total_size); 129 - assert(rgn->base == memblock_end_of_DRAM() - total_size); 117 + ASSERT_NE(allocated_ptr, NULL); 118 + ASSERT_EQ(rgn->size, total_size); 119 + ASSERT_EQ(rgn->base, memblock_end_of_DRAM() - total_size); 130 120 131 - assert(memblock.reserved.cnt == 1); 132 - assert(memblock.reserved.total_size == total_size); 121 + ASSERT_EQ(memblock.reserved.cnt, 1); 122 + ASSERT_EQ(memblock.reserved.total_size, total_size); 123 + 124 + test_pass_pop(); 133 125 134 126 return 0; 135 127 } ··· 153 141 struct region r1; 154 142 void *allocated_ptr = NULL; 155 143 144 + PREFIX_PUSH(); 145 + 156 146 phys_addr_t r2_size = SZ_512; 157 147 phys_addr_t total_size; 158 148 ··· 172 158 173 159 allocated_ptr = memblock_alloc(r2_size, SMP_CACHE_BYTES); 174 160 175 - assert(allocated_ptr); 176 - assert(rgn->size == total_size); 177 - assert(rgn->base == r1.base - r2_size); 161 + ASSERT_NE(allocated_ptr, NULL); 162 + ASSERT_EQ(rgn->size, total_size); 163 + ASSERT_EQ(rgn->base, r1.base - r2_size); 178 164 179 - assert(memblock.reserved.cnt == 1); 180 - assert(memblock.reserved.total_size == total_size); 165 + ASSERT_EQ(memblock.reserved.cnt, 1); 166 + ASSERT_EQ(memblock.reserved.total_size, total_size); 167 + 168 + test_pass_pop(); 181 169 182 170 return 0; 183 171 } ··· 202 186 struct region r1, r2; 203 187 void *allocated_ptr = NULL; 204 188 189 + PREFIX_PUSH(); 190 + 205 191 phys_addr_t r3_size = SZ_1K; 206 192 phys_addr_t total_size; 207 193 ··· 222 204 223 205 allocated_ptr = memblock_alloc(r3_size, SMP_CACHE_BYTES); 224 206 225 - assert(allocated_ptr); 226 - assert(rgn->size == r2.size + r3_size); 227 - assert(rgn->base == r2.base - r3_size); 207 + ASSERT_NE(allocated_ptr, NULL); 208 + ASSERT_EQ(rgn->size, r2.size + r3_size); 209 + ASSERT_EQ(rgn->base, r2.base - r3_size); 228 210 229 - assert(memblock.reserved.cnt == 2); 230 - assert(memblock.reserved.total_size == total_size); 211 + ASSERT_EQ(memblock.reserved.cnt, 2); 212 + ASSERT_EQ(memblock.reserved.total_size, total_size); 213 + 214 + test_pass_pop(); 231 215 232 216 return 0; 233 217 } ··· 250 230 struct memblock_region *rgn = &memblock.reserved.regions[0]; 251 231 struct region r1, r2; 252 232 void *allocated_ptr = NULL; 233 + 234 + PREFIX_PUSH(); 253 235 254 236 phys_addr_t gap_size = SMP_CACHE_BYTES; 255 237 phys_addr_t r3_size = SZ_64; ··· 276 254 277 255 allocated_ptr = memblock_alloc(r3_size, SMP_CACHE_BYTES); 278 256 279 - assert(allocated_ptr); 280 - assert(rgn->size == total_size); 281 - assert(rgn->base == r1.base - r2.size - r3_size); 257 + ASSERT_NE(allocated_ptr, NULL); 258 + ASSERT_EQ(rgn->size, total_size); 259 + ASSERT_EQ(rgn->base, r1.base - r2.size - r3_size); 282 260 283 - assert(memblock.reserved.cnt == 1); 284 - assert(memblock.reserved.total_size == total_size); 261 + ASSERT_EQ(memblock.reserved.cnt, 1); 262 + ASSERT_EQ(memblock.reserved.total_size, total_size); 263 + 264 + test_pass_pop(); 285 265 286 266 return 0; 287 267 } ··· 305 281 { 306 282 void *allocated_ptr = NULL; 307 283 284 + PREFIX_PUSH(); 285 + 308 286 phys_addr_t region_size = SZ_1K; 309 287 phys_addr_t gap_size = SZ_256; 310 288 phys_addr_t region_end; ··· 322 296 323 297 allocated_ptr = memblock_alloc(region_size, SMP_CACHE_BYTES); 324 298 325 - assert(!allocated_ptr); 299 + ASSERT_EQ(allocated_ptr, NULL); 300 + 301 + test_pass_pop(); 326 302 327 303 return 0; 328 304 } ··· 337 309 { 338 310 void *allocated_ptr = NULL; 339 311 312 + PREFIX_PUSH(); 313 + 340 314 setup_memblock(); 341 315 342 316 /* Simulate full memory */ ··· 346 316 347 317 allocated_ptr = memblock_alloc(SZ_256, SMP_CACHE_BYTES); 348 318 349 - assert(!allocated_ptr); 319 + ASSERT_EQ(allocated_ptr, NULL); 320 + 321 + test_pass_pop(); 350 322 351 323 return 0; 352 324 } ··· 370 338 { 371 339 void *allocated_ptr = NULL; 372 340 341 + PREFIX_PUSH(); 342 + 373 343 setup_memblock(); 374 344 375 345 phys_addr_t available_size = SZ_256; ··· 382 348 383 349 allocated_ptr = memblock_alloc(SZ_1K, SMP_CACHE_BYTES); 384 350 385 - assert(!allocated_ptr); 351 + ASSERT_EQ(allocated_ptr, NULL); 352 + 353 + test_pass_pop(); 386 354 387 355 return 0; 388 356 } ··· 405 369 struct memblock_region *rgn = &memblock.reserved.regions[0]; 406 370 void *allocated_ptr = NULL; 407 371 372 + PREFIX_PUSH(); 373 + 408 374 phys_addr_t available_size = SZ_256; 409 375 phys_addr_t reserved_size = MEM_SIZE - available_size; 410 376 ··· 417 379 418 380 allocated_ptr = memblock_alloc(available_size, SMP_CACHE_BYTES); 419 381 420 - assert(allocated_ptr); 421 - assert(rgn->size == MEM_SIZE); 422 - assert(rgn->base == memblock_start_of_DRAM()); 382 + ASSERT_NE(allocated_ptr, NULL); 383 + ASSERT_EQ(rgn->size, MEM_SIZE); 384 + ASSERT_EQ(rgn->base, memblock_start_of_DRAM()); 423 385 424 - assert(memblock.reserved.cnt == 1); 425 - assert(memblock.reserved.total_size == MEM_SIZE); 386 + ASSERT_EQ(memblock.reserved.cnt, 1); 387 + ASSERT_EQ(memblock.reserved.total_size, MEM_SIZE); 388 + 389 + test_pass_pop(); 426 390 427 391 return 0; 428 392 } ··· 439 399 struct memblock_region *rgn = &memblock.reserved.regions[0]; 440 400 void *allocated_ptr = NULL; 441 401 402 + PREFIX_PUSH(); 403 + 442 404 reset_memblock_regions(); 443 405 444 406 allocated_ptr = memblock_alloc(SZ_1K, SMP_CACHE_BYTES); 445 407 446 - assert(!allocated_ptr); 447 - assert(rgn->size == 0); 448 - assert(rgn->base == 0); 449 - assert(memblock.reserved.total_size == 0); 408 + ASSERT_EQ(allocated_ptr, NULL); 409 + ASSERT_EQ(rgn->size, 0); 410 + ASSERT_EQ(rgn->base, 0); 411 + ASSERT_EQ(memblock.reserved.total_size, 0); 412 + 413 + test_pass_pop(); 450 414 451 415 return 0; 452 416 } ··· 465 421 struct memblock_region *rgn = &memblock.reserved.regions[0]; 466 422 void *allocated_ptr = NULL; 467 423 424 + PREFIX_PUSH(); 425 + 468 426 setup_memblock(); 469 427 470 428 allocated_ptr = memblock_alloc(SZ_2, SMP_CACHE_BYTES); 471 429 472 - assert(allocated_ptr); 473 - assert(rgn->size == SZ_2); 474 - assert(rgn->base == memblock_start_of_DRAM()); 430 + ASSERT_NE(allocated_ptr, NULL); 431 + ASSERT_EQ(rgn->size, SZ_2); 432 + ASSERT_EQ(rgn->base, memblock_start_of_DRAM()); 475 433 476 - assert(memblock.reserved.cnt == 1); 477 - assert(memblock.reserved.total_size == SZ_2); 434 + ASSERT_EQ(memblock.reserved.cnt, 1); 435 + ASSERT_EQ(memblock.reserved.total_size, SZ_2); 436 + 437 + test_pass_pop(); 478 438 479 439 return 0; 480 440 } ··· 507 459 struct region r1; 508 460 void *allocated_ptr = NULL; 509 461 462 + PREFIX_PUSH(); 463 + 510 464 phys_addr_t r2_size = SZ_16; 511 465 /* Use custom alignment */ 512 466 phys_addr_t alignment = SMP_CACHE_BYTES * 2; ··· 527 477 528 478 allocated_ptr = memblock_alloc(r2_size, alignment); 529 479 530 - assert(allocated_ptr); 480 + ASSERT_NE(allocated_ptr, NULL); 531 481 532 - assert(rgn1->size == r1.size); 533 - assert(rgn1->base == r1.base); 482 + ASSERT_EQ(rgn1->size, r1.size); 483 + ASSERT_EQ(rgn1->base, r1.base); 534 484 535 - assert(rgn2->size == r2_size); 536 - assert(rgn2->base == expected_start); 485 + ASSERT_EQ(rgn2->size, r2_size); 486 + ASSERT_EQ(rgn2->base, expected_start); 537 487 538 - assert(memblock.reserved.cnt == 2); 539 - assert(memblock.reserved.total_size == total_size); 488 + ASSERT_EQ(memblock.reserved.cnt, 2); 489 + ASSERT_EQ(memblock.reserved.total_size, total_size); 490 + 491 + test_pass_pop(); 540 492 541 493 return 0; 542 494 } ··· 558 506 struct memblock_region *rgn = &memblock.reserved.regions[0]; 559 507 void *allocated_ptr = NULL; 560 508 509 + PREFIX_PUSH(); 510 + 561 511 phys_addr_t r1_size = SZ_512; 562 512 phys_addr_t r2_size = SZ_128; 563 513 phys_addr_t total_size = r1_size + r2_size; ··· 570 516 571 517 allocated_ptr = memblock_alloc(r1_size, SMP_CACHE_BYTES); 572 518 573 - assert(allocated_ptr); 574 - assert(rgn->size == total_size); 575 - assert(rgn->base == memblock_start_of_DRAM()); 519 + ASSERT_NE(allocated_ptr, NULL); 520 + ASSERT_EQ(rgn->size, total_size); 521 + ASSERT_EQ(rgn->base, memblock_start_of_DRAM()); 576 522 577 - assert(memblock.reserved.cnt == 1); 578 - assert(memblock.reserved.total_size == total_size); 523 + ASSERT_EQ(memblock.reserved.cnt, 1); 524 + ASSERT_EQ(memblock.reserved.total_size, total_size); 525 + 526 + test_pass_pop(); 579 527 580 528 return 0; 581 529 } ··· 598 542 struct region r1; 599 543 void *allocated_ptr = NULL; 600 544 545 + PREFIX_PUSH(); 546 + 601 547 phys_addr_t r2_size = SZ_512; 602 548 phys_addr_t total_size; 603 549 ··· 617 559 618 560 allocated_ptr = memblock_alloc(r2_size, SMP_CACHE_BYTES); 619 561 620 - assert(allocated_ptr); 621 - assert(rgn->size == total_size); 622 - assert(rgn->base == r1.base); 562 + ASSERT_NE(allocated_ptr, NULL); 563 + ASSERT_EQ(rgn->size, total_size); 564 + ASSERT_EQ(rgn->base, r1.base); 623 565 624 - assert(memblock.reserved.cnt == 1); 625 - assert(memblock.reserved.total_size == total_size); 566 + ASSERT_EQ(memblock.reserved.cnt, 1); 567 + ASSERT_EQ(memblock.reserved.total_size, total_size); 568 + 569 + test_pass_pop(); 626 570 627 571 return 0; 628 572 } ··· 648 588 struct region r1, r2; 649 589 void *allocated_ptr = NULL; 650 590 591 + PREFIX_PUSH(); 592 + 651 593 phys_addr_t r3_size = SZ_1K; 652 594 phys_addr_t total_size; 653 595 ··· 668 606 669 607 allocated_ptr = memblock_alloc(r3_size, SMP_CACHE_BYTES); 670 608 671 - assert(allocated_ptr); 672 - assert(rgn->size == r2.size + r3_size); 673 - assert(rgn->base == r2.base); 609 + ASSERT_NE(allocated_ptr, NULL); 610 + ASSERT_EQ(rgn->size, r2.size + r3_size); 611 + ASSERT_EQ(rgn->base, r2.base); 674 612 675 - assert(memblock.reserved.cnt == 2); 676 - assert(memblock.reserved.total_size == total_size); 613 + ASSERT_EQ(memblock.reserved.cnt, 2); 614 + ASSERT_EQ(memblock.reserved.total_size, total_size); 615 + 616 + test_pass_pop(); 677 617 678 618 return 0; 679 619 } ··· 683 619 /* Test case wrappers */ 684 620 static int alloc_simple_check(void) 685 621 { 622 + test_print("\tRunning %s...\n", __func__); 686 623 memblock_set_bottom_up(false); 687 624 alloc_top_down_simple_check(); 688 625 memblock_set_bottom_up(true); ··· 694 629 695 630 static int alloc_disjoint_check(void) 696 631 { 632 + test_print("\tRunning %s...\n", __func__); 697 633 memblock_set_bottom_up(false); 698 634 alloc_top_down_disjoint_check(); 699 635 memblock_set_bottom_up(true); ··· 705 639 706 640 static int alloc_before_check(void) 707 641 { 642 + test_print("\tRunning %s...\n", __func__); 708 643 memblock_set_bottom_up(false); 709 644 alloc_top_down_before_check(); 710 645 memblock_set_bottom_up(true); ··· 716 649 717 650 static int alloc_after_check(void) 718 651 { 652 + test_print("\tRunning %s...\n", __func__); 719 653 memblock_set_bottom_up(false); 720 654 alloc_top_down_after_check(); 721 655 memblock_set_bottom_up(true); ··· 727 659 728 660 static int alloc_in_between_check(void) 729 661 { 662 + test_print("\tRunning %s...\n", __func__); 730 663 memblock_set_bottom_up(false); 731 664 alloc_in_between_generic_check(); 732 665 memblock_set_bottom_up(true); ··· 738 669 739 670 static int alloc_second_fit_check(void) 740 671 { 672 + test_print("\tRunning %s...\n", __func__); 741 673 memblock_set_bottom_up(false); 742 674 alloc_top_down_second_fit_check(); 743 675 memblock_set_bottom_up(true); ··· 749 679 750 680 static int alloc_small_gaps_check(void) 751 681 { 682 + test_print("\tRunning %s...\n", __func__); 752 683 memblock_set_bottom_up(false); 753 684 alloc_small_gaps_generic_check(); 754 685 memblock_set_bottom_up(true); ··· 760 689 761 690 static int alloc_all_reserved_check(void) 762 691 { 692 + test_print("\tRunning %s...\n", __func__); 763 693 memblock_set_bottom_up(false); 764 694 alloc_all_reserved_generic_check(); 765 695 memblock_set_bottom_up(true); ··· 771 699 772 700 static int alloc_no_space_check(void) 773 701 { 702 + test_print("\tRunning %s...\n", __func__); 774 703 memblock_set_bottom_up(false); 775 704 alloc_no_space_generic_check(); 776 705 memblock_set_bottom_up(true); ··· 782 709 783 710 static int alloc_limited_space_check(void) 784 711 { 712 + test_print("\tRunning %s...\n", __func__); 785 713 memblock_set_bottom_up(false); 786 714 alloc_limited_space_generic_check(); 787 715 memblock_set_bottom_up(true); ··· 793 719 794 720 static int alloc_no_memory_check(void) 795 721 { 722 + test_print("\tRunning %s...\n", __func__); 796 723 memblock_set_bottom_up(false); 797 724 alloc_no_memory_generic_check(); 798 725 memblock_set_bottom_up(true); ··· 804 729 805 730 int memblock_alloc_checks(void) 806 731 { 732 + const char *func_testing = "memblock_alloc"; 733 + 734 + prefix_reset(); 735 + prefix_push(func_testing); 736 + test_print("Running %s tests...\n", func_testing); 737 + 807 738 reset_memblock_attributes(); 808 739 dummy_physical_memory_init(); 809 740 ··· 826 745 alloc_no_memory_check(); 827 746 828 747 dummy_physical_memory_cleanup(); 748 + 749 + prefix_pop(); 829 750 830 751 return 0; 831 752 }
+87 -42
tools/testing/memblock/tests/alloc_helpers_api.c
··· 21 21 void *allocated_ptr = NULL; 22 22 char *b; 23 23 24 + PREFIX_PUSH(); 25 + 24 26 phys_addr_t size = SZ_16; 25 27 phys_addr_t min_addr; 26 28 ··· 33 31 allocated_ptr = memblock_alloc_from(size, SMP_CACHE_BYTES, min_addr); 34 32 b = (char *)allocated_ptr; 35 33 36 - assert(allocated_ptr); 37 - assert(*b == 0); 34 + ASSERT_NE(allocated_ptr, NULL); 35 + ASSERT_EQ(*b, 0); 38 36 39 - assert(rgn->size == size); 40 - assert(rgn->base == min_addr); 37 + ASSERT_EQ(rgn->size, size); 38 + ASSERT_EQ(rgn->base, min_addr); 41 39 42 - assert(memblock.reserved.cnt == 1); 43 - assert(memblock.reserved.total_size == size); 40 + ASSERT_EQ(memblock.reserved.cnt, 1); 41 + ASSERT_EQ(memblock.reserved.total_size, size); 42 + 43 + test_pass_pop(); 44 44 45 45 return 0; 46 46 } ··· 68 64 void *allocated_ptr = NULL; 69 65 char *b; 70 66 67 + PREFIX_PUSH(); 68 + 71 69 phys_addr_t size = SZ_32; 72 70 phys_addr_t min_addr; 73 71 ··· 81 75 allocated_ptr = memblock_alloc_from(size, SMP_CACHE_BYTES, min_addr); 82 76 b = (char *)allocated_ptr; 83 77 84 - assert(allocated_ptr); 85 - assert(*b == 0); 78 + ASSERT_NE(allocated_ptr, NULL); 79 + ASSERT_EQ(*b, 0); 86 80 87 - assert(rgn->size == size); 88 - assert(rgn->base == memblock_end_of_DRAM() - SMP_CACHE_BYTES); 81 + ASSERT_EQ(rgn->size, size); 82 + ASSERT_EQ(rgn->base, memblock_end_of_DRAM() - SMP_CACHE_BYTES); 89 83 90 - assert(memblock.reserved.cnt == 1); 91 - assert(memblock.reserved.total_size == size); 84 + ASSERT_EQ(memblock.reserved.cnt, 1); 85 + ASSERT_EQ(memblock.reserved.total_size, size); 86 + 87 + test_pass_pop(); 92 88 93 89 return 0; 94 90 } ··· 118 110 struct memblock_region *rgn = &memblock.reserved.regions[0]; 119 111 void *allocated_ptr = NULL; 120 112 113 + PREFIX_PUSH(); 114 + 121 115 phys_addr_t size = SZ_32; 122 116 phys_addr_t min_addr; 123 117 ··· 130 120 131 121 allocated_ptr = memblock_alloc_from(size, SMP_CACHE_BYTES, min_addr); 132 122 133 - assert(allocated_ptr); 134 - assert(rgn->size == size); 135 - assert(rgn->base == memblock_end_of_DRAM() - SMP_CACHE_BYTES); 123 + ASSERT_NE(allocated_ptr, NULL); 124 + ASSERT_EQ(rgn->size, size); 125 + ASSERT_EQ(rgn->base, memblock_end_of_DRAM() - SMP_CACHE_BYTES); 136 126 137 - assert(memblock.reserved.cnt == 1); 138 - assert(memblock.reserved.total_size == size); 127 + ASSERT_EQ(memblock.reserved.cnt, 1); 128 + ASSERT_EQ(memblock.reserved.total_size, size); 129 + 130 + test_pass_pop(); 139 131 140 132 return 0; 141 133 } ··· 163 151 struct memblock_region *rgn = &memblock.reserved.regions[0]; 164 152 void *allocated_ptr = NULL; 165 153 154 + PREFIX_PUSH(); 155 + 166 156 phys_addr_t r1_size = SZ_64; 167 157 phys_addr_t r2_size = SZ_2; 168 158 phys_addr_t total_size = r1_size + r2_size; ··· 179 165 180 166 allocated_ptr = memblock_alloc_from(r1_size, SMP_CACHE_BYTES, min_addr); 181 167 182 - assert(allocated_ptr); 183 - assert(rgn->base == min_addr - r1_size); 184 - assert(rgn->size == total_size); 168 + ASSERT_NE(allocated_ptr, NULL); 169 + ASSERT_EQ(rgn->base, min_addr - r1_size); 170 + ASSERT_EQ(rgn->size, total_size); 185 171 186 - assert(memblock.reserved.cnt == 1); 187 - assert(memblock.reserved.total_size == total_size); 172 + ASSERT_EQ(memblock.reserved.cnt, 1); 173 + ASSERT_EQ(memblock.reserved.total_size, total_size); 174 + 175 + test_pass_pop(); 188 176 189 177 return 0; 190 178 } ··· 202 186 struct memblock_region *rgn = &memblock.reserved.regions[0]; 203 187 void *allocated_ptr = NULL; 204 188 189 + PREFIX_PUSH(); 190 + 205 191 phys_addr_t r1_size = SZ_64; 206 192 phys_addr_t min_addr; 207 193 phys_addr_t start_addr; ··· 217 199 218 200 allocated_ptr = memblock_alloc_from(r1_size, SMP_CACHE_BYTES, min_addr); 219 201 220 - assert(allocated_ptr); 221 - assert(rgn->base == start_addr); 222 - assert(rgn->size == MEM_SIZE); 202 + ASSERT_NE(allocated_ptr, NULL); 203 + ASSERT_EQ(rgn->base, start_addr); 204 + ASSERT_EQ(rgn->size, MEM_SIZE); 223 205 224 - assert(memblock.reserved.cnt == 1); 225 - assert(memblock.reserved.total_size == MEM_SIZE); 206 + ASSERT_EQ(memblock.reserved.cnt, 1); 207 + ASSERT_EQ(memblock.reserved.total_size, MEM_SIZE); 208 + 209 + test_pass_pop(); 226 210 227 211 return 0; 228 212 } ··· 250 230 struct memblock_region *rgn = &memblock.reserved.regions[0]; 251 231 void *allocated_ptr = NULL; 252 232 233 + PREFIX_PUSH(); 234 + 253 235 phys_addr_t size = SZ_32; 254 236 phys_addr_t min_addr; 255 237 ··· 262 240 263 241 allocated_ptr = memblock_alloc_from(size, SMP_CACHE_BYTES, min_addr); 264 242 265 - assert(allocated_ptr); 266 - assert(rgn->size == size); 267 - assert(rgn->base == memblock_start_of_DRAM()); 243 + ASSERT_NE(allocated_ptr, NULL); 244 + ASSERT_EQ(rgn->size, size); 245 + ASSERT_EQ(rgn->base, memblock_start_of_DRAM()); 268 246 269 - assert(memblock.reserved.cnt == 1); 270 - assert(memblock.reserved.total_size == size); 247 + ASSERT_EQ(memblock.reserved.cnt, 1); 248 + ASSERT_EQ(memblock.reserved.total_size, size); 249 + 250 + test_pass_pop(); 271 251 272 252 return 0; 273 253 } ··· 294 270 struct memblock_region *rgn = &memblock.reserved.regions[0]; 295 271 void *allocated_ptr = NULL; 296 272 273 + PREFIX_PUSH(); 274 + 297 275 phys_addr_t r1_size = SZ_64; 298 276 phys_addr_t min_addr; 299 277 phys_addr_t r2_size; ··· 310 284 311 285 allocated_ptr = memblock_alloc_from(r1_size, SMP_CACHE_BYTES, min_addr); 312 286 313 - assert(allocated_ptr); 314 - assert(rgn->base == memblock_start_of_DRAM()); 315 - assert(rgn->size == r1_size); 287 + ASSERT_NE(allocated_ptr, NULL); 288 + ASSERT_EQ(rgn->base, memblock_start_of_DRAM()); 289 + ASSERT_EQ(rgn->size, r1_size); 316 290 317 - assert(memblock.reserved.cnt == 2); 318 - assert(memblock.reserved.total_size == r1_size + r2_size); 291 + ASSERT_EQ(memblock.reserved.cnt, 2); 292 + ASSERT_EQ(memblock.reserved.total_size, r1_size + r2_size); 293 + 294 + test_pass_pop(); 319 295 320 296 return 0; 321 297 } ··· 332 304 struct memblock_region *rgn = &memblock.reserved.regions[0]; 333 305 void *allocated_ptr = NULL; 334 306 307 + PREFIX_PUSH(); 308 + 335 309 phys_addr_t r1_size = SZ_64; 336 310 phys_addr_t min_addr; 337 311 phys_addr_t start_addr; ··· 345 315 346 316 allocated_ptr = memblock_alloc_from(r1_size, SMP_CACHE_BYTES, min_addr); 347 317 348 - assert(allocated_ptr); 349 - assert(rgn->base == start_addr); 350 - assert(rgn->size == r1_size); 318 + ASSERT_NE(allocated_ptr, NULL); 319 + ASSERT_EQ(rgn->base, start_addr); 320 + ASSERT_EQ(rgn->size, r1_size); 351 321 352 - assert(memblock.reserved.cnt == 1); 353 - assert(memblock.reserved.total_size == r1_size); 322 + ASSERT_EQ(memblock.reserved.cnt, 1); 323 + ASSERT_EQ(memblock.reserved.total_size, r1_size); 324 + 325 + test_pass_pop(); 354 326 355 327 return 0; 356 328 } ··· 360 328 /* Test case wrappers */ 361 329 static int alloc_from_simple_check(void) 362 330 { 331 + test_print("\tRunning %s...\n", __func__); 363 332 memblock_set_bottom_up(false); 364 333 alloc_from_simple_generic_check(); 365 334 memblock_set_bottom_up(true); ··· 371 338 372 339 static int alloc_from_misaligned_check(void) 373 340 { 341 + test_print("\tRunning %s...\n", __func__); 374 342 memblock_set_bottom_up(false); 375 343 alloc_from_misaligned_generic_check(); 376 344 memblock_set_bottom_up(true); ··· 382 348 383 349 static int alloc_from_high_addr_check(void) 384 350 { 351 + test_print("\tRunning %s...\n", __func__); 385 352 memblock_set_bottom_up(false); 386 353 alloc_from_top_down_high_addr_check(); 387 354 memblock_set_bottom_up(true); ··· 393 358 394 359 static int alloc_from_no_space_above_check(void) 395 360 { 361 + test_print("\tRunning %s...\n", __func__); 396 362 memblock_set_bottom_up(false); 397 363 alloc_from_top_down_no_space_above_check(); 398 364 memblock_set_bottom_up(true); ··· 404 368 405 369 static int alloc_from_min_addr_cap_check(void) 406 370 { 371 + test_print("\tRunning %s...\n", __func__); 407 372 memblock_set_bottom_up(false); 408 373 alloc_from_top_down_min_addr_cap_check(); 409 374 memblock_set_bottom_up(true); ··· 415 378 416 379 int memblock_alloc_helpers_checks(void) 417 380 { 381 + const char *func_testing = "memblock_alloc_from"; 382 + 383 + prefix_reset(); 384 + prefix_push(func_testing); 385 + test_print("Running %s tests...\n", func_testing); 386 + 418 387 reset_memblock_attributes(); 419 388 dummy_physical_memory_init(); 420 389 ··· 431 388 alloc_from_min_addr_cap_check(); 432 389 433 390 dummy_physical_memory_cleanup(); 391 + 392 + prefix_pop(); 434 393 435 394 return 0; 436 395 }
+226 -125
tools/testing/memblock/tests/alloc_nid_api.c
··· 21 21 void *allocated_ptr = NULL; 22 22 char *b; 23 23 24 + PREFIX_PUSH(); 25 + 24 26 phys_addr_t size = SZ_128; 25 27 phys_addr_t min_addr; 26 28 phys_addr_t max_addr; ··· 38 36 b = (char *)allocated_ptr; 39 37 rgn_end = rgn->base + rgn->size; 40 38 41 - assert(allocated_ptr); 42 - assert(*b == 0); 39 + ASSERT_NE(allocated_ptr, NULL); 40 + ASSERT_EQ(*b, 0); 43 41 44 - assert(rgn->size == size); 45 - assert(rgn->base == max_addr - size); 46 - assert(rgn_end == max_addr); 42 + ASSERT_EQ(rgn->size, size); 43 + ASSERT_EQ(rgn->base, max_addr - size); 44 + ASSERT_EQ(rgn_end, max_addr); 47 45 48 - assert(memblock.reserved.cnt == 1); 49 - assert(memblock.reserved.total_size == size); 46 + ASSERT_EQ(memblock.reserved.cnt, 1); 47 + ASSERT_EQ(memblock.reserved.total_size, size); 48 + 49 + test_pass_pop(); 50 50 51 51 return 0; 52 52 } ··· 76 72 void *allocated_ptr = NULL; 77 73 char *b; 78 74 75 + PREFIX_PUSH(); 76 + 79 77 phys_addr_t size = SZ_128; 80 78 phys_addr_t misalign = SZ_2; 81 79 phys_addr_t min_addr; ··· 94 88 b = (char *)allocated_ptr; 95 89 rgn_end = rgn->base + rgn->size; 96 90 97 - assert(allocated_ptr); 98 - assert(*b == 0); 91 + ASSERT_NE(allocated_ptr, NULL); 92 + ASSERT_EQ(*b, 0); 99 93 100 - assert(rgn->size == size); 101 - assert(rgn->base == max_addr - size - misalign); 102 - assert(rgn_end < max_addr); 94 + ASSERT_EQ(rgn->size, size); 95 + ASSERT_EQ(rgn->base, max_addr - size - misalign); 96 + ASSERT_LT(rgn_end, max_addr); 103 97 104 - assert(memblock.reserved.cnt == 1); 105 - assert(memblock.reserved.total_size == size); 98 + ASSERT_EQ(memblock.reserved.cnt, 1); 99 + ASSERT_EQ(memblock.reserved.total_size, size); 100 + 101 + test_pass_pop(); 106 102 107 103 return 0; 108 104 } ··· 130 122 void *allocated_ptr = NULL; 131 123 char *b; 132 124 125 + PREFIX_PUSH(); 126 + 133 127 phys_addr_t size = SZ_1K; 134 128 phys_addr_t min_addr; 135 129 phys_addr_t max_addr; ··· 147 137 b = (char *)allocated_ptr; 148 138 rgn_end = rgn->base + rgn->size; 149 139 150 - assert(allocated_ptr); 151 - assert(*b == 0); 140 + ASSERT_NE(allocated_ptr, NULL); 141 + ASSERT_EQ(*b, 0); 152 142 153 - assert(rgn->size == size); 154 - assert(rgn->base == min_addr); 155 - assert(rgn_end == max_addr); 143 + ASSERT_EQ(rgn->size, size); 144 + ASSERT_EQ(rgn->base, min_addr); 145 + ASSERT_EQ(rgn_end, max_addr); 156 146 157 - assert(memblock.reserved.cnt == 1); 158 - assert(memblock.reserved.total_size == size); 147 + ASSERT_EQ(memblock.reserved.cnt, 1); 148 + ASSERT_EQ(memblock.reserved.total_size, size); 149 + 150 + test_pass_pop(); 159 151 160 152 return 0; 161 153 } ··· 185 173 void *allocated_ptr = NULL; 186 174 char *b; 187 175 176 + PREFIX_PUSH(); 177 + 188 178 phys_addr_t size = SZ_256; 189 179 phys_addr_t min_addr; 190 180 phys_addr_t max_addr; ··· 200 186 min_addr, max_addr, NUMA_NO_NODE); 201 187 b = (char *)allocated_ptr; 202 188 203 - assert(allocated_ptr); 204 - assert(*b == 0); 189 + ASSERT_NE(allocated_ptr, NULL); 190 + ASSERT_EQ(*b, 0); 205 191 206 - assert(rgn->size == size); 207 - assert(rgn->base == max_addr - size); 192 + ASSERT_EQ(rgn->size, size); 193 + ASSERT_EQ(rgn->base, max_addr - size); 208 194 209 - assert(memblock.reserved.cnt == 1); 210 - assert(memblock.reserved.total_size == size); 195 + ASSERT_EQ(memblock.reserved.cnt, 1); 196 + ASSERT_EQ(memblock.reserved.total_size, size); 197 + 198 + test_pass_pop(); 211 199 212 200 return 0; 213 201 } ··· 238 222 { 239 223 void *allocated_ptr = NULL; 240 224 225 + PREFIX_PUSH(); 226 + 241 227 phys_addr_t size = SZ_1K; 242 228 phys_addr_t min_addr; 243 229 phys_addr_t max_addr; ··· 252 234 allocated_ptr = memblock_alloc_try_nid(size, SMP_CACHE_BYTES, 253 235 min_addr, max_addr, NUMA_NO_NODE); 254 236 255 - assert(!allocated_ptr); 237 + ASSERT_EQ(allocated_ptr, NULL); 238 + 239 + test_pass_pop(); 256 240 257 241 return 0; 258 242 } ··· 279 259 void *allocated_ptr = NULL; 280 260 char *b; 281 261 262 + PREFIX_PUSH(); 263 + 282 264 phys_addr_t r1_size = SZ_128; 283 265 phys_addr_t r2_size = SZ_64; 284 266 phys_addr_t total_size = r1_size + r2_size; ··· 300 278 min_addr, max_addr, NUMA_NO_NODE); 301 279 b = (char *)allocated_ptr; 302 280 303 - assert(allocated_ptr); 304 - assert(*b == 0); 281 + ASSERT_NE(allocated_ptr, NULL); 282 + ASSERT_EQ(*b, 0); 305 283 306 - assert(rgn->size == total_size); 307 - assert(rgn->base == reserved_base); 284 + ASSERT_EQ(rgn->size, total_size); 285 + ASSERT_EQ(rgn->base, reserved_base); 308 286 309 - assert(memblock.reserved.cnt == 1); 310 - assert(memblock.reserved.total_size == total_size); 287 + ASSERT_EQ(memblock.reserved.cnt, 1); 288 + ASSERT_EQ(memblock.reserved.total_size, total_size); 289 + 290 + test_pass_pop(); 311 291 312 292 return 0; 313 293 } ··· 334 310 void *allocated_ptr = NULL; 335 311 char *b; 336 312 313 + PREFIX_PUSH(); 314 + 337 315 phys_addr_t r1_size = SZ_64; 338 316 phys_addr_t r2_size = SZ_128; 339 317 phys_addr_t total_size = r1_size + r2_size; ··· 353 327 min_addr, max_addr, NUMA_NO_NODE); 354 328 b = (char *)allocated_ptr; 355 329 356 - assert(allocated_ptr); 357 - assert(*b == 0); 330 + ASSERT_NE(allocated_ptr, NULL); 331 + ASSERT_EQ(*b, 0); 358 332 359 - assert(rgn->size == total_size); 360 - assert(rgn->base == min_addr); 333 + ASSERT_EQ(rgn->size, total_size); 334 + ASSERT_EQ(rgn->base, min_addr); 361 335 362 - assert(memblock.reserved.cnt == 1); 363 - assert(memblock.reserved.total_size == total_size); 336 + ASSERT_EQ(memblock.reserved.cnt, 1); 337 + ASSERT_EQ(memblock.reserved.total_size, total_size); 338 + 339 + test_pass_pop(); 364 340 365 341 return 0; 366 342 } ··· 392 364 char *b; 393 365 struct region r1, r2; 394 366 367 + PREFIX_PUSH(); 368 + 395 369 phys_addr_t r3_size = SZ_64; 396 370 phys_addr_t gap_size = SMP_CACHE_BYTES; 397 371 phys_addr_t total_size; ··· 419 389 min_addr, max_addr, NUMA_NO_NODE); 420 390 b = (char *)allocated_ptr; 421 391 422 - assert(allocated_ptr); 423 - assert(*b == 0); 392 + ASSERT_NE(allocated_ptr, NULL); 393 + ASSERT_EQ(*b, 0); 424 394 425 - assert(rgn1->size == r1.size + r3_size); 426 - assert(rgn1->base == max_addr - r3_size); 395 + ASSERT_EQ(rgn1->size, r1.size + r3_size); 396 + ASSERT_EQ(rgn1->base, max_addr - r3_size); 427 397 428 - assert(rgn2->size == r2.size); 429 - assert(rgn2->base == r2.base); 398 + ASSERT_EQ(rgn2->size, r2.size); 399 + ASSERT_EQ(rgn2->base, r2.base); 430 400 431 - assert(memblock.reserved.cnt == 2); 432 - assert(memblock.reserved.total_size == total_size); 401 + ASSERT_EQ(memblock.reserved.cnt, 2); 402 + ASSERT_EQ(memblock.reserved.total_size, total_size); 403 + 404 + test_pass_pop(); 433 405 434 406 return 0; 435 407 } ··· 459 427 char *b; 460 428 struct region r1, r2; 461 429 430 + PREFIX_PUSH(); 431 + 462 432 phys_addr_t r3_size = SZ_64; 463 433 phys_addr_t total_size; 464 434 phys_addr_t max_addr; ··· 485 451 min_addr, max_addr, NUMA_NO_NODE); 486 452 b = (char *)allocated_ptr; 487 453 488 - assert(allocated_ptr); 489 - assert(*b == 0); 454 + ASSERT_NE(allocated_ptr, NULL); 455 + ASSERT_EQ(*b, 0); 490 456 491 - assert(rgn->size == total_size); 492 - assert(rgn->base == r2.base); 457 + ASSERT_EQ(rgn->size, total_size); 458 + ASSERT_EQ(rgn->base, r2.base); 493 459 494 - assert(memblock.reserved.cnt == 1); 495 - assert(memblock.reserved.total_size == total_size); 460 + ASSERT_EQ(memblock.reserved.cnt, 1); 461 + ASSERT_EQ(memblock.reserved.total_size, total_size); 462 + 463 + test_pass_pop(); 496 464 497 465 return 0; 498 466 } ··· 525 489 char *b; 526 490 struct region r1, r2; 527 491 492 + PREFIX_PUSH(); 493 + 528 494 phys_addr_t r3_size = SZ_256; 529 495 phys_addr_t gap_size = SMP_CACHE_BYTES; 530 496 phys_addr_t total_size; ··· 552 514 min_addr, max_addr, NUMA_NO_NODE); 553 515 b = (char *)allocated_ptr; 554 516 555 - assert(allocated_ptr); 556 - assert(*b == 0); 517 + ASSERT_NE(allocated_ptr, NULL); 518 + ASSERT_EQ(*b, 0); 557 519 558 - assert(rgn1->size == r1.size); 559 - assert(rgn1->base == r1.base); 520 + ASSERT_EQ(rgn1->size, r1.size); 521 + ASSERT_EQ(rgn1->base, r1.base); 560 522 561 - assert(rgn2->size == r2.size + r3_size); 562 - assert(rgn2->base == r2.base - r3_size); 523 + ASSERT_EQ(rgn2->size, r2.size + r3_size); 524 + ASSERT_EQ(rgn2->base, r2.base - r3_size); 563 525 564 - assert(memblock.reserved.cnt == 2); 565 - assert(memblock.reserved.total_size == total_size); 526 + ASSERT_EQ(memblock.reserved.cnt, 2); 527 + ASSERT_EQ(memblock.reserved.total_size, total_size); 528 + 529 + test_pass_pop(); 566 530 567 531 return 0; 568 532 } ··· 594 554 void *allocated_ptr = NULL; 595 555 struct region r1, r2; 596 556 557 + PREFIX_PUSH(); 558 + 597 559 phys_addr_t r3_size = SZ_256; 598 560 phys_addr_t gap_size = SMP_CACHE_BYTES; 599 561 phys_addr_t max_addr; ··· 618 576 allocated_ptr = memblock_alloc_try_nid(r3_size, SMP_CACHE_BYTES, 619 577 min_addr, max_addr, NUMA_NO_NODE); 620 578 621 - assert(!allocated_ptr); 579 + ASSERT_EQ(allocated_ptr, NULL); 580 + 581 + test_pass_pop(); 622 582 623 583 return 0; 624 584 } ··· 636 592 void *allocated_ptr = NULL; 637 593 char *b; 638 594 595 + PREFIX_PUSH(); 596 + 639 597 phys_addr_t size = SZ_256; 640 598 phys_addr_t min_addr; 641 599 phys_addr_t max_addr; ··· 651 605 min_addr, max_addr, NUMA_NO_NODE); 652 606 b = (char *)allocated_ptr; 653 607 654 - assert(allocated_ptr); 655 - assert(*b == 0); 608 + ASSERT_NE(allocated_ptr, NULL); 609 + ASSERT_EQ(*b, 0); 656 610 657 - assert(rgn->size == size); 658 - assert(rgn->base == memblock_end_of_DRAM() - size); 611 + ASSERT_EQ(rgn->size, size); 612 + ASSERT_EQ(rgn->base, memblock_end_of_DRAM() - size); 659 613 660 - assert(memblock.reserved.cnt == 1); 661 - assert(memblock.reserved.total_size == size); 614 + ASSERT_EQ(memblock.reserved.cnt, 1); 615 + ASSERT_EQ(memblock.reserved.total_size, size); 616 + 617 + test_pass_pop(); 662 618 663 619 return 0; 664 620 } ··· 676 628 void *allocated_ptr = NULL; 677 629 char *b; 678 630 631 + PREFIX_PUSH(); 632 + 679 633 phys_addr_t size = SZ_1K; 680 634 phys_addr_t min_addr; 681 635 phys_addr_t max_addr; ··· 691 641 min_addr, max_addr, NUMA_NO_NODE); 692 642 b = (char *)allocated_ptr; 693 643 694 - assert(allocated_ptr); 695 - assert(*b == 0); 644 + ASSERT_NE(allocated_ptr, NULL); 645 + ASSERT_EQ(*b, 0); 696 646 697 - assert(rgn->size == size); 698 - assert(rgn->base == memblock_end_of_DRAM() - size); 647 + ASSERT_EQ(rgn->size, size); 648 + ASSERT_EQ(rgn->base, memblock_end_of_DRAM() - size); 699 649 700 - assert(memblock.reserved.cnt == 1); 701 - assert(memblock.reserved.total_size == size); 650 + ASSERT_EQ(memblock.reserved.cnt, 1); 651 + ASSERT_EQ(memblock.reserved.total_size, size); 652 + 653 + test_pass_pop(); 702 654 703 655 return 0; 704 656 } ··· 725 673 void *allocated_ptr = NULL; 726 674 char *b; 727 675 676 + PREFIX_PUSH(); 677 + 728 678 phys_addr_t size = SZ_128; 729 679 phys_addr_t min_addr; 730 680 phys_addr_t max_addr; ··· 743 689 b = (char *)allocated_ptr; 744 690 rgn_end = rgn->base + rgn->size; 745 691 746 - assert(allocated_ptr); 747 - assert(*b == 0); 692 + ASSERT_NE(allocated_ptr, NULL); 693 + ASSERT_EQ(*b, 0); 748 694 749 - assert(rgn->size == size); 750 - assert(rgn->base == min_addr); 751 - assert(rgn_end < max_addr); 695 + ASSERT_EQ(rgn->size, size); 696 + ASSERT_EQ(rgn->base, min_addr); 697 + ASSERT_LT(rgn_end, max_addr); 752 698 753 - assert(memblock.reserved.cnt == 1); 754 - assert(memblock.reserved.total_size == size); 699 + ASSERT_EQ(memblock.reserved.cnt, 1); 700 + ASSERT_EQ(memblock.reserved.total_size, size); 701 + 702 + test_pass_pop(); 755 703 756 704 return 0; 757 705 } ··· 781 725 void *allocated_ptr = NULL; 782 726 char *b; 783 727 728 + PREFIX_PUSH(); 729 + 784 730 phys_addr_t size = SZ_128; 785 731 phys_addr_t misalign = SZ_2; 786 732 phys_addr_t min_addr; ··· 800 742 b = (char *)allocated_ptr; 801 743 rgn_end = rgn->base + rgn->size; 802 744 803 - assert(allocated_ptr); 804 - assert(*b == 0); 745 + ASSERT_NE(allocated_ptr, NULL); 746 + ASSERT_EQ(*b, 0); 805 747 806 - assert(rgn->size == size); 807 - assert(rgn->base == min_addr + (SMP_CACHE_BYTES - misalign)); 808 - assert(rgn_end < max_addr); 748 + ASSERT_EQ(rgn->size, size); 749 + ASSERT_EQ(rgn->base, min_addr + (SMP_CACHE_BYTES - misalign)); 750 + ASSERT_LT(rgn_end, max_addr); 809 751 810 - assert(memblock.reserved.cnt == 1); 811 - assert(memblock.reserved.total_size == size); 752 + ASSERT_EQ(memblock.reserved.cnt, 1); 753 + ASSERT_EQ(memblock.reserved.total_size, size); 754 + 755 + test_pass_pop(); 812 756 813 757 return 0; 814 758 } ··· 838 778 void *allocated_ptr = NULL; 839 779 char *b; 840 780 781 + PREFIX_PUSH(); 782 + 841 783 phys_addr_t size = SZ_256; 842 784 phys_addr_t min_addr; 843 785 phys_addr_t max_addr; ··· 854 792 NUMA_NO_NODE); 855 793 b = (char *)allocated_ptr; 856 794 857 - assert(allocated_ptr); 858 - assert(*b == 0); 795 + ASSERT_NE(allocated_ptr, NULL); 796 + ASSERT_EQ(*b, 0); 859 797 860 - assert(rgn->size == size); 861 - assert(rgn->base == memblock_start_of_DRAM()); 798 + ASSERT_EQ(rgn->size, size); 799 + ASSERT_EQ(rgn->base, memblock_start_of_DRAM()); 862 800 863 - assert(memblock.reserved.cnt == 1); 864 - assert(memblock.reserved.total_size == size); 801 + ASSERT_EQ(memblock.reserved.cnt, 1); 802 + ASSERT_EQ(memblock.reserved.total_size, size); 803 + 804 + test_pass_pop(); 865 805 866 806 return 0; 867 807 } ··· 893 829 char *b; 894 830 struct region r1, r2; 895 831 832 + PREFIX_PUSH(); 833 + 896 834 phys_addr_t r3_size = SZ_64; 897 835 phys_addr_t gap_size = SMP_CACHE_BYTES; 898 836 phys_addr_t total_size; ··· 921 855 NUMA_NO_NODE); 922 856 b = (char *)allocated_ptr; 923 857 924 - assert(allocated_ptr); 925 - assert(*b == 0); 858 + ASSERT_NE(allocated_ptr, NULL); 859 + ASSERT_EQ(*b, 0); 926 860 927 - assert(rgn1->size == r1.size); 928 - assert(rgn1->base == max_addr); 861 + ASSERT_EQ(rgn1->size, r1.size); 862 + ASSERT_EQ(rgn1->base, max_addr); 929 863 930 - assert(rgn2->size == r2.size + r3_size); 931 - assert(rgn2->base == r2.base); 864 + ASSERT_EQ(rgn2->size, r2.size + r3_size); 865 + ASSERT_EQ(rgn2->base, r2.base); 932 866 933 - assert(memblock.reserved.cnt == 2); 934 - assert(memblock.reserved.total_size == total_size); 867 + ASSERT_EQ(memblock.reserved.cnt, 2); 868 + ASSERT_EQ(memblock.reserved.total_size, total_size); 869 + 870 + test_pass_pop(); 935 871 936 872 return 0; 937 873 } ··· 967 899 char *b; 968 900 struct region r1, r2; 969 901 902 + PREFIX_PUSH(); 903 + 970 904 phys_addr_t r3_size = SZ_256; 971 905 phys_addr_t gap_size = SMP_CACHE_BYTES; 972 906 phys_addr_t total_size; ··· 995 925 NUMA_NO_NODE); 996 926 b = (char *)allocated_ptr; 997 927 998 - assert(allocated_ptr); 999 - assert(*b == 0); 928 + ASSERT_NE(allocated_ptr, NULL); 929 + ASSERT_EQ(*b, 0); 1000 930 1001 - assert(rgn3->size == r3_size); 1002 - assert(rgn3->base == memblock_start_of_DRAM()); 931 + ASSERT_EQ(rgn3->size, r3_size); 932 + ASSERT_EQ(rgn3->base, memblock_start_of_DRAM()); 1003 933 1004 - assert(rgn2->size == r2.size); 1005 - assert(rgn2->base == r2.base); 934 + ASSERT_EQ(rgn2->size, r2.size); 935 + ASSERT_EQ(rgn2->base, r2.base); 1006 936 1007 - assert(rgn1->size == r1.size); 1008 - assert(rgn1->base == r1.base); 937 + ASSERT_EQ(rgn1->size, r1.size); 938 + ASSERT_EQ(rgn1->base, r1.base); 1009 939 1010 - assert(memblock.reserved.cnt == 3); 1011 - assert(memblock.reserved.total_size == total_size); 940 + ASSERT_EQ(memblock.reserved.cnt, 3); 941 + ASSERT_EQ(memblock.reserved.total_size, total_size); 942 + 943 + test_pass_pop(); 1012 944 1013 945 return 0; 1014 946 } ··· 1026 954 void *allocated_ptr = NULL; 1027 955 char *b; 1028 956 957 + PREFIX_PUSH(); 958 + 1029 959 phys_addr_t size = SZ_256; 1030 960 phys_addr_t min_addr; 1031 961 phys_addr_t max_addr; ··· 1042 968 NUMA_NO_NODE); 1043 969 b = (char *)allocated_ptr; 1044 970 1045 - assert(allocated_ptr); 1046 - assert(*b == 0); 971 + ASSERT_NE(allocated_ptr, NULL); 972 + ASSERT_EQ(*b, 0); 1047 973 1048 - assert(rgn->size == size); 1049 - assert(rgn->base == min_addr); 974 + ASSERT_EQ(rgn->size, size); 975 + ASSERT_EQ(rgn->base, min_addr); 1050 976 1051 - assert(memblock.reserved.cnt == 1); 1052 - assert(memblock.reserved.total_size == size); 977 + ASSERT_EQ(memblock.reserved.cnt, 1); 978 + ASSERT_EQ(memblock.reserved.total_size, size); 979 + 980 + test_pass_pop(); 1053 981 1054 982 return 0; 1055 983 } ··· 1067 991 void *allocated_ptr = NULL; 1068 992 char *b; 1069 993 994 + PREFIX_PUSH(); 995 + 1070 996 phys_addr_t size = SZ_1K; 1071 997 phys_addr_t min_addr; 1072 998 phys_addr_t max_addr; ··· 1083 1005 NUMA_NO_NODE); 1084 1006 b = (char *)allocated_ptr; 1085 1007 1086 - assert(allocated_ptr); 1087 - assert(*b == 0); 1008 + ASSERT_NE(allocated_ptr, NULL); 1009 + ASSERT_EQ(*b, 0); 1088 1010 1089 - assert(rgn->size == size); 1090 - assert(rgn->base == memblock_start_of_DRAM()); 1011 + ASSERT_EQ(rgn->size, size); 1012 + ASSERT_EQ(rgn->base, memblock_start_of_DRAM()); 1091 1013 1092 - assert(memblock.reserved.cnt == 1); 1093 - assert(memblock.reserved.total_size == size); 1014 + ASSERT_EQ(memblock.reserved.cnt, 1); 1015 + ASSERT_EQ(memblock.reserved.total_size, size); 1016 + 1017 + test_pass_pop(); 1094 1018 1095 1019 return 0; 1096 1020 } ··· 1100 1020 /* Test case wrappers */ 1101 1021 static int alloc_try_nid_simple_check(void) 1102 1022 { 1023 + test_print("\tRunning %s...\n", __func__); 1103 1024 memblock_set_bottom_up(false); 1104 1025 alloc_try_nid_top_down_simple_check(); 1105 1026 memblock_set_bottom_up(true); ··· 1111 1030 1112 1031 static int alloc_try_nid_misaligned_check(void) 1113 1032 { 1033 + test_print("\tRunning %s...\n", __func__); 1114 1034 memblock_set_bottom_up(false); 1115 1035 alloc_try_nid_top_down_end_misaligned_check(); 1116 1036 memblock_set_bottom_up(true); ··· 1122 1040 1123 1041 static int alloc_try_nid_narrow_range_check(void) 1124 1042 { 1043 + test_print("\tRunning %s...\n", __func__); 1125 1044 memblock_set_bottom_up(false); 1126 1045 alloc_try_nid_top_down_narrow_range_check(); 1127 1046 memblock_set_bottom_up(true); ··· 1133 1050 1134 1051 static int alloc_try_nid_reserved_with_space_check(void) 1135 1052 { 1053 + test_print("\tRunning %s...\n", __func__); 1136 1054 memblock_set_bottom_up(false); 1137 1055 alloc_try_nid_top_down_reserved_with_space_check(); 1138 1056 memblock_set_bottom_up(true); ··· 1144 1060 1145 1061 static int alloc_try_nid_reserved_no_space_check(void) 1146 1062 { 1063 + test_print("\tRunning %s...\n", __func__); 1147 1064 memblock_set_bottom_up(false); 1148 1065 alloc_try_nid_top_down_reserved_no_space_check(); 1149 1066 memblock_set_bottom_up(true); ··· 1155 1070 1156 1071 static int alloc_try_nid_cap_max_check(void) 1157 1072 { 1073 + test_print("\tRunning %s...\n", __func__); 1158 1074 memblock_set_bottom_up(false); 1159 1075 alloc_try_nid_top_down_cap_max_check(); 1160 1076 memblock_set_bottom_up(true); ··· 1166 1080 1167 1081 static int alloc_try_nid_cap_min_check(void) 1168 1082 { 1083 + test_print("\tRunning %s...\n", __func__); 1169 1084 memblock_set_bottom_up(false); 1170 1085 alloc_try_nid_top_down_cap_min_check(); 1171 1086 memblock_set_bottom_up(true); ··· 1177 1090 1178 1091 static int alloc_try_nid_min_reserved_check(void) 1179 1092 { 1093 + test_print("\tRunning %s...\n", __func__); 1180 1094 memblock_set_bottom_up(false); 1181 1095 alloc_try_nid_min_reserved_generic_check(); 1182 1096 memblock_set_bottom_up(true); ··· 1188 1100 1189 1101 static int alloc_try_nid_max_reserved_check(void) 1190 1102 { 1103 + test_print("\tRunning %s...\n", __func__); 1191 1104 memblock_set_bottom_up(false); 1192 1105 alloc_try_nid_max_reserved_generic_check(); 1193 1106 memblock_set_bottom_up(true); ··· 1199 1110 1200 1111 static int alloc_try_nid_exact_address_check(void) 1201 1112 { 1113 + test_print("\tRunning %s...\n", __func__); 1202 1114 memblock_set_bottom_up(false); 1203 1115 alloc_try_nid_exact_address_generic_check(); 1204 1116 memblock_set_bottom_up(true); ··· 1210 1120 1211 1121 static int alloc_try_nid_reserved_full_merge_check(void) 1212 1122 { 1123 + test_print("\tRunning %s...\n", __func__); 1213 1124 memblock_set_bottom_up(false); 1214 1125 alloc_try_nid_reserved_full_merge_generic_check(); 1215 1126 memblock_set_bottom_up(true); ··· 1221 1130 1222 1131 static int alloc_try_nid_reserved_all_check(void) 1223 1132 { 1133 + test_print("\tRunning %s...\n", __func__); 1224 1134 memblock_set_bottom_up(false); 1225 1135 alloc_try_nid_reserved_all_generic_check(); 1226 1136 memblock_set_bottom_up(true); ··· 1232 1140 1233 1141 static int alloc_try_nid_low_max_check(void) 1234 1142 { 1143 + test_print("\tRunning %s...\n", __func__); 1235 1144 memblock_set_bottom_up(false); 1236 1145 alloc_try_nid_low_max_generic_check(); 1237 1146 memblock_set_bottom_up(true); ··· 1243 1150 1244 1151 int memblock_alloc_nid_checks(void) 1245 1152 { 1153 + const char *func_testing = "memblock_alloc_try_nid"; 1154 + 1155 + prefix_reset(); 1156 + prefix_push(func_testing); 1157 + test_print("Running %s tests...\n", func_testing); 1158 + 1246 1159 reset_memblock_attributes(); 1247 1160 dummy_physical_memory_init(); 1248 1161 ··· 1268 1169 alloc_try_nid_low_max_check(); 1269 1170 1270 1171 dummy_physical_memory_cleanup(); 1172 + 1173 + prefix_pop(); 1271 1174 1272 1175 return 0; 1273 1176 }
+231 -106
tools/testing/memblock/tests/basic_api.c
··· 4 4 #include "basic_api.h" 5 5 6 6 #define EXPECTED_MEMBLOCK_REGIONS 128 7 + #define FUNC_ADD "memblock_add" 8 + #define FUNC_RESERVE "memblock_reserve" 9 + #define FUNC_REMOVE "memblock_remove" 10 + #define FUNC_FREE "memblock_free" 7 11 8 12 static int memblock_initialization_check(void) 9 13 { 10 - assert(memblock.memory.regions); 11 - assert(memblock.memory.cnt == 1); 12 - assert(memblock.memory.max == EXPECTED_MEMBLOCK_REGIONS); 13 - assert(strcmp(memblock.memory.name, "memory") == 0); 14 + PREFIX_PUSH(); 14 15 15 - assert(memblock.reserved.regions); 16 - assert(memblock.reserved.cnt == 1); 17 - assert(memblock.memory.max == EXPECTED_MEMBLOCK_REGIONS); 18 - assert(strcmp(memblock.reserved.name, "reserved") == 0); 16 + ASSERT_NE(memblock.memory.regions, NULL); 17 + ASSERT_EQ(memblock.memory.cnt, 1); 18 + ASSERT_EQ(memblock.memory.max, EXPECTED_MEMBLOCK_REGIONS); 19 + ASSERT_EQ(strcmp(memblock.memory.name, "memory"), 0); 19 20 20 - assert(!memblock.bottom_up); 21 - assert(memblock.current_limit == MEMBLOCK_ALLOC_ANYWHERE); 21 + ASSERT_NE(memblock.reserved.regions, NULL); 22 + ASSERT_EQ(memblock.reserved.cnt, 1); 23 + ASSERT_EQ(memblock.memory.max, EXPECTED_MEMBLOCK_REGIONS); 24 + ASSERT_EQ(strcmp(memblock.reserved.name, "reserved"), 0); 25 + 26 + ASSERT_EQ(memblock.bottom_up, false); 27 + ASSERT_EQ(memblock.current_limit, MEMBLOCK_ALLOC_ANYWHERE); 28 + 29 + test_pass_pop(); 22 30 23 31 return 0; 24 32 } ··· 48 40 .size = SZ_4M 49 41 }; 50 42 43 + PREFIX_PUSH(); 44 + 51 45 reset_memblock_regions(); 52 46 memblock_add(r.base, r.size); 53 47 54 - assert(rgn->base == r.base); 55 - assert(rgn->size == r.size); 48 + ASSERT_EQ(rgn->base, r.base); 49 + ASSERT_EQ(rgn->size, r.size); 56 50 57 - assert(memblock.memory.cnt == 1); 58 - assert(memblock.memory.total_size == r.size); 51 + ASSERT_EQ(memblock.memory.cnt, 1); 52 + ASSERT_EQ(memblock.memory.total_size, r.size); 53 + 54 + test_pass_pop(); 59 55 60 56 return 0; 61 57 } ··· 81 69 .size = SZ_16M 82 70 }; 83 71 72 + PREFIX_PUSH(); 73 + 84 74 reset_memblock_regions(); 85 75 memblock_add_node(r.base, r.size, 1, MEMBLOCK_HOTPLUG); 86 76 87 - assert(rgn->base == r.base); 88 - assert(rgn->size == r.size); 77 + ASSERT_EQ(rgn->base, r.base); 78 + ASSERT_EQ(rgn->size, r.size); 89 79 #ifdef CONFIG_NUMA 90 - assert(rgn->nid == 1); 80 + ASSERT_EQ(rgn->nid, 1); 91 81 #endif 92 - assert(rgn->flags == MEMBLOCK_HOTPLUG); 82 + ASSERT_EQ(rgn->flags, MEMBLOCK_HOTPLUG); 93 83 94 - assert(memblock.memory.cnt == 1); 95 - assert(memblock.memory.total_size == r.size); 84 + ASSERT_EQ(memblock.memory.cnt, 1); 85 + ASSERT_EQ(memblock.memory.total_size, r.size); 86 + 87 + test_pass_pop(); 96 88 97 89 return 0; 98 90 } ··· 129 113 .size = SZ_8K 130 114 }; 131 115 116 + PREFIX_PUSH(); 117 + 132 118 reset_memblock_regions(); 133 119 memblock_add(r1.base, r1.size); 134 120 memblock_add(r2.base, r2.size); 135 121 136 - assert(rgn1->base == r1.base); 137 - assert(rgn1->size == r1.size); 122 + ASSERT_EQ(rgn1->base, r1.base); 123 + ASSERT_EQ(rgn1->size, r1.size); 138 124 139 - assert(rgn2->base == r2.base); 140 - assert(rgn2->size == r2.size); 125 + ASSERT_EQ(rgn2->base, r2.base); 126 + ASSERT_EQ(rgn2->size, r2.size); 141 127 142 - assert(memblock.memory.cnt == 2); 143 - assert(memblock.memory.total_size == r1.size + r2.size); 128 + ASSERT_EQ(memblock.memory.cnt, 2); 129 + ASSERT_EQ(memblock.memory.total_size, r1.size + r2.size); 130 + 131 + test_pass_pop(); 144 132 145 133 return 0; 146 134 } ··· 182 162 .size = SZ_512M 183 163 }; 184 164 165 + PREFIX_PUSH(); 166 + 185 167 total_size = (r1.base - r2.base) + r1.size; 186 168 187 169 reset_memblock_regions(); 188 170 memblock_add(r1.base, r1.size); 189 171 memblock_add(r2.base, r2.size); 190 172 191 - assert(rgn->base == r2.base); 192 - assert(rgn->size == total_size); 173 + ASSERT_EQ(rgn->base, r2.base); 174 + ASSERT_EQ(rgn->size, total_size); 193 175 194 - assert(memblock.memory.cnt == 1); 195 - assert(memblock.memory.total_size == total_size); 176 + ASSERT_EQ(memblock.memory.cnt, 1); 177 + ASSERT_EQ(memblock.memory.total_size, total_size); 178 + 179 + test_pass_pop(); 196 180 197 181 return 0; 198 182 } ··· 234 210 .size = SZ_1G 235 211 }; 236 212 213 + PREFIX_PUSH(); 214 + 237 215 total_size = (r2.base - r1.base) + r2.size; 238 216 239 217 reset_memblock_regions(); 240 218 memblock_add(r1.base, r1.size); 241 219 memblock_add(r2.base, r2.size); 242 220 243 - assert(rgn->base == r1.base); 244 - assert(rgn->size == total_size); 221 + ASSERT_EQ(rgn->base, r1.base); 222 + ASSERT_EQ(rgn->size, total_size); 245 223 246 - assert(memblock.memory.cnt == 1); 247 - assert(memblock.memory.total_size == total_size); 224 + ASSERT_EQ(memblock.memory.cnt, 1); 225 + ASSERT_EQ(memblock.memory.total_size, total_size); 226 + 227 + test_pass_pop(); 248 228 249 229 return 0; 250 230 } ··· 283 255 .size = SZ_1M 284 256 }; 285 257 258 + PREFIX_PUSH(); 259 + 286 260 reset_memblock_regions(); 287 261 memblock_add(r1.base, r1.size); 288 262 memblock_add(r2.base, r2.size); 289 263 290 - assert(rgn->base == r1.base); 291 - assert(rgn->size == r1.size); 264 + ASSERT_EQ(rgn->base, r1.base); 265 + ASSERT_EQ(rgn->size, r1.size); 292 266 293 - assert(memblock.memory.cnt == 1); 294 - assert(memblock.memory.total_size == r1.size); 267 + ASSERT_EQ(memblock.memory.cnt, 1); 268 + ASSERT_EQ(memblock.memory.total_size, r1.size); 269 + 270 + test_pass_pop(); 295 271 296 272 return 0; 297 273 } ··· 311 279 .size = SZ_2M 312 280 }; 313 281 282 + PREFIX_PUSH(); 283 + 314 284 reset_memblock_regions(); 315 285 316 286 memblock_add(r.base, r.size); 317 287 memblock_add(r.base, r.size); 318 288 319 - assert(memblock.memory.cnt == 1); 320 - assert(memblock.memory.total_size == r.size); 289 + ASSERT_EQ(memblock.memory.cnt, 1); 290 + ASSERT_EQ(memblock.memory.total_size, r.size); 291 + 292 + test_pass_pop(); 321 293 322 294 return 0; 323 295 } 324 296 325 297 static int memblock_add_checks(void) 326 298 { 299 + prefix_reset(); 300 + prefix_push(FUNC_ADD); 301 + test_print("Running %s tests...\n", FUNC_ADD); 302 + 327 303 memblock_add_simple_check(); 328 304 memblock_add_node_simple_check(); 329 305 memblock_add_disjoint_check(); ··· 339 299 memblock_add_overlap_bottom_check(); 340 300 memblock_add_within_check(); 341 301 memblock_add_twice_check(); 302 + 303 + prefix_pop(); 342 304 343 305 return 0; 344 306 } ··· 362 320 .size = SZ_128M 363 321 }; 364 322 323 + PREFIX_PUSH(); 324 + 365 325 reset_memblock_regions(); 366 326 memblock_reserve(r.base, r.size); 367 327 368 - assert(rgn->base == r.base); 369 - assert(rgn->size == r.size); 328 + ASSERT_EQ(rgn->base, r.base); 329 + ASSERT_EQ(rgn->size, r.size); 330 + 331 + test_pass_pop(); 370 332 371 333 return 0; 372 334 } ··· 402 356 .size = SZ_512M 403 357 }; 404 358 359 + PREFIX_PUSH(); 360 + 405 361 reset_memblock_regions(); 406 362 memblock_reserve(r1.base, r1.size); 407 363 memblock_reserve(r2.base, r2.size); 408 364 409 - assert(rgn1->base == r1.base); 410 - assert(rgn1->size == r1.size); 365 + ASSERT_EQ(rgn1->base, r1.base); 366 + ASSERT_EQ(rgn1->size, r1.size); 411 367 412 - assert(rgn2->base == r2.base); 413 - assert(rgn2->size == r2.size); 368 + ASSERT_EQ(rgn2->base, r2.base); 369 + ASSERT_EQ(rgn2->size, r2.size); 414 370 415 - assert(memblock.reserved.cnt == 2); 416 - assert(memblock.reserved.total_size == r1.size + r2.size); 371 + ASSERT_EQ(memblock.reserved.cnt, 2); 372 + ASSERT_EQ(memblock.reserved.total_size, r1.size + r2.size); 373 + 374 + test_pass_pop(); 417 375 418 376 return 0; 419 377 } ··· 456 406 .size = SZ_1G 457 407 }; 458 408 409 + PREFIX_PUSH(); 410 + 459 411 total_size = (r1.base - r2.base) + r1.size; 460 412 461 413 reset_memblock_regions(); 462 414 memblock_reserve(r1.base, r1.size); 463 415 memblock_reserve(r2.base, r2.size); 464 416 465 - assert(rgn->base == r2.base); 466 - assert(rgn->size == total_size); 417 + ASSERT_EQ(rgn->base, r2.base); 418 + ASSERT_EQ(rgn->size, total_size); 467 419 468 - assert(memblock.reserved.cnt == 1); 469 - assert(memblock.reserved.total_size == total_size); 420 + ASSERT_EQ(memblock.reserved.cnt, 1); 421 + ASSERT_EQ(memblock.reserved.total_size, total_size); 422 + 423 + test_pass_pop(); 470 424 471 425 return 0; 472 426 } ··· 509 455 .size = SZ_128K 510 456 }; 511 457 458 + PREFIX_PUSH(); 459 + 512 460 total_size = (r2.base - r1.base) + r2.size; 513 461 514 462 reset_memblock_regions(); 515 463 memblock_reserve(r1.base, r1.size); 516 464 memblock_reserve(r2.base, r2.size); 517 465 518 - assert(rgn->base == r1.base); 519 - assert(rgn->size == total_size); 466 + ASSERT_EQ(rgn->base, r1.base); 467 + ASSERT_EQ(rgn->size, total_size); 520 468 521 - assert(memblock.reserved.cnt == 1); 522 - assert(memblock.reserved.total_size == total_size); 469 + ASSERT_EQ(memblock.reserved.cnt, 1); 470 + ASSERT_EQ(memblock.reserved.total_size, total_size); 471 + 472 + test_pass_pop(); 523 473 524 474 return 0; 525 475 } ··· 560 502 .size = SZ_64K 561 503 }; 562 504 505 + PREFIX_PUSH(); 506 + 563 507 reset_memblock_regions(); 564 508 memblock_reserve(r1.base, r1.size); 565 509 memblock_reserve(r2.base, r2.size); 566 510 567 - assert(rgn->base == r1.base); 568 - assert(rgn->size == r1.size); 511 + ASSERT_EQ(rgn->base, r1.base); 512 + ASSERT_EQ(rgn->size, r1.size); 569 513 570 - assert(memblock.reserved.cnt == 1); 571 - assert(memblock.reserved.total_size == r1.size); 514 + ASSERT_EQ(memblock.reserved.cnt, 1); 515 + ASSERT_EQ(memblock.reserved.total_size, r1.size); 516 + 517 + test_pass_pop(); 572 518 573 519 return 0; 574 520 } ··· 589 527 .size = SZ_2M 590 528 }; 591 529 530 + PREFIX_PUSH(); 531 + 592 532 reset_memblock_regions(); 593 533 594 534 memblock_reserve(r.base, r.size); 595 535 memblock_reserve(r.base, r.size); 596 536 597 - assert(memblock.reserved.cnt == 1); 598 - assert(memblock.reserved.total_size == r.size); 537 + ASSERT_EQ(memblock.reserved.cnt, 1); 538 + ASSERT_EQ(memblock.reserved.total_size, r.size); 539 + 540 + test_pass_pop(); 599 541 600 542 return 0; 601 543 } 602 544 603 545 static int memblock_reserve_checks(void) 604 546 { 547 + prefix_reset(); 548 + prefix_push(FUNC_RESERVE); 549 + test_print("Running %s tests...\n", FUNC_RESERVE); 550 + 605 551 memblock_reserve_simple_check(); 606 552 memblock_reserve_disjoint_check(); 607 553 memblock_reserve_overlap_top_check(); 608 554 memblock_reserve_overlap_bottom_check(); 609 555 memblock_reserve_within_check(); 610 556 memblock_reserve_twice_check(); 557 + 558 + prefix_pop(); 611 559 612 560 return 0; 613 561 } ··· 653 581 .size = SZ_4M 654 582 }; 655 583 584 + PREFIX_PUSH(); 585 + 656 586 reset_memblock_regions(); 657 587 memblock_add(r1.base, r1.size); 658 588 memblock_add(r2.base, r2.size); 659 589 memblock_remove(r1.base, r1.size); 660 590 661 - assert(rgn->base == r2.base); 662 - assert(rgn->size == r2.size); 591 + ASSERT_EQ(rgn->base, r2.base); 592 + ASSERT_EQ(rgn->size, r2.size); 663 593 664 - assert(memblock.memory.cnt == 1); 665 - assert(memblock.memory.total_size == r2.size); 594 + ASSERT_EQ(memblock.memory.cnt, 1); 595 + ASSERT_EQ(memblock.memory.total_size, r2.size); 596 + 597 + test_pass_pop(); 666 598 667 599 return 0; 668 600 } ··· 702 626 .size = SZ_1G 703 627 }; 704 628 629 + PREFIX_PUSH(); 630 + 705 631 reset_memblock_regions(); 706 632 memblock_add(r1.base, r1.size); 707 633 memblock_remove(r2.base, r2.size); 708 634 709 - assert(rgn->base == r1.base); 710 - assert(rgn->size == r1.size); 635 + ASSERT_EQ(rgn->base, r1.base); 636 + ASSERT_EQ(rgn->size, r1.size); 711 637 712 - assert(memblock.memory.cnt == 1); 713 - assert(memblock.memory.total_size == r1.size); 638 + ASSERT_EQ(memblock.memory.cnt, 1); 639 + ASSERT_EQ(memblock.memory.total_size, r1.size); 640 + 641 + test_pass_pop(); 714 642 715 643 return 0; 716 644 } ··· 754 674 .size = SZ_32M 755 675 }; 756 676 677 + PREFIX_PUSH(); 678 + 757 679 r1_end = r1.base + r1.size; 758 680 r2_end = r2.base + r2.size; 759 681 total_size = r1_end - r2_end; ··· 764 682 memblock_add(r1.base, r1.size); 765 683 memblock_remove(r2.base, r2.size); 766 684 767 - assert(rgn->base == r1.base + r2.base); 768 - assert(rgn->size == total_size); 685 + ASSERT_EQ(rgn->base, r1.base + r2.base); 686 + ASSERT_EQ(rgn->size, total_size); 769 687 770 - assert(memblock.memory.cnt == 1); 771 - assert(memblock.memory.total_size == total_size); 688 + ASSERT_EQ(memblock.memory.cnt, 1); 689 + ASSERT_EQ(memblock.memory.total_size, total_size); 690 + 691 + test_pass_pop(); 772 692 773 693 return 0; 774 694 } ··· 808 724 .size = SZ_256M 809 725 }; 810 726 727 + PREFIX_PUSH(); 728 + 811 729 total_size = r2.base - r1.base; 812 730 813 731 reset_memblock_regions(); 814 732 memblock_add(r1.base, r1.size); 815 733 memblock_remove(r2.base, r2.size); 816 734 817 - assert(rgn->base == r1.base); 818 - assert(rgn->size == total_size); 735 + ASSERT_EQ(rgn->base, r1.base); 736 + ASSERT_EQ(rgn->size, total_size); 819 737 820 - assert(memblock.memory.cnt == 1); 821 - assert(memblock.memory.total_size == total_size); 738 + ASSERT_EQ(memblock.memory.cnt, 1); 739 + ASSERT_EQ(memblock.memory.total_size, total_size); 740 + 741 + test_pass_pop(); 742 + 822 743 return 0; 823 744 } 824 745 ··· 863 774 .size = SZ_1M 864 775 }; 865 776 777 + PREFIX_PUSH(); 778 + 866 779 r1_size = r2.base - r1.base; 867 780 r2_size = (r1.base + r1.size) - (r2.base + r2.size); 868 781 total_size = r1_size + r2_size; ··· 873 782 memblock_add(r1.base, r1.size); 874 783 memblock_remove(r2.base, r2.size); 875 784 876 - assert(rgn1->base == r1.base); 877 - assert(rgn1->size == r1_size); 785 + ASSERT_EQ(rgn1->base, r1.base); 786 + ASSERT_EQ(rgn1->size, r1_size); 878 787 879 - assert(rgn2->base == r2.base + r2.size); 880 - assert(rgn2->size == r2_size); 788 + ASSERT_EQ(rgn2->base, r2.base + r2.size); 789 + ASSERT_EQ(rgn2->size, r2_size); 881 790 882 - assert(memblock.memory.cnt == 2); 883 - assert(memblock.memory.total_size == total_size); 791 + ASSERT_EQ(memblock.memory.cnt, 2); 792 + ASSERT_EQ(memblock.memory.total_size, total_size); 793 + 794 + test_pass_pop(); 884 795 885 796 return 0; 886 797 } 887 798 888 799 static int memblock_remove_checks(void) 889 800 { 801 + prefix_reset(); 802 + prefix_push(FUNC_REMOVE); 803 + test_print("Running %s tests...\n", FUNC_REMOVE); 804 + 890 805 memblock_remove_simple_check(); 891 806 memblock_remove_absent_check(); 892 807 memblock_remove_overlap_top_check(); 893 808 memblock_remove_overlap_bottom_check(); 894 809 memblock_remove_within_check(); 810 + 811 + prefix_pop(); 895 812 896 813 return 0; 897 814 } ··· 934 835 .size = SZ_1M 935 836 }; 936 837 838 + PREFIX_PUSH(); 839 + 937 840 reset_memblock_regions(); 938 841 memblock_reserve(r1.base, r1.size); 939 842 memblock_reserve(r2.base, r2.size); 940 843 memblock_free((void *)r1.base, r1.size); 941 844 942 - assert(rgn->base == r2.base); 943 - assert(rgn->size == r2.size); 845 + ASSERT_EQ(rgn->base, r2.base); 846 + ASSERT_EQ(rgn->size, r2.size); 944 847 945 - assert(memblock.reserved.cnt == 1); 946 - assert(memblock.reserved.total_size == r2.size); 848 + ASSERT_EQ(memblock.reserved.cnt, 1); 849 + ASSERT_EQ(memblock.reserved.total_size, r2.size); 850 + 851 + test_pass_pop(); 947 852 948 853 return 0; 949 854 } ··· 983 880 .size = SZ_128M 984 881 }; 985 882 883 + PREFIX_PUSH(); 884 + 986 885 reset_memblock_regions(); 987 886 memblock_reserve(r1.base, r1.size); 988 887 memblock_free((void *)r2.base, r2.size); 989 888 990 - assert(rgn->base == r1.base); 991 - assert(rgn->size == r1.size); 889 + ASSERT_EQ(rgn->base, r1.base); 890 + ASSERT_EQ(rgn->size, r1.size); 992 891 993 - assert(memblock.reserved.cnt == 1); 994 - assert(memblock.reserved.total_size == r1.size); 892 + ASSERT_EQ(memblock.reserved.cnt, 1); 893 + ASSERT_EQ(memblock.reserved.total_size, r1.size); 894 + 895 + test_pass_pop(); 995 896 996 897 return 0; 997 898 } ··· 1035 928 .size = SZ_8M 1036 929 }; 1037 930 931 + PREFIX_PUSH(); 932 + 1038 933 total_size = (r1.size + r1.base) - (r2.base + r2.size); 1039 934 1040 935 reset_memblock_regions(); 1041 936 memblock_reserve(r1.base, r1.size); 1042 937 memblock_free((void *)r2.base, r2.size); 1043 938 1044 - assert(rgn->base == r2.base + r2.size); 1045 - assert(rgn->size == total_size); 939 + ASSERT_EQ(rgn->base, r2.base + r2.size); 940 + ASSERT_EQ(rgn->size, total_size); 1046 941 1047 - assert(memblock.reserved.cnt == 1); 1048 - assert(memblock.reserved.total_size == total_size); 942 + ASSERT_EQ(memblock.reserved.cnt, 1); 943 + ASSERT_EQ(memblock.reserved.total_size, total_size); 944 + 945 + test_pass_pop(); 1049 946 1050 947 return 0; 1051 948 } ··· 1084 973 .size = SZ_32M 1085 974 }; 1086 975 976 + PREFIX_PUSH(); 977 + 1087 978 total_size = r2.base - r1.base; 1088 979 1089 980 reset_memblock_regions(); 1090 981 memblock_reserve(r1.base, r1.size); 1091 982 memblock_free((void *)r2.base, r2.size); 1092 983 1093 - assert(rgn->base == r1.base); 1094 - assert(rgn->size == total_size); 984 + ASSERT_EQ(rgn->base, r1.base); 985 + ASSERT_EQ(rgn->size, total_size); 1095 986 1096 - assert(memblock.reserved.cnt == 1); 1097 - assert(memblock.reserved.total_size == total_size); 987 + ASSERT_EQ(memblock.reserved.cnt, 1); 988 + ASSERT_EQ(memblock.reserved.total_size, total_size); 989 + 990 + test_pass_pop(); 1098 991 1099 992 return 0; 1100 993 } ··· 1139 1024 .size = SZ_1M 1140 1025 }; 1141 1026 1027 + PREFIX_PUSH(); 1028 + 1142 1029 r1_size = r2.base - r1.base; 1143 1030 r2_size = (r1.base + r1.size) - (r2.base + r2.size); 1144 1031 total_size = r1_size + r2_size; ··· 1149 1032 memblock_reserve(r1.base, r1.size); 1150 1033 memblock_free((void *)r2.base, r2.size); 1151 1034 1152 - assert(rgn1->base == r1.base); 1153 - assert(rgn1->size == r1_size); 1035 + ASSERT_EQ(rgn1->base, r1.base); 1036 + ASSERT_EQ(rgn1->size, r1_size); 1154 1037 1155 - assert(rgn2->base == r2.base + r2.size); 1156 - assert(rgn2->size == r2_size); 1038 + ASSERT_EQ(rgn2->base, r2.base + r2.size); 1039 + ASSERT_EQ(rgn2->size, r2_size); 1157 1040 1158 - assert(memblock.reserved.cnt == 2); 1159 - assert(memblock.reserved.total_size == total_size); 1041 + ASSERT_EQ(memblock.reserved.cnt, 2); 1042 + ASSERT_EQ(memblock.reserved.total_size, total_size); 1043 + 1044 + test_pass_pop(); 1160 1045 1161 1046 return 0; 1162 1047 } 1163 1048 1164 1049 static int memblock_free_checks(void) 1165 1050 { 1051 + prefix_reset(); 1052 + prefix_push(FUNC_FREE); 1053 + test_print("Running %s tests...\n", FUNC_FREE); 1054 + 1166 1055 memblock_free_simple_check(); 1167 1056 memblock_free_absent_check(); 1168 1057 memblock_free_overlap_top_check(); 1169 1058 memblock_free_overlap_bottom_check(); 1170 1059 memblock_free_within_check(); 1060 + 1061 + prefix_pop(); 1171 1062 1172 1063 return 0; 1173 1064 }
+118
tools/testing/memblock/tests/common.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0-or-later 2 2 #include "tests/common.h" 3 3 #include <string.h> 4 + #include <getopt.h> 5 + #include <linux/memory_hotplug.h> 6 + #include <linux/build_bug.h> 4 7 5 8 #define INIT_MEMBLOCK_REGIONS 128 6 9 #define INIT_MEMBLOCK_RESERVED_REGIONS INIT_MEMBLOCK_REGIONS 10 + #define PREFIXES_MAX 15 11 + #define DELIM ": " 7 12 8 13 static struct test_memory memory_block; 14 + static const char __maybe_unused *prefixes[PREFIXES_MAX]; 15 + static int __maybe_unused nr_prefixes; 16 + 17 + static const char *short_opts = "mv"; 18 + static const struct option long_opts[] = { 19 + {"movable-node", 0, NULL, 'm'}, 20 + {"verbose", 0, NULL, 'v'}, 21 + {NULL, 0, NULL, 0} 22 + }; 23 + 24 + static const char * const help_opts[] = { 25 + "disallow allocations from regions marked as hotplugged\n\t\t\t" 26 + "by simulating enabling the \"movable_node\" kernel\n\t\t\t" 27 + "parameter", 28 + "enable verbose output, which includes the name of the\n\t\t\t" 29 + "memblock function being tested, the name of the test,\n\t\t\t" 30 + "and whether the test passed or failed." 31 + }; 32 + 33 + static int verbose; 34 + 35 + /* sets global variable returned by movable_node_is_enabled() stub */ 36 + bool movable_node_enabled; 9 37 10 38 void reset_memblock_regions(void) 11 39 { ··· 73 45 void dummy_physical_memory_cleanup(void) 74 46 { 75 47 free(memory_block.base); 48 + } 49 + 50 + static void usage(const char *prog) 51 + { 52 + BUILD_BUG_ON(ARRAY_SIZE(help_opts) != ARRAY_SIZE(long_opts) - 1); 53 + 54 + printf("Usage: %s [-%s]\n", prog, short_opts); 55 + 56 + for (int i = 0; long_opts[i].name; i++) { 57 + printf(" -%c, --%-12s\t%s\n", long_opts[i].val, 58 + long_opts[i].name, help_opts[i]); 59 + } 60 + 61 + exit(1); 62 + } 63 + 64 + void parse_args(int argc, char **argv) 65 + { 66 + int c; 67 + 68 + while ((c = getopt_long_only(argc, argv, short_opts, long_opts, 69 + NULL)) != -1) { 70 + switch (c) { 71 + case 'm': 72 + movable_node_enabled = true; 73 + break; 74 + case 'v': 75 + verbose = 1; 76 + break; 77 + default: 78 + usage(argv[0]); 79 + } 80 + } 81 + } 82 + 83 + void print_prefixes(const char *postfix) 84 + { 85 + for (int i = 0; i < nr_prefixes; i++) 86 + test_print("%s%s", prefixes[i], DELIM); 87 + test_print(postfix); 88 + } 89 + 90 + void test_fail(void) 91 + { 92 + if (verbose) { 93 + ksft_test_result_fail(": "); 94 + print_prefixes("failed\n"); 95 + } 96 + } 97 + 98 + void test_pass(void) 99 + { 100 + if (verbose) { 101 + ksft_test_result_pass(": "); 102 + print_prefixes("passed\n"); 103 + } 104 + } 105 + 106 + void test_print(const char *fmt, ...) 107 + { 108 + if (verbose) { 109 + int saved_errno = errno; 110 + va_list args; 111 + 112 + va_start(args, fmt); 113 + errno = saved_errno; 114 + vprintf(fmt, args); 115 + va_end(args); 116 + } 117 + } 118 + 119 + void prefix_reset(void) 120 + { 121 + memset(prefixes, 0, PREFIXES_MAX * sizeof(char *)); 122 + nr_prefixes = 0; 123 + } 124 + 125 + void prefix_push(const char *prefix) 126 + { 127 + assert(nr_prefixes < PREFIXES_MAX); 128 + prefixes[nr_prefixes] = prefix; 129 + nr_prefixes++; 130 + } 131 + 132 + void prefix_pop(void) 133 + { 134 + if (nr_prefixes > 0) { 135 + prefixes[nr_prefixes - 1] = 0; 136 + nr_prefixes--; 137 + } 76 138 }
+54
tools/testing/memblock/tests/common.h
··· 7 7 #include <linux/types.h> 8 8 #include <linux/memblock.h> 9 9 #include <linux/sizes.h> 10 + #include <linux/printk.h> 11 + #include <../selftests/kselftest.h> 10 12 11 13 #define MEM_SIZE SZ_16K 14 + 15 + /** 16 + * ASSERT_EQ(): 17 + * Check the condition 18 + * @_expected == @_seen 19 + * If false, print failed test message (if in VERBOSE mode) and then assert 20 + */ 21 + #define ASSERT_EQ(_expected, _seen) do { \ 22 + if ((_expected) != (_seen)) \ 23 + test_fail(); \ 24 + assert((_expected) == (_seen)); \ 25 + } while (0) 26 + 27 + /** 28 + * ASSERT_NE(): 29 + * Check the condition 30 + * @_expected != @_seen 31 + * If false, print failed test message (if in VERBOSE mode) and then assert 32 + */ 33 + #define ASSERT_NE(_expected, _seen) do { \ 34 + if ((_expected) == (_seen)) \ 35 + test_fail(); \ 36 + assert((_expected) != (_seen)); \ 37 + } while (0) 38 + 39 + /** 40 + * ASSERT_LT(): 41 + * Check the condition 42 + * @_expected < @_seen 43 + * If false, print failed test message (if in VERBOSE mode) and then assert 44 + */ 45 + #define ASSERT_LT(_expected, _seen) do { \ 46 + if ((_expected) >= (_seen)) \ 47 + test_fail(); \ 48 + assert((_expected) < (_seen)); \ 49 + } while (0) 50 + 51 + #define PREFIX_PUSH() prefix_push(__func__) 12 52 13 53 /* 14 54 * Available memory registered with memblock needs to be valid for allocs ··· 70 30 void setup_memblock(void); 71 31 void dummy_physical_memory_init(void); 72 32 void dummy_physical_memory_cleanup(void); 33 + void parse_args(int argc, char **argv); 34 + 35 + void test_fail(void); 36 + void test_pass(void); 37 + void test_print(const char *fmt, ...); 38 + void prefix_reset(void); 39 + void prefix_push(const char *prefix); 40 + void prefix_pop(void); 41 + 42 + static inline void test_pass_pop(void) 43 + { 44 + test_pass(); 45 + prefix_pop(); 46 + } 73 47 74 48 #endif