mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
drm/i915/pmu: Change bitmask of enabled events to u32
Having it as u64 was a confusing (but harmless) mistake. Also add some asserts to make sure the internal field does not overflow in the future. v2: Fix WARN_ON firing for INTERRUPT event (Umesh) Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com> Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230519154946.3751971-2-umesh.nerlige.ramappa@intel.com
This commit is contained in:
parent
25553494b2
commit
a644fde77f
1 changed files with 18 additions and 8 deletions
|
@ -50,7 +50,7 @@ static u8 engine_event_instance(struct perf_event *event)
|
||||||
return (event->attr.config >> I915_PMU_SAMPLE_BITS) & 0xff;
|
return (event->attr.config >> I915_PMU_SAMPLE_BITS) & 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_engine_config(u64 config)
|
static bool is_engine_config(const u64 config)
|
||||||
{
|
{
|
||||||
return config < __I915_PMU_OTHER(0);
|
return config < __I915_PMU_OTHER(0);
|
||||||
}
|
}
|
||||||
|
@ -88,9 +88,20 @@ static unsigned int config_bit(const u64 config)
|
||||||
return other_bit(config);
|
return other_bit(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
static u64 config_mask(u64 config)
|
static u32 config_mask(const u64 config)
|
||||||
{
|
{
|
||||||
return BIT_ULL(config_bit(config));
|
unsigned int bit = config_bit(config);
|
||||||
|
|
||||||
|
if (__builtin_constant_p(config))
|
||||||
|
BUILD_BUG_ON(bit >
|
||||||
|
BITS_PER_TYPE(typeof_member(struct i915_pmu,
|
||||||
|
enable)) - 1);
|
||||||
|
else
|
||||||
|
WARN_ON_ONCE(bit >
|
||||||
|
BITS_PER_TYPE(typeof_member(struct i915_pmu,
|
||||||
|
enable)) - 1);
|
||||||
|
|
||||||
|
return BIT(config_bit(config));
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_engine_event(struct perf_event *event)
|
static bool is_engine_event(struct perf_event *event)
|
||||||
|
@ -633,11 +644,10 @@ static void i915_pmu_enable(struct perf_event *event)
|
||||||
{
|
{
|
||||||
struct drm_i915_private *i915 =
|
struct drm_i915_private *i915 =
|
||||||
container_of(event->pmu, typeof(*i915), pmu.base);
|
container_of(event->pmu, typeof(*i915), pmu.base);
|
||||||
|
const unsigned int bit = event_bit(event);
|
||||||
struct i915_pmu *pmu = &i915->pmu;
|
struct i915_pmu *pmu = &i915->pmu;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
unsigned int bit;
|
|
||||||
|
|
||||||
bit = event_bit(event);
|
|
||||||
if (bit == -1)
|
if (bit == -1)
|
||||||
goto update;
|
goto update;
|
||||||
|
|
||||||
|
@ -651,7 +661,7 @@ static void i915_pmu_enable(struct perf_event *event)
|
||||||
GEM_BUG_ON(bit >= ARRAY_SIZE(pmu->enable_count));
|
GEM_BUG_ON(bit >= ARRAY_SIZE(pmu->enable_count));
|
||||||
GEM_BUG_ON(pmu->enable_count[bit] == ~0);
|
GEM_BUG_ON(pmu->enable_count[bit] == ~0);
|
||||||
|
|
||||||
pmu->enable |= BIT_ULL(bit);
|
pmu->enable |= BIT(bit);
|
||||||
pmu->enable_count[bit]++;
|
pmu->enable_count[bit]++;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -698,7 +708,7 @@ static void i915_pmu_disable(struct perf_event *event)
|
||||||
{
|
{
|
||||||
struct drm_i915_private *i915 =
|
struct drm_i915_private *i915 =
|
||||||
container_of(event->pmu, typeof(*i915), pmu.base);
|
container_of(event->pmu, typeof(*i915), pmu.base);
|
||||||
unsigned int bit = event_bit(event);
|
const unsigned int bit = event_bit(event);
|
||||||
struct i915_pmu *pmu = &i915->pmu;
|
struct i915_pmu *pmu = &i915->pmu;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
|
@ -734,7 +744,7 @@ static void i915_pmu_disable(struct perf_event *event)
|
||||||
* bitmask when the last listener on an event goes away.
|
* bitmask when the last listener on an event goes away.
|
||||||
*/
|
*/
|
||||||
if (--pmu->enable_count[bit] == 0) {
|
if (--pmu->enable_count[bit] == 0) {
|
||||||
pmu->enable &= ~BIT_ULL(bit);
|
pmu->enable &= ~BIT(bit);
|
||||||
pmu->timer_enabled &= pmu_needs_timer(pmu, true);
|
pmu->timer_enabled &= pmu_needs_timer(pmu, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue