[Intel-xe] [PATCH] fixup! drm/xe/pmu: Enable PMU interface

Aravind Iddamsetty aravind.iddamsetty at linux.intel.com
Mon Oct 16 06:07:14 UTC 2023


On 14/10/23 01:52, Rodrigo Vivi wrote:
> On Fri, Oct 13, 2023 at 08:23:21AM +0530, Aravind Iddamsetty wrote:
>> Drop interrupt event from PMU as that is not useful and not being used
>> by any UMD.
> Let's make this a standalone patch instead of a fixup, and integrate
> to Francois take 2.

Ok, will make the change and resend.

Thanks,
Aravind.
>
>> Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
>> Cc: Tvrtko Ursulin <tvrtko.ursulin at linux.intel.com>
>> Signed-off-by: Aravind Iddamsetty <aravind.iddamsetty at linux.intel.com>
>> ---
>>  drivers/gpu/drm/xe/xe_irq.c       | 18 ------------------
>>  drivers/gpu/drm/xe/xe_pmu.c       |  9 ---------
>>  drivers/gpu/drm/xe/xe_pmu_types.h |  8 --------
>>  include/uapi/drm/xe_drm.h         | 13 ++++++-------
>>  4 files changed, 6 insertions(+), 42 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
>> index def9369eb488..4c22b97047b3 100644
>> --- a/drivers/gpu/drm/xe/xe_irq.c
>> +++ b/drivers/gpu/drm/xe/xe_irq.c
>> @@ -27,20 +27,6 @@
>>  #define IIR(offset)				XE_REG(offset + 0x8)
>>  #define IER(offset)				XE_REG(offset + 0xc)
>>  
>> -/*
>> - * Interrupt statistic for PMU. Increments the counter only if the
>> - * interrupt originated from the GPU so interrupts from a device which
>> - * shares the interrupt line are not accounted.
>> - */
>> -static __always_inline void xe_pmu_irq_stats(struct xe_device *xe)
>> -{
>> -	/*
>> -	 * A clever compiler translates that into INC. A not so clever one
>> -	 * should at least prevent store tearing.
>> -	 */
>> -	WRITE_ONCE(xe->pmu.irq_count, xe->pmu.irq_count + 1);
>> -}
>> -
>>  static void assert_iir_is_zero(struct xe_gt *mmio, struct xe_reg reg)
>>  {
>>  	u32 val = xe_mmio_read32(mmio, reg);
>> @@ -351,8 +337,6 @@ static irqreturn_t xelp_irq_handler(int irq, void *arg)
>>  
>>  	xe_display_irq_enable(xe, gu_misc_iir);
>>  
>> -	xe_pmu_irq_stats(xe);
>> -
>>  	return IRQ_HANDLED;
>>  }
>>  
>> @@ -449,8 +433,6 @@ static irqreturn_t dg1_irq_handler(int irq, void *arg)
>>  	dg1_intr_enable(xe, false);
>>  	xe_display_irq_enable(xe, gu_misc_iir);
>>  
>> -	xe_pmu_irq_stats(xe);
>> -
>>  	return IRQ_HANDLED;
>>  }
>>  
>> diff --git a/drivers/gpu/drm/xe/xe_pmu.c b/drivers/gpu/drm/xe/xe_pmu.c
>> index abfc0b3aeac4..318bbc9c1c9b 100644
>> --- a/drivers/gpu/drm/xe/xe_pmu.c
>> +++ b/drivers/gpu/drm/xe/xe_pmu.c
>> @@ -114,10 +114,6 @@ config_status(struct xe_device *xe, u64 config)
>>  		return -ENOENT;
>>  
>>  	switch (config_counter(config)) {
>> -	case XE_PMU_INTERRUPTS(0):
>> -		if (gt_id)
>> -			return -ENOENT;
>> -		break;
>>  	case XE_PMU_RENDER_GROUP_BUSY(0):
>>  	case XE_PMU_COPY_GROUP_BUSY(0):
>>  	case XE_PMU_ANY_ENGINE_GROUP_BUSY(0):
>> @@ -181,13 +177,9 @@ static u64 __xe_pmu_event_read(struct perf_event *event)
>>  	const unsigned int gt_id = config_gt_id(event->attr.config);
>>  	const u64 config = event->attr.config;
>>  	struct xe_gt *gt = xe_device_get_gt(xe, gt_id);
>> -	struct xe_pmu *pmu = &xe->pmu;
>>  	u64 val;
>>  
>>  	switch (config_counter(config)) {
>> -	case XE_PMU_INTERRUPTS(0):
>> -		val = READ_ONCE(pmu->irq_count);
>> -		break;
>>  	case XE_PMU_RENDER_GROUP_BUSY(0):
>>  	case XE_PMU_COPY_GROUP_BUSY(0):
>>  	case XE_PMU_ANY_ENGINE_GROUP_BUSY(0):
>> @@ -361,7 +353,6 @@ create_event_attributes(struct xe_pmu *pmu)
>>  		const char *unit;
>>  		bool global;
>>  	} events[] = {
>> -		__global_event(0, "interrupts", NULL),
>>  		__event(1, "render-group-busy", "ns"),
>>  		__event(2, "copy-group-busy", "ns"),
>>  		__event(3, "media-group-busy", "ns"),
>> diff --git a/drivers/gpu/drm/xe/xe_pmu_types.h b/drivers/gpu/drm/xe/xe_pmu_types.h
>> index 4ccc7e9042f6..9cadbd243f57 100644
>> --- a/drivers/gpu/drm/xe/xe_pmu_types.h
>> +++ b/drivers/gpu/drm/xe/xe_pmu_types.h
>> @@ -51,14 +51,6 @@ struct xe_pmu {
>>  	 *
>>  	 */
>>  	u64 sample[XE_PMU_MAX_GT][__XE_NUM_PMU_SAMPLERS];
>> -	/**
>> -	 * @irq_count: Number of interrupts
>> -	 *
>> -	 * Intentionally unsigned long to avoid atomics or heuristics on 32bit.
>> -	 * 4e9 interrupts are a lot and postprocessing can really deal with an
>> -	 * occasional wraparound easily. It's 32bit after all.
>> -	 */
>> -	unsigned long irq_count;
>>  	/**
>>  	 * @events_attr_group: Device events attribute group.
>>  	 */
>> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
>> index d48d8e3c898c..b183c9693887 100644
>> --- a/include/uapi/drm/xe_drm.h
>> +++ b/include/uapi/drm/xe_drm.h
>> @@ -1060,7 +1060,7 @@ struct drm_xe_vm_madvise {
>>   * in 'struct perf_event_attr' as part of perf_event_open syscall to read a
>>   * particular event.
>>   *
>> - * For example to open the XE_PMU_INTERRUPTS(0):
>> + * For example to open the XE_PMU_RENDER_GROUP_BUSY(0):
>>   *
>>   * .. code-block:: C
>>   *
>> @@ -1074,7 +1074,7 @@ struct drm_xe_vm_madvise {
>>   *	attr.read_format = PERF_FORMAT_TOTAL_TIME_ENABLED;
>>   *	attr.use_clockid = 1;
>>   *	attr.clockid = CLOCK_MONOTONIC;
>> - *	attr.config = XE_PMU_INTERRUPTS(0);
>> + *	attr.config = XE_PMU_RENDER_GROUP_BUSY(0);
>>   *
>>   *	fd = syscall(__NR_perf_event_open, &attr, -1, cpu, -1, 0);
>>   */
>> @@ -1087,11 +1087,10 @@ struct drm_xe_vm_madvise {
>>  #define ___XE_PMU_OTHER(gt, x) \
>>  	(((__u64)(x)) | ((__u64)(gt) << __XE_PMU_GT_SHIFT))
>>  
>> -#define XE_PMU_INTERRUPTS(gt)			___XE_PMU_OTHER(gt, 0)
>> -#define XE_PMU_RENDER_GROUP_BUSY(gt)		___XE_PMU_OTHER(gt, 1)
>> -#define XE_PMU_COPY_GROUP_BUSY(gt)		___XE_PMU_OTHER(gt, 2)
>> -#define XE_PMU_MEDIA_GROUP_BUSY(gt)		___XE_PMU_OTHER(gt, 3)
>> -#define XE_PMU_ANY_ENGINE_GROUP_BUSY(gt)	___XE_PMU_OTHER(gt, 4)
>> +#define XE_PMU_RENDER_GROUP_BUSY(gt)		___XE_PMU_OTHER(gt, 0)
>> +#define XE_PMU_COPY_GROUP_BUSY(gt)		___XE_PMU_OTHER(gt, 1)
>> +#define XE_PMU_MEDIA_GROUP_BUSY(gt)		___XE_PMU_OTHER(gt, 2)
>> +#define XE_PMU_ANY_ENGINE_GROUP_BUSY(gt)	___XE_PMU_OTHER(gt, 3)
>>  
>>  #if defined(__cplusplus)
>>  }
>> -- 
>> 2.25.1
>>


More information about the Intel-xe mailing list