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

Configure Feed

Select the types of activity you want to include in your feed.

perf parse-events: Separate ENOMEM memory handling

Add PE_ABORT that will YYNOMEM or YYABORT accordingly.

Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: bpf@vger.kernel.org
Link: https://lore.kernel.org/r/20230627181030.95608-10-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Ian Rogers and committed by
Arnaldo Carvalho de Melo
b52cb995 77cdd787

+82 -52
+82 -52
tools/perf/util/parse-events.y
··· 28 28 YYABORT; \ 29 29 } while (0) 30 30 31 + #define PE_ABORT(val) \ 32 + do { \ 33 + if (val == -ENOMEM) \ 34 + YYNOMEM; \ 35 + YYABORT; \ 36 + } while (0) 37 + 31 38 static struct list_head* alloc_list(void) 32 39 { 33 40 struct list_head *list; ··· 378 371 err = parse_events_multi_pmu_add(_parse_state, $1, NULL, &list); 379 372 free($1); 380 373 if (err < 0) 381 - YYABORT; 374 + PE_ABORT(err); 382 375 $$ = list; 383 376 } 384 377 ··· 403 396 parse_events_terms__delete($3); 404 397 if (err) { 405 398 free_list_evsel(list); 406 - YYABORT; 399 + PE_ABORT(err); 407 400 } 408 401 $$ = list; 409 402 } ··· 414 407 int type = $1 >> 16; 415 408 int config = $1 & 255; 416 409 bool wildcard = (type == PERF_TYPE_HARDWARE || type == PERF_TYPE_HW_CACHE); 410 + int err; 417 411 418 412 list = alloc_list(); 419 413 if (!list) 420 414 YYNOMEM; 421 - ABORT_ON(parse_events_add_numeric(_parse_state, list, type, config, 422 - /*head_config=*/NULL, wildcard)); 415 + err = parse_events_add_numeric(_parse_state, list, type, config, /*head_config=*/NULL, wildcard); 416 + if (err) 417 + PE_ABORT(err); 423 418 $$ = list; 424 419 } 425 420 | 426 421 PE_VALUE_SYM_TOOL sep_slash_slash_dc 427 422 { 428 423 struct list_head *list; 424 + int err; 429 425 430 426 list = alloc_list(); 431 427 if (!list) 432 428 YYNOMEM; 433 - ABORT_ON(parse_events_add_tool(_parse_state, list, $1)); 429 + err = parse_events_add_tool(_parse_state, list, $1); 430 + if (err) 431 + YYNOMEM; 434 432 $$ = list; 435 433 } 436 434 ··· 456 444 free($1); 457 445 if (err) { 458 446 free_list_evsel(list); 459 - YYABORT; 447 + PE_ABORT(err); 460 448 } 461 449 $$ = list; 462 450 } ··· 477 465 free($6); 478 466 if (err) { 479 467 free(list); 480 - YYABORT; 468 + PE_ABORT(err); 481 469 } 482 470 $$ = list; 483 471 } ··· 496 484 parse_events_terms__delete($5); 497 485 if (err) { 498 486 free(list); 499 - YYABORT; 487 + PE_ABORT(err); 500 488 } 501 489 $$ = list; 502 490 } ··· 516 504 free($4); 517 505 if (err) { 518 506 free(list); 519 - YYABORT; 507 + PE_ABORT(err); 520 508 } 521 509 $$ = list; 522 510 } ··· 534 522 parse_events_terms__delete($3); 535 523 if (err) { 536 524 free(list); 537 - YYABORT; 525 + PE_ABORT(err); 538 526 } 539 527 $$ = list; 540 528 } ··· 561 549 free($1.event); 562 550 if (err) { 563 551 free(list); 564 - YYABORT; 552 + PE_ABORT(err); 565 553 } 566 554 $$ = list; 567 555 } ··· 588 576 parse_events_terms__delete($4); 589 577 if (err) { 590 578 free(list); 591 - YYABORT; 579 + PE_ABORT(err); 592 580 } 593 581 $$ = list; 594 582 } ··· 612 600 parse_events_terms__delete($2); 613 601 if (err) { 614 602 free(list); 615 - YYABORT; 603 + PE_ABORT(err); 616 604 } 617 605 $$ = list; 618 606 } ··· 632 620 free($1); 633 621 if (err) { 634 622 free(list); 635 - YYABORT; 623 + PE_ABORT(err); 636 624 } 637 625 $$ = list; 638 626 } ··· 649 637 parse_events_terms__delete($2); 650 638 if (err) { 651 639 free(list); 652 - YYABORT; 640 + PE_ABORT(err); 653 641 } 654 642 $$ = list; 655 643 } ··· 724 712 PE_RAW 725 713 { 726 714 struct parse_events_term *term; 715 + int err = parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_RAW, 716 + strdup("raw"), $1, &@1, &@1); 727 717 728 - if (parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_RAW, 729 - strdup("raw"), $1, &@1, &@1)) { 718 + if (err) { 730 719 free($1); 731 - YYABORT; 720 + PE_ABORT(err); 732 721 } 733 722 $$ = term; 734 723 } ··· 737 724 name_or_raw '=' name_or_legacy 738 725 { 739 726 struct parse_events_term *term; 727 + int err = parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_USER, $1, $3, &@1, &@3); 740 728 741 - if (parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_USER, 742 - $1, $3, &@1, &@3)) { 729 + if (err) { 743 730 free($1); 744 731 free($3); 745 - YYABORT; 732 + PE_ABORT(err); 746 733 } 747 734 $$ = term; 748 735 } ··· 750 737 name_or_raw '=' PE_VALUE 751 738 { 752 739 struct parse_events_term *term; 740 + int err = parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_USER, 741 + $1, $3, false, &@1, &@3); 753 742 754 - if (parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_USER, 755 - $1, $3, false, &@1, &@3)) { 743 + if (err) { 756 744 free($1); 757 - YYABORT; 745 + PE_ABORT(err); 758 746 } 759 747 $$ = term; 760 748 } ··· 763 749 name_or_raw '=' PE_TERM_HW 764 750 { 765 751 struct parse_events_term *term; 752 + int err = parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_USER, 753 + $1, $3.str, &@1, &@3); 766 754 767 - if (parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_USER, 768 - $1, $3.str, &@1, &@3)) { 755 + if (err) { 769 756 free($1); 770 757 free($3.str); 771 - YYABORT; 758 + PE_ABORT(err); 772 759 } 773 760 $$ = term; 774 761 } ··· 777 762 PE_LEGACY_CACHE 778 763 { 779 764 struct parse_events_term *term; 765 + int err = parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_LEGACY_CACHE, 766 + $1, 1, true, &@1, NULL); 780 767 781 - if (parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_LEGACY_CACHE, 782 - $1, 1, true, &@1, NULL)) { 768 + if (err) { 783 769 free($1); 784 - YYABORT; 770 + PE_ABORT(err); 785 771 } 786 772 $$ = term; 787 773 } ··· 790 774 PE_NAME 791 775 { 792 776 struct parse_events_term *term; 777 + int err = parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_USER, 778 + $1, 1, true, &@1, NULL); 793 779 794 - if (parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_USER, 795 - $1, 1, true, &@1, NULL)) { 780 + if (err) { 796 781 free($1); 797 - YYABORT; 782 + PE_ABORT(err); 798 783 } 799 784 $$ = term; 800 785 } ··· 803 786 PE_TERM_HW 804 787 { 805 788 struct parse_events_term *term; 789 + int err = parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_HARDWARE, 790 + $1.str, $1.num & 255, false, &@1, NULL); 806 791 807 - if (parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_HARDWARE, 808 - $1.str, $1.num & 255, false, &@1, NULL)) { 792 + if (err) { 809 793 free($1.str); 810 - YYABORT; 794 + PE_ABORT(err); 811 795 } 812 796 $$ = term; 813 797 } ··· 816 798 PE_TERM '=' name_or_legacy 817 799 { 818 800 struct parse_events_term *term; 801 + int err = parse_events_term__str(&term, (int)$1, NULL, $3, &@1, &@3); 819 802 820 - if (parse_events_term__str(&term, (int)$1, NULL, $3, &@1, &@3)) { 803 + if (err) { 821 804 free($3); 822 - YYABORT; 805 + PE_ABORT(err); 823 806 } 824 807 $$ = term; 825 808 } ··· 828 809 PE_TERM '=' PE_TERM_HW 829 810 { 830 811 struct parse_events_term *term; 812 + int err = parse_events_term__str(&term, (int)$1, NULL, $3.str, &@1, &@3); 831 813 832 - if (parse_events_term__str(&term, (int)$1, NULL, $3.str, &@1, &@3)) { 814 + if (err) { 833 815 free($3.str); 834 - YYABORT; 816 + PE_ABORT(err); 835 817 } 836 818 $$ = term; 837 819 } ··· 840 820 PE_TERM '=' PE_TERM 841 821 { 842 822 struct parse_events_term *term; 823 + int err = parse_events_term__term(&term, (int)$1, (int)$3, &@1, &@3); 843 824 844 - ABORT_ON(parse_events_term__term(&term, (int)$1, (int)$3, &@1, &@3)); 825 + if (err) 826 + PE_ABORT(err); 827 + 845 828 $$ = term; 846 829 } 847 830 | 848 831 PE_TERM '=' PE_VALUE 849 832 { 850 833 struct parse_events_term *term; 834 + int err = parse_events_term__num(&term, (int)$1, NULL, $3, false, &@1, &@3); 851 835 852 - ABORT_ON(parse_events_term__num(&term, (int)$1, NULL, $3, false, &@1, &@3)); 836 + if (err) 837 + PE_ABORT(err); 838 + 853 839 $$ = term; 854 840 } 855 841 | 856 842 PE_TERM 857 843 { 858 844 struct parse_events_term *term; 845 + int err = parse_events_term__num(&term, (int)$1, NULL, 1, true, &@1, NULL); 859 846 860 - ABORT_ON(parse_events_term__num(&term, (int)$1, NULL, 1, true, &@1, NULL)); 847 + if (err) 848 + PE_ABORT(err); 849 + 861 850 $$ = term; 862 851 } 863 852 | 864 853 name_or_raw array '=' name_or_legacy 865 854 { 866 855 struct parse_events_term *term; 856 + int err = parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_USER, $1, $4, &@1, &@4); 867 857 868 - if (parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_USER, 869 - $1, $4, &@1, &@4)) { 858 + if (err) { 870 859 free($1); 871 860 free($4); 872 861 free($2.ranges); 873 - YYABORT; 862 + PE_ABORT(err); 874 863 } 875 864 term->array = $2; 876 865 $$ = term; ··· 888 859 name_or_raw array '=' PE_VALUE 889 860 { 890 861 struct parse_events_term *term; 862 + int err = parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_USER, $1, $4, false, &@1, &@4); 891 863 892 - if (parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_USER, 893 - $1, $4, false, &@1, &@4)) { 864 + if (err) { 894 865 free($1); 895 866 free($2.ranges); 896 - YYABORT; 867 + PE_ABORT(err); 897 868 } 898 869 term->array = $2; 899 870 $$ = term; ··· 903 874 { 904 875 struct parse_events_term *term; 905 876 char *config = strdup($1); 877 + int err; 906 878 907 879 if (!config) 908 880 YYNOMEM; 909 - if (parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_DRV_CFG, 910 - config, $1, &@1, NULL)) { 881 + err = parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_DRV_CFG, config, $1, &@1, NULL); 882 + if (err) { 911 883 free($1); 912 884 free(config); 913 - YYABORT; 885 + PE_ABORT(err); 914 886 } 915 887 $$ = term; 916 888 }