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

drm/selftests: reduce stack usage

Putting a large drm_connector object on the stack can lead to warnings
in some configuration, such as:

drivers/gpu/drm/selftests/test-drm_cmdline_parser.c:18:12: error: stack frame size of 1040 bytes in function 'drm_cmdline_test_res' [-Werror,-Wframe-larger-than=]
static int drm_cmdline_test_res(void *ignored)

Since the object is never modified, just declare it as 'static const'
and allow this to be passed down.

Fixes: b7ced38916a9 ("drm/selftests: Add command line parser selftests")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190628121712.1928142-1-arnd@arndb.de

authored by

Arnd Bergmann and committed by
Maxime Ripard
c0898fca dd2b5959

+53 -93
+4 -4
drivers/gpu/drm/drm_modes.c
··· 1448 1448 } 1449 1449 1450 1450 static int drm_mode_parse_cmdline_extra(const char *str, int length, 1451 - struct drm_connector *connector, 1451 + const struct drm_connector *connector, 1452 1452 struct drm_cmdline_mode *mode) 1453 1453 { 1454 1454 int i; ··· 1493 1493 1494 1494 static int drm_mode_parse_cmdline_res_mode(const char *str, unsigned int length, 1495 1495 bool extras, 1496 - struct drm_connector *connector, 1496 + const struct drm_connector *connector, 1497 1497 struct drm_cmdline_mode *mode) 1498 1498 { 1499 1499 const char *str_start = str; ··· 1555 1555 } 1556 1556 1557 1557 static int drm_mode_parse_cmdline_options(char *str, size_t len, 1558 - struct drm_connector *connector, 1558 + const struct drm_connector *connector, 1559 1559 struct drm_cmdline_mode *mode) 1560 1560 { 1561 1561 unsigned int rotation = 0; ··· 1689 1689 * True if a valid modeline has been parsed, false otherwise. 1690 1690 */ 1691 1691 bool drm_mode_parse_command_line_for_connector(const char *mode_option, 1692 - struct drm_connector *connector, 1692 + const struct drm_connector *connector, 1693 1693 struct drm_cmdline_mode *mode) 1694 1694 { 1695 1695 const char *name;
+48 -88
drivers/gpu/drm/selftests/test-drm_cmdline_parser.c
··· 15 15 #include "drm_selftest.h" 16 16 #include "test-drm_modeset_common.h" 17 17 18 + static const struct drm_connector no_connector = {}; 19 + 18 20 static int drm_cmdline_test_res(void *ignored) 19 21 { 20 - struct drm_connector connector = { }; 21 22 struct drm_cmdline_mode mode = { }; 22 23 23 24 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480", 24 - &connector, 25 + &no_connector, 25 26 &mode)); 26 27 FAIL_ON(!mode.specified); 27 28 FAIL_ON(mode.xres != 720); ··· 43 42 44 43 static int drm_cmdline_test_res_missing_x(void *ignored) 45 44 { 46 - struct drm_connector connector = { }; 47 45 struct drm_cmdline_mode mode = { }; 48 46 49 47 FAIL_ON(drm_mode_parse_command_line_for_connector("x480", 50 - &connector, 48 + &no_connector, 51 49 &mode)); 52 50 53 51 return 0; ··· 54 54 55 55 static int drm_cmdline_test_res_missing_y(void *ignored) 56 56 { 57 - struct drm_connector connector = { }; 58 57 struct drm_cmdline_mode mode = { }; 59 58 60 59 FAIL_ON(drm_mode_parse_command_line_for_connector("1024x", 61 - &connector, 60 + &no_connector, 62 61 &mode)); 63 62 64 63 return 0; ··· 65 66 66 67 static int drm_cmdline_test_res_bad_y(void *ignored) 67 68 { 68 - struct drm_connector connector = { }; 69 69 struct drm_cmdline_mode mode = { }; 70 70 71 71 FAIL_ON(drm_mode_parse_command_line_for_connector("1024xtest", 72 - &connector, 72 + &no_connector, 73 73 &mode)); 74 74 75 75 return 0; ··· 76 78 77 79 static int drm_cmdline_test_res_missing_y_bpp(void *ignored) 78 80 { 79 - struct drm_connector connector = { }; 80 81 struct drm_cmdline_mode mode = { }; 81 82 82 83 FAIL_ON(drm_mode_parse_command_line_for_connector("1024x-24", 83 - &connector, 84 + &no_connector, 84 85 &mode)); 85 86 86 87 return 0; ··· 87 90 88 91 static int drm_cmdline_test_res_vesa(void *ignored) 89 92 { 90 - struct drm_connector connector = { }; 91 93 struct drm_cmdline_mode mode = { }; 92 94 93 95 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480M", 94 - &connector, 96 + &no_connector, 95 97 &mode)); 96 98 FAIL_ON(!mode.specified); 97 99 FAIL_ON(mode.xres != 720); ··· 111 115 112 116 static int drm_cmdline_test_res_vesa_rblank(void *ignored) 113 117 { 114 - struct drm_connector connector = { }; 115 118 struct drm_cmdline_mode mode = { }; 116 119 117 120 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480MR", 118 - &connector, 121 + &no_connector, 119 122 &mode)); 120 123 FAIL_ON(!mode.specified); 121 124 FAIL_ON(mode.xres != 720); ··· 135 140 136 141 static int drm_cmdline_test_res_rblank(void *ignored) 137 142 { 138 - struct drm_connector connector = { }; 139 143 struct drm_cmdline_mode mode = { }; 140 144 141 145 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480R", 142 - &connector, 146 + &no_connector, 143 147 &mode)); 144 148 FAIL_ON(!mode.specified); 145 149 FAIL_ON(mode.xres != 720); ··· 159 165 160 166 static int drm_cmdline_test_res_bpp(void *ignored) 161 167 { 162 - struct drm_connector connector = { }; 163 168 struct drm_cmdline_mode mode = { }; 164 169 165 170 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24", 166 - &connector, 171 + &no_connector, 167 172 &mode)); 168 173 FAIL_ON(!mode.specified); 169 174 FAIL_ON(mode.xres != 720); ··· 184 191 185 192 static int drm_cmdline_test_res_bad_bpp(void *ignored) 186 193 { 187 - struct drm_connector connector = { }; 188 194 struct drm_cmdline_mode mode = { }; 189 195 190 196 FAIL_ON(drm_mode_parse_command_line_for_connector("720x480-test", 191 - &connector, 197 + &no_connector, 192 198 &mode)); 193 199 194 200 return 0; ··· 195 203 196 204 static int drm_cmdline_test_res_refresh(void *ignored) 197 205 { 198 - struct drm_connector connector = { }; 199 206 struct drm_cmdline_mode mode = { }; 200 207 201 208 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480@60", 202 - &connector, 209 + &no_connector, 203 210 &mode)); 204 211 FAIL_ON(!mode.specified); 205 212 FAIL_ON(mode.xres != 720); ··· 220 229 221 230 static int drm_cmdline_test_res_bad_refresh(void *ignored) 222 231 { 223 - struct drm_connector connector = { }; 224 232 struct drm_cmdline_mode mode = { }; 225 233 226 234 FAIL_ON(drm_mode_parse_command_line_for_connector("720x480@refresh", 227 - &connector, 235 + &no_connector, 228 236 &mode)); 229 237 230 238 return 0; ··· 231 241 232 242 static int drm_cmdline_test_res_bpp_refresh(void *ignored) 233 243 { 234 - struct drm_connector connector = { }; 235 244 struct drm_cmdline_mode mode = { }; 236 245 237 246 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60", 238 - &connector, 247 + &no_connector, 239 248 &mode)); 240 249 FAIL_ON(!mode.specified); 241 250 FAIL_ON(mode.xres != 720); ··· 257 268 258 269 static int drm_cmdline_test_res_bpp_refresh_interlaced(void *ignored) 259 270 { 260 - struct drm_connector connector = { }; 261 271 struct drm_cmdline_mode mode = { }; 262 272 263 273 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60i", 264 - &connector, 274 + &no_connector, 265 275 &mode)); 266 276 FAIL_ON(!mode.specified); 267 277 FAIL_ON(mode.xres != 720); ··· 283 295 284 296 static int drm_cmdline_test_res_bpp_refresh_margins(void *ignored) 285 297 { 286 - struct drm_connector connector = { }; 287 298 struct drm_cmdline_mode mode = { }; 288 299 289 300 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60m", 290 - &connector, 301 + &no_connector, 291 302 &mode)); 292 303 FAIL_ON(!mode.specified); 293 304 FAIL_ON(mode.xres != 720); ··· 309 322 310 323 static int drm_cmdline_test_res_bpp_refresh_force_off(void *ignored) 311 324 { 312 - struct drm_connector connector = { }; 313 325 struct drm_cmdline_mode mode = { }; 314 326 315 327 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60d", 316 - &connector, 328 + &no_connector, 317 329 &mode)); 318 330 FAIL_ON(!mode.specified); 319 331 FAIL_ON(mode.xres != 720); ··· 335 349 336 350 static int drm_cmdline_test_res_bpp_refresh_force_on_off(void *ignored) 337 351 { 338 - struct drm_connector connector = { }; 339 352 struct drm_cmdline_mode mode = { }; 340 353 341 354 FAIL_ON(drm_mode_parse_command_line_for_connector("720x480-24@60de", 342 - &connector, 355 + &no_connector, 343 356 &mode)); 344 357 345 358 return 0; ··· 346 361 347 362 static int drm_cmdline_test_res_bpp_refresh_force_on(void *ignored) 348 363 { 349 - struct drm_connector connector = { }; 350 364 struct drm_cmdline_mode mode = { }; 351 365 352 366 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60e", 353 - &connector, 367 + &no_connector, 354 368 &mode)); 355 369 FAIL_ON(!mode.specified); 356 370 FAIL_ON(mode.xres != 720); ··· 372 388 373 389 static int drm_cmdline_test_res_bpp_refresh_force_on_analog(void *ignored) 374 390 { 375 - struct drm_connector connector = { }; 376 391 struct drm_cmdline_mode mode = { }; 377 392 378 393 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60D", 379 - &connector, 394 + &no_connector, 380 395 &mode)); 381 396 FAIL_ON(!mode.specified); 382 397 FAIL_ON(mode.xres != 720); ··· 398 415 399 416 static int drm_cmdline_test_res_bpp_refresh_force_on_digital(void *ignored) 400 417 { 401 - struct drm_connector connector = { }; 402 418 struct drm_cmdline_mode mode = { }; 419 + static const struct drm_connector connector = { 420 + .connector_type = DRM_MODE_CONNECTOR_DVII, 421 + }; 403 422 404 - connector.connector_type = DRM_MODE_CONNECTOR_DVII; 405 423 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60D", 406 424 &connector, 407 425 &mode)); ··· 427 443 428 444 static int drm_cmdline_test_res_bpp_refresh_interlaced_margins_force_on(void *ignored) 429 445 { 430 - struct drm_connector connector = { }; 431 446 struct drm_cmdline_mode mode = { }; 432 447 433 448 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60ime", 434 - &connector, 449 + &no_connector, 435 450 &mode)); 436 451 FAIL_ON(!mode.specified); 437 452 FAIL_ON(mode.xres != 720); ··· 453 470 454 471 static int drm_cmdline_test_res_margins_force_on(void *ignored) 455 472 { 456 - struct drm_connector connector = { }; 457 473 struct drm_cmdline_mode mode = { }; 458 474 459 475 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480me", 460 - &connector, 476 + &no_connector, 461 477 &mode)); 462 478 FAIL_ON(!mode.specified); 463 479 FAIL_ON(mode.xres != 720); ··· 477 495 478 496 static int drm_cmdline_test_res_vesa_margins(void *ignored) 479 497 { 480 - struct drm_connector connector = { }; 481 498 struct drm_cmdline_mode mode = { }; 482 499 483 500 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480Mm", 484 - &connector, 501 + &no_connector, 485 502 &mode)); 486 503 FAIL_ON(!mode.specified); 487 504 FAIL_ON(mode.xres != 720); ··· 501 520 502 521 static int drm_cmdline_test_res_invalid_mode(void *ignored) 503 522 { 504 - struct drm_connector connector = { }; 505 523 struct drm_cmdline_mode mode = { }; 506 524 507 525 FAIL_ON(drm_mode_parse_command_line_for_connector("720x480f", 508 - &connector, 526 + &no_connector, 509 527 &mode)); 510 528 511 529 return 0; ··· 512 532 513 533 static int drm_cmdline_test_res_bpp_wrong_place_mode(void *ignored) 514 534 { 515 - struct drm_connector connector = { }; 516 535 struct drm_cmdline_mode mode = { }; 517 536 518 537 FAIL_ON(drm_mode_parse_command_line_for_connector("720x480e-24", 519 - &connector, 538 + &no_connector, 520 539 &mode)); 521 540 522 541 return 0; ··· 523 544 524 545 static int drm_cmdline_test_name(void *ignored) 525 546 { 526 - struct drm_connector connector = { }; 527 547 struct drm_cmdline_mode mode = { }; 528 548 529 549 FAIL_ON(!drm_mode_parse_command_line_for_connector("NTSC", 530 - &connector, 550 + &no_connector, 531 551 &mode)); 532 552 FAIL_ON(strcmp(mode.name, "NTSC")); 533 553 FAIL_ON(mode.refresh_specified); ··· 537 559 538 560 static int drm_cmdline_test_name_bpp(void *ignored) 539 561 { 540 - struct drm_connector connector = { }; 541 562 struct drm_cmdline_mode mode = { }; 542 563 543 564 FAIL_ON(!drm_mode_parse_command_line_for_connector("NTSC-24", 544 - &connector, 565 + &no_connector, 545 566 &mode)); 546 567 FAIL_ON(strcmp(mode.name, "NTSC")); 547 568 ··· 554 577 555 578 static int drm_cmdline_test_name_bpp_refresh(void *ignored) 556 579 { 557 - struct drm_connector connector = { }; 558 580 struct drm_cmdline_mode mode = { }; 559 581 560 582 FAIL_ON(drm_mode_parse_command_line_for_connector("NTSC-24@60", 561 - &connector, 583 + &no_connector, 562 584 &mode)); 563 585 564 586 return 0; ··· 565 589 566 590 static int drm_cmdline_test_name_refresh(void *ignored) 567 591 { 568 - struct drm_connector connector = { }; 569 592 struct drm_cmdline_mode mode = { }; 570 593 571 594 FAIL_ON(drm_mode_parse_command_line_for_connector("NTSC@60", 572 - &connector, 595 + &no_connector, 573 596 &mode)); 574 597 575 598 return 0; ··· 576 601 577 602 static int drm_cmdline_test_name_refresh_wrong_mode(void *ignored) 578 603 { 579 - struct drm_connector connector = { }; 580 604 struct drm_cmdline_mode mode = { }; 581 605 582 606 FAIL_ON(drm_mode_parse_command_line_for_connector("NTSC@60m", 583 - &connector, 607 + &no_connector, 584 608 &mode)); 585 609 586 610 return 0; ··· 587 613 588 614 static int drm_cmdline_test_name_refresh_invalid_mode(void *ignored) 589 615 { 590 - struct drm_connector connector = { }; 591 616 struct drm_cmdline_mode mode = { }; 592 617 593 618 FAIL_ON(drm_mode_parse_command_line_for_connector("NTSC@60f", 594 - &connector, 619 + &no_connector, 595 620 &mode)); 596 621 597 622 return 0; ··· 598 625 599 626 static int drm_cmdline_test_name_option(void *ignored) 600 627 { 601 - struct drm_connector connector = { }; 602 628 struct drm_cmdline_mode mode = { }; 603 629 604 630 FAIL_ON(!drm_mode_parse_command_line_for_connector("NTSC,rotate=180", 605 - &connector, 631 + &no_connector, 606 632 &mode)); 607 633 FAIL_ON(!mode.specified); 608 634 FAIL_ON(strcmp(mode.name, "NTSC")); ··· 612 640 613 641 static int drm_cmdline_test_name_bpp_option(void *ignored) 614 642 { 615 - struct drm_connector connector = { }; 616 643 struct drm_cmdline_mode mode = { }; 617 644 618 645 FAIL_ON(!drm_mode_parse_command_line_for_connector("NTSC-24,rotate=180", 619 - &connector, 646 + &no_connector, 620 647 &mode)); 621 648 FAIL_ON(!mode.specified); 622 649 FAIL_ON(strcmp(mode.name, "NTSC")); ··· 628 657 629 658 static int drm_cmdline_test_rotate_0(void *ignored) 630 659 { 631 - struct drm_connector connector = { }; 632 660 struct drm_cmdline_mode mode = { }; 633 661 634 662 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,rotate=0", 635 - &connector, 663 + &no_connector, 636 664 &mode)); 637 665 FAIL_ON(!mode.specified); 638 666 FAIL_ON(mode.xres != 720); ··· 653 683 654 684 static int drm_cmdline_test_rotate_90(void *ignored) 655 685 { 656 - struct drm_connector connector = { }; 657 686 struct drm_cmdline_mode mode = { }; 658 687 659 688 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,rotate=90", 660 - &connector, 689 + &no_connector, 661 690 &mode)); 662 691 FAIL_ON(!mode.specified); 663 692 FAIL_ON(mode.xres != 720); ··· 678 709 679 710 static int drm_cmdline_test_rotate_180(void *ignored) 680 711 { 681 - struct drm_connector connector = { }; 682 712 struct drm_cmdline_mode mode = { }; 683 713 684 714 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,rotate=180", 685 - &connector, 715 + &no_connector, 686 716 &mode)); 687 717 FAIL_ON(!mode.specified); 688 718 FAIL_ON(mode.xres != 720); ··· 703 735 704 736 static int drm_cmdline_test_rotate_270(void *ignored) 705 737 { 706 - struct drm_connector connector = { }; 707 738 struct drm_cmdline_mode mode = { }; 708 739 709 740 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,rotate=270", 710 - &connector, 741 + &no_connector, 711 742 &mode)); 712 743 FAIL_ON(!mode.specified); 713 744 FAIL_ON(mode.xres != 720); ··· 728 761 729 762 static int drm_cmdline_test_rotate_invalid_val(void *ignored) 730 763 { 731 - struct drm_connector connector = { }; 732 764 struct drm_cmdline_mode mode = { }; 733 765 734 766 FAIL_ON(drm_mode_parse_command_line_for_connector("720x480,rotate=42", 735 - &connector, 767 + &no_connector, 736 768 &mode)); 737 769 738 770 return 0; ··· 739 773 740 774 static int drm_cmdline_test_rotate_truncated(void *ignored) 741 775 { 742 - struct drm_connector connector = { }; 743 776 struct drm_cmdline_mode mode = { }; 744 777 745 778 FAIL_ON(drm_mode_parse_command_line_for_connector("720x480,rotate=", 746 - &connector, 779 + &no_connector, 747 780 &mode)); 748 781 749 782 return 0; ··· 750 785 751 786 static int drm_cmdline_test_hmirror(void *ignored) 752 787 { 753 - struct drm_connector connector = { }; 754 788 struct drm_cmdline_mode mode = { }; 755 789 756 790 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,reflect_x", 757 - &connector, 791 + &no_connector, 758 792 &mode)); 759 793 FAIL_ON(!mode.specified); 760 794 FAIL_ON(mode.xres != 720); ··· 775 811 776 812 static int drm_cmdline_test_vmirror(void *ignored) 777 813 { 778 - struct drm_connector connector = { }; 779 814 struct drm_cmdline_mode mode = { }; 780 815 781 816 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,reflect_y", 782 - &connector, 817 + &no_connector, 783 818 &mode)); 784 819 FAIL_ON(!mode.specified); 785 820 FAIL_ON(mode.xres != 720); ··· 800 837 801 838 static int drm_cmdline_test_margin_options(void *ignored) 802 839 { 803 - struct drm_connector connector = { }; 804 840 struct drm_cmdline_mode mode = { }; 805 841 806 842 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,margin_right=14,margin_left=24,margin_bottom=36,margin_top=42", 807 - &connector, 843 + &no_connector, 808 844 &mode)); 809 845 FAIL_ON(!mode.specified); 810 846 FAIL_ON(mode.xres != 720); ··· 828 866 829 867 static int drm_cmdline_test_multiple_options(void *ignored) 830 868 { 831 - struct drm_connector connector = { }; 832 869 struct drm_cmdline_mode mode = { }; 833 870 834 871 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,rotate=270,reflect_x", 835 - &connector, 872 + &no_connector, 836 873 &mode)); 837 874 FAIL_ON(!mode.specified); 838 875 FAIL_ON(mode.xres != 720); ··· 853 892 854 893 static int drm_cmdline_test_invalid_option(void *ignored) 855 894 { 856 - struct drm_connector connector = { }; 857 895 struct drm_cmdline_mode mode = { }; 858 896 859 897 FAIL_ON(drm_mode_parse_command_line_for_connector("720x480,test=42", 860 - &connector, 898 + &no_connector, 861 899 &mode)); 862 900 863 901 return 0;
+1 -1
include/drm/drm_modes.h
··· 537 537 /* parsing cmdline modes */ 538 538 bool 539 539 drm_mode_parse_command_line_for_connector(const char *mode_option, 540 - struct drm_connector *connector, 540 + const struct drm_connector *connector, 541 541 struct drm_cmdline_mode *mode); 542 542 struct drm_display_mode * 543 543 drm_mode_create_from_cmdline_mode(struct drm_device *dev,