drivers/perf: hisi_pcie: Record hardware counts correctly
authorYicong Yang <yangyicong@hisilicon.com>
Thu, 29 Aug 2024 09:03:30 +0000 (17:03 +0800)
committerWill Deacon <will@kernel.org>
Fri, 30 Aug 2024 10:43:09 +0000 (11:43 +0100)
commitdaecd3373a16a039ad241086e30a1ec46fc9d61f
treed68ae2bdf74de4fe1765f37dfe041eb0d94007f9
parent5e9629d0ae977d6f6916d7e519724804e95f0b07
drivers/perf: hisi_pcie: Record hardware counts correctly

Currently we set the period and record it as the initial value of the
counter without checking it's set to the hardware successfully or not.
However the counter maybe unwritable if the target event is unsupported
by the device. In such case we will pass user a wrong count:

[start counts when setting the period]
hwc->prev_count = 0x8000000000000000
device.counter_value = 0 // the counter is not set as the period
[when user reads the counter]
event->count = device.counter_value - hwc->prev_count
             = 0x8000000000000000 // wrong. should be 0.

Fix this by record the hardware counter counts correctly when setting
the period.

Fixes: 8404b0fbc7fb ("drivers/perf: hisi: Add driver for HiSilicon PCIe PMU")
Signed-off-by: Yicong Yang <yangyicong@hisilicon.com>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Link: https://lore.kernel.org/r/20240829090332.28756-2-yangyicong@huawei.com
Signed-off-by: Will Deacon <will@kernel.org>
drivers/perf/hisilicon/hisi_pcie_pmu.c