Hi Qi, I love your patch! Perhaps something to improve:
[auto build test WARNING on linus/master] [also build test WARNING on v5.12-rc6] [cannot apply to next-20210407] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Qi-Liu/drivers-perf-hisi-Add-support-for-PCIe-PMU/20210407-175356 base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 2d743660786ec51f5c1fefd5782bbdee7b227db0 config: arm64-allyesconfig (attached as .config) compiler: aarch64-linux-gcc (GCC) 9.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/0day-ci/linux/commit/32d06137b5ddb94f1e951d1252994e7178fe5e8e git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Qi-Liu/drivers-perf-hisi-Add-support-for-PCIe-PMU/20210407-175356 git checkout 32d06137b5ddb94f1e951d1252994e7178fe5e8e # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arm64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> All warnings (new ones prefixed by >>): >> drivers/perf/pci/hisilicon/hisi_pcie_pmu.c:447:6: warning: no previous >> prototype for 'hisi_pcie_pmu_read' [-Wmissing-prototypes] 447 | void hisi_pcie_pmu_read(struct perf_event *event) | ^~~~~~~~~~~~~~~~~~ >> drivers/perf/pci/hisilicon/hisi_pcie_pmu.c:530:6: warning: no previous >> prototype for 'hisi_pcie_pmu_start' [-Wmissing-prototypes] 530 | void hisi_pcie_pmu_start(struct perf_event *event, int flags) | ^~~~~~~~~~~~~~~~~~~ >> drivers/perf/pci/hisilicon/hisi_pcie_pmu.c:558:6: warning: no previous >> prototype for 'hisi_pcie_pmu_stop' [-Wmissing-prototypes] 558 | void hisi_pcie_pmu_stop(struct perf_event *event, int flags) | ^~~~~~~~~~~~~~~~~~ >> drivers/perf/pci/hisilicon/hisi_pcie_pmu.c:577:5: warning: no previous >> prototype for 'hisi_pcie_pmu_add' [-Wmissing-prototypes] 577 | int hisi_pcie_pmu_add(struct perf_event *event, int flags) | ^~~~~~~~~~~~~~~~~ >> drivers/perf/pci/hisilicon/hisi_pcie_pmu.c:600:6: warning: no previous >> prototype for 'hisi_pcie_pmu_del' [-Wmissing-prototypes] 600 | void hisi_pcie_pmu_del(struct perf_event *event, int flags) | ^~~~~~~~~~~~~~~~~ >> drivers/perf/pci/hisilicon/hisi_pcie_pmu.c:610:6: warning: no previous >> prototype for 'hisi_pcie_pmu_enable' [-Wmissing-prototypes] 610 | void hisi_pcie_pmu_enable(struct pmu *pmu) | ^~~~~~~~~~~~~~~~~~~~ >> drivers/perf/pci/hisilicon/hisi_pcie_pmu.c:626:6: warning: no previous >> prototype for 'hisi_pcie_pmu_disable' [-Wmissing-prototypes] 626 | void hisi_pcie_pmu_disable(struct pmu *pmu) | ^~~~~~~~~~~~~~~~~~~~~ vim +/hisi_pcie_pmu_read +447 drivers/perf/pci/hisilicon/hisi_pcie_pmu.c 446 > 447 void hisi_pcie_pmu_read(struct perf_event *event) 448 { 449 struct hw_perf_event *hwc = &event->hw; 450 struct hw_perf_event_extra *hwc_ext = &hwc->extra_reg; 451 u64 new_cnt_ext, prev_cnt_ext; 452 u64 new_cnt, prev_cnt, delta; 453 454 hwc_ext = &hwc->extra_reg; 455 do { 456 prev_cnt = local64_read(&hwc->prev_count); 457 prev_cnt_ext = hwc_ext->config; 458 hisi_pcie_pmu_read_counter(event, &new_cnt, &new_cnt_ext); 459 } while (local64_cmpxchg(&hwc->prev_count, prev_cnt, 460 new_cnt) != prev_cnt); 461 462 hwc_ext->config = new_cnt_ext; 463 464 delta = hisi_pcie_pmu_process_data(event, new_cnt - prev_cnt, 465 new_cnt_ext - prev_cnt_ext); 466 local64_add(delta, &event->count); 467 } 468 469 static void hisi_pcie_pmu_set_period(struct perf_event *event) 470 { 471 struct hw_perf_event *hwc = &event->hw; 472 struct hw_perf_event_extra *hwc_ext; 473 u64 val = BIT_ULL(HISI_PCIE_COUNTER_BITS - 1); 474 475 hwc_ext = &hwc->extra_reg; 476 local64_set(&hwc->prev_count, val); 477 hwc_ext->config = 0; 478 hisi_pcie_pmu_write_counter(event, val, 0); 479 } 480 481 static void hisi_pcie_pmu_enable_counter(struct hisi_pcie_pmu *pcie_pmu, 482 struct hw_perf_event *hwc) 483 { 484 u32 idx = hwc->idx; 485 u64 val; 486 487 val = hisi_pcie_pmu_readq(pcie_pmu, HISI_PCIE_EVENT_CTRL, idx); 488 val |= HISI_PCIE_EVENT_EN; 489 hisi_pcie_pmu_writeq(pcie_pmu, HISI_PCIE_EVENT_CTRL, idx, val); 490 } 491 492 static void hisi_pcie_pmu_disable_counter(struct hisi_pcie_pmu *pcie_pmu, 493 struct hw_perf_event *hwc) 494 { 495 u32 idx = hwc->idx; 496 u64 val; 497 498 val = hisi_pcie_pmu_readq(pcie_pmu, HISI_PCIE_EVENT_CTRL, idx); 499 val &= ~HISI_PCIE_EVENT_EN; 500 hisi_pcie_pmu_writeq(pcie_pmu, HISI_PCIE_EVENT_CTRL, idx, val); 501 } 502 503 static void hisi_pcie_pmu_enable_int(struct hisi_pcie_pmu *pcie_pmu, 504 struct hw_perf_event *hwc) 505 { 506 u32 idx = hwc->idx; 507 508 hisi_pcie_pmu_writel(pcie_pmu, HISI_PCIE_INT_MASK, idx, 0); 509 } 510 511 static void hisi_pcie_pmu_disable_int(struct hisi_pcie_pmu *pcie_pmu, 512 struct hw_perf_event *hwc) 513 { 514 u32 idx = hwc->idx; 515 516 hisi_pcie_pmu_writel(pcie_pmu, HISI_PCIE_INT_MASK, idx, 1); 517 } 518 519 static void hisi_pcie_pmu_reset_counter(struct hisi_pcie_pmu *pcie_pmu, 520 struct hw_perf_event *hwc) 521 { 522 u32 idx = hwc->idx; 523 524 hisi_pcie_pmu_writeq(pcie_pmu, HISI_PCIE_EVENT_CTRL, idx, 525 HISI_PCIE_RESET_CNT); 526 hisi_pcie_pmu_writeq(pcie_pmu, HISI_PCIE_EVENT_CTRL, idx, 527 HISI_PCIE_DEFAULT_SET); 528 } 529 > 530 void hisi_pcie_pmu_start(struct perf_event *event, int flags) 531 { 532 struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(event->pmu); 533 struct hw_perf_event *hwc = &event->hw; 534 struct hw_perf_event_extra *hwc_ext; 535 u64 prev_cnt, prev_cnt_ext; 536 537 hwc_ext = &hwc->extra_reg; 538 if (WARN_ON_ONCE(!(hwc->state & PERF_HES_STOPPED))) 539 return; 540 541 WARN_ON_ONCE(!(hwc->state & PERF_HES_UPTODATE)); 542 hwc->state = 0; 543 544 hisi_pcie_pmu_config_filter(event); 545 hisi_pcie_pmu_enable_counter(pcie_pmu, hwc); 546 hisi_pcie_pmu_enable_int(pcie_pmu, hwc); 547 hisi_pcie_pmu_set_period(event); 548 549 if (flags & PERF_EF_RELOAD) { 550 prev_cnt = local64_read(&hwc->prev_count); 551 prev_cnt_ext = hwc_ext->config; 552 hisi_pcie_pmu_write_counter(event, prev_cnt, prev_cnt_ext); 553 } 554 555 perf_event_update_userpage(event); 556 } 557 > 558 void hisi_pcie_pmu_stop(struct perf_event *event, int flags) 559 { 560 struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(event->pmu); 561 struct hw_perf_event *hwc = &event->hw; 562 563 hisi_pcie_pmu_read(event); 564 hisi_pcie_pmu_disable_int(pcie_pmu, hwc); 565 hisi_pcie_pmu_disable_counter(pcie_pmu, hwc); 566 hisi_pcie_pmu_clear_filter(event); 567 WARN_ON_ONCE(hwc->state & PERF_HES_STOPPED); 568 hwc->state |= PERF_HES_STOPPED; 569 570 if (hwc->state & PERF_HES_UPTODATE) 571 return; 572 573 574 hwc->state |= PERF_HES_UPTODATE; 575 } 576 > 577 int hisi_pcie_pmu_add(struct perf_event *event, int flags) 578 { 579 struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(event->pmu); 580 struct hw_perf_event *hwc = &event->hw; 581 int idx; 582 583 hwc->state = PERF_HES_STOPPED | PERF_HES_UPTODATE; 584 idx = hisi_pcie_pmu_get_event_idx(pcie_pmu); 585 if (idx < 0) 586 return idx; 587 588 hwc->idx = idx; 589 pcie_pmu->hw_events[idx] = event; 590 591 /* Reset PMC to avoid interference caused by previous statistic. */ 592 hisi_pcie_pmu_reset_counter(pcie_pmu, hwc); 593 594 if (flags & PERF_EF_START) 595 hisi_pcie_pmu_start(event, PERF_EF_RELOAD); 596 597 return 0; 598 } 599 > 600 void hisi_pcie_pmu_del(struct perf_event *event, int flags) 601 { 602 struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(event->pmu); 603 struct hw_perf_event *hwc = &event->hw; 604 605 hisi_pcie_pmu_stop(event, PERF_EF_UPDATE); 606 pcie_pmu->hw_events[hwc->idx] = NULL; 607 perf_event_update_userpage(event); 608 } 609 > 610 void hisi_pcie_pmu_enable(struct pmu *pmu) 611 { 612 struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(pmu); 613 int num; 614 615 for (num = 0; num < HISI_PCIE_MAX_COUNTERS; num++) { 616 if (pcie_pmu->hw_events[num]) 617 break; 618 } 619 620 if (num == HISI_PCIE_MAX_COUNTERS) 621 return; 622 623 writel(HISI_PCIE_GLOBAL_EN, pcie_pmu->base + HISI_PCIE_GLOBAL_CTRL); 624 } 625 > 626 void hisi_pcie_pmu_disable(struct pmu *pmu) 627 { 628 struct hisi_pcie_pmu *pcie_pmu = to_pcie_pmu(pmu); 629 630 writel(HISI_PCIE_GLOBAL_NONE, pcie_pmu->base + HISI_PCIE_GLOBAL_CTRL); 631 } 632 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected]
.config.gz
Description: application/gzip

