All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH 1/2] drivers/perf: hisi: Add driver for HiSilicon PCIe PMU
Date: Wed, 07 Apr 2021 21:53:29 +0800	[thread overview]
Message-ID: <202104072119.RSTnNddW-lkp@intel.com> (raw)
In-Reply-To: <1617788943-52722-2-git-send-email-liuqi115@huawei.com>

[-- Attachment #1: Type: text/plain, Size: 9719 bytes --]

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 <lkp@intel.com>

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/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 76772 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Qi Liu <liuqi115@huawei.com>, will@kernel.org, mark.rutland@arm.com
Cc: kbuild-all@lists.01.org, zhangshaokun@hisilicon.com,
	linuxarm@huawei.com, linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/2] drivers/perf: hisi: Add driver for HiSilicon PCIe PMU
Date: Wed, 7 Apr 2021 21:53:29 +0800	[thread overview]
Message-ID: <202104072119.RSTnNddW-lkp@intel.com> (raw)
In-Reply-To: <1617788943-52722-2-git-send-email-liuqi115@huawei.com>

[-- Attachment #1: Type: text/plain, Size: 9471 bytes --]

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 <lkp@intel.com>

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/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 76772 bytes --]

  reply	other threads:[~2021-04-07 13:53 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-07  9:49 [PATCH 0/2] drivers/perf: hisi: Add support for PCIe PMU Qi Liu
2021-04-07  9:49 ` Qi Liu
2021-04-07  9:49 ` [PATCH 1/2] drivers/perf: hisi: Add driver for HiSilicon " Qi Liu
2021-04-07  9:49   ` Qi Liu
2021-04-07 13:53   ` kernel test robot [this message]
2021-04-07 13:53     ` kernel test robot
2021-04-07 20:40   ` Will Deacon
2021-04-07 20:40     ` Will Deacon
2021-04-08  9:01     ` Jonathan Cameron
2021-04-08  9:01       ` Jonathan Cameron
2021-04-08 12:55       ` John Garry
2021-04-08 12:55         ` John Garry
2021-04-08 13:28         ` Will Deacon
2021-04-08 13:28           ` Will Deacon
2021-04-07  9:49 ` [PATCH 2/2] docs: perf: Add description for HiSilicon PCIe PMU driver Qi Liu
2021-04-07  9:49   ` Qi Liu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202104072119.RSTnNddW-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild-all@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.