From: Sandipan Das <sandipan....@amd.com>

Not all x86 processors have fixed counters. It may also be the case that
a processor has only fixed counters and no general-purpose counters. Set
the bit widths corresponding to each counter type only if such counters
are available.

Fixes: b3d9468a8bd2 ("perf, x86: Expose perf capability to other modules")
Signed-off-by: Sandipan Das <sandipan....@amd.com>
Co-developed-by: Dapeng Mi <dapeng1...@linux.intel.com>
Signed-off-by: Dapeng Mi <dapeng1...@linux.intel.com>
Signed-off-by: Mingwei Zhang <mizh...@google.com>
---
 arch/x86/events/core.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
index 96a173bbbec2..7c852ee3e217 100644
--- a/arch/x86/events/core.c
+++ b/arch/x86/events/core.c
@@ -3107,8 +3107,8 @@ void perf_get_x86_pmu_capability(struct 
x86_pmu_capability *cap)
        cap->version            = x86_pmu.version;
        cap->num_counters_gp    = x86_pmu_num_counters(NULL);
        cap->num_counters_fixed = x86_pmu_num_counters_fixed(NULL);
-       cap->bit_width_gp       = x86_pmu.cntval_bits;
-       cap->bit_width_fixed    = x86_pmu.cntval_bits;
+       cap->bit_width_gp       = cap->num_counters_gp ? x86_pmu.cntval_bits : 
0;
+       cap->bit_width_fixed    = cap->num_counters_fixed ? x86_pmu.cntval_bits 
: 0;
        cap->events_mask        = (unsigned int)x86_pmu.events_maskl;
        cap->events_mask_len    = x86_pmu.events_mask_len;
        cap->pebs_ept           = x86_pmu.pebs_ept;
-- 
2.49.0.395.g12beb8f557-goog


Reply via email to