All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
	Jerry Snitselaar <jsnitsel@redhat.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	linux-kernel@vger.kernel.org,
	Tvrtko Ursulin <tvrtko.ursulin@intel.com>,
	Chris Wilson <chris@chris-wilson.co.uk>
Cc: Jason Gunthorpe <jgg@ziepe.ca>,
	Peter Zijlstra <peterz@infradead.org>,
	intel-gfx@lists.freedesktop.org,
	Matthew Garrett <mjg59@google.com>,
	James Bottomley <James.Bottomley@HansenPartnership.com>,
	David Airlie <airlied@linux.ie>,
	Jarkko Sakkinen <jarkko@kernel.org>,
	dri-devel@lists.freedesktop.org, linux-integrity@vger.kernel.org,
	Peter Huewe <peterhuewe@gmx.de>
Subject: Re: [Intel-gfx] [PATCH v3 2/4] drm/i915/pmu: Use kstat_irqs to get interrupt count
Date: Thu, 10 Dec 2020 10:45:34 +0000	[thread overview]
Message-ID: <e9892cc4-6344-be07-66b5-236b8576100e@linux.intel.com> (raw)
In-Reply-To: <160758677957.5062.15497765500689083558@jlahtine-mobl.ger.corp.intel.com>


On 10/12/2020 07:53, Joonas Lahtinen wrote:
> + Tvrtko and Chris for comments
> 
> Code seems to be added in:
> 
> commit 0cd4684d6ea9a4ffec33fc19de4dd667bb90d0a5
> Author: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Date:   Tue Nov 21 18:18:50 2017 +0000
> 
>      drm/i915/pmu: Add interrupt count metric
> 
> I think later in the thread there was a suggestion to replace this with
> simple counter increment in IRQ handler.

It was indeed unsafe until recent b00bccb3f0bb ("drm/i915/pmu: Handle 
PCI unbind") but now should be fine.

If kstat_irqs does not get exported it is easy enough for i915 to keep a 
local counter. Reasoning was very infrequent per cpu summation is much 
cheaper than very frequent atomic add. Up to thousands of interrupts per 
second vs "once per second" PMU read kind of thing.

Regards,

Tvrtko

> Quoting Thomas Gleixner (2020-12-06 18:38:44)
>> On Fri, Dec 04 2020 at 18:43, Jerry Snitselaar wrote:
>>
>>> Now that kstat_irqs is exported, get rid of count_interrupts in
>>> i915_pmu.c
>>> --- a/drivers/gpu/drm/i915/i915_pmu.c
>>> +++ b/drivers/gpu/drm/i915/i915_pmu.c
>>> @@ -423,22 +423,6 @@ static enum hrtimer_restart i915_sample(struct hrtimer *hrtimer)
>>>        return HRTIMER_RESTART;
>>>   }
>>>   
>>> -static u64 count_interrupts(struct drm_i915_private *i915)
>>> -{
>>> -     /* open-coded kstat_irqs() */
>>> -     struct irq_desc *desc = irq_to_desc(i915->drm.pdev->irq);
>>> -     u64 sum = 0;
>>> -     int cpu;
>>> -
>>> -     if (!desc || !desc->kstat_irqs)
>>> -             return 0;
>>> -
>>> -     for_each_possible_cpu(cpu)
>>> -             sum += *per_cpu_ptr(desc->kstat_irqs, cpu);
>>> -
>>> -     return sum;
>>> -}
>>
>> May I ask why this has been merged in the first place?
>>
>> Nothing in a driver has ever to fiddle with the internals of an irq
>> descriptor. We have functions for properly accessing them. Just because
>> C allows to fiddle with everything is not a justification. If the
>> required function is not exported then adding the export with a proper
>> explanation is not asked too much.
>>
>> Also this lacks protection or at least a comment why this can be called
>> safely and is not subject to a concurrent removal of the irq descriptor.
>> The same problem exists when calling kstat_irqs(). It's even documented
>> at the top of the function.
>>
>> Thanks,
>>
>>          tglx
>>
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> 

WARNING: multiple messages have this Message-ID (diff)
From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
	Jerry Snitselaar <jsnitsel@redhat.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	linux-kernel@vger.kernel.org,
	Tvrtko Ursulin <tvrtko.ursulin@intel.com>,
	Chris Wilson <chris@chris-wilson.co.uk>
Cc: David Airlie <airlied@linux.ie>,
	Peter Zijlstra <peterz@infradead.org>,
	intel-gfx@lists.freedesktop.org,
	Matthew Garrett <mjg59@google.com>,
	James Bottomley <James.Bottomley@HansenPartnership.com>,
	Jason Gunthorpe <jgg@ziepe.ca>,
	Jarkko Sakkinen <jarkko@kernel.org>,
	dri-devel@lists.freedesktop.org, linux-integrity@vger.kernel.org,
	Peter Huewe <peterhuewe@gmx.de>
Subject: Re: [Intel-gfx] [PATCH v3 2/4] drm/i915/pmu: Use kstat_irqs to get interrupt count
Date: Thu, 10 Dec 2020 10:45:34 +0000	[thread overview]
Message-ID: <e9892cc4-6344-be07-66b5-236b8576100e@linux.intel.com> (raw)
In-Reply-To: <160758677957.5062.15497765500689083558@jlahtine-mobl.ger.corp.intel.com>


On 10/12/2020 07:53, Joonas Lahtinen wrote:
> + Tvrtko and Chris for comments
> 
> Code seems to be added in:
> 
> commit 0cd4684d6ea9a4ffec33fc19de4dd667bb90d0a5
> Author: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Date:   Tue Nov 21 18:18:50 2017 +0000
> 
>      drm/i915/pmu: Add interrupt count metric
> 
> I think later in the thread there was a suggestion to replace this with
> simple counter increment in IRQ handler.

It was indeed unsafe until recent b00bccb3f0bb ("drm/i915/pmu: Handle 
PCI unbind") but now should be fine.

If kstat_irqs does not get exported it is easy enough for i915 to keep a 
local counter. Reasoning was very infrequent per cpu summation is much 
cheaper than very frequent atomic add. Up to thousands of interrupts per 
second vs "once per second" PMU read kind of thing.

Regards,

Tvrtko

> Quoting Thomas Gleixner (2020-12-06 18:38:44)
>> On Fri, Dec 04 2020 at 18:43, Jerry Snitselaar wrote:
>>
>>> Now that kstat_irqs is exported, get rid of count_interrupts in
>>> i915_pmu.c
>>> --- a/drivers/gpu/drm/i915/i915_pmu.c
>>> +++ b/drivers/gpu/drm/i915/i915_pmu.c
>>> @@ -423,22 +423,6 @@ static enum hrtimer_restart i915_sample(struct hrtimer *hrtimer)
>>>        return HRTIMER_RESTART;
>>>   }
>>>   
>>> -static u64 count_interrupts(struct drm_i915_private *i915)
>>> -{
>>> -     /* open-coded kstat_irqs() */
>>> -     struct irq_desc *desc = irq_to_desc(i915->drm.pdev->irq);
>>> -     u64 sum = 0;
>>> -     int cpu;
>>> -
>>> -     if (!desc || !desc->kstat_irqs)
>>> -             return 0;
>>> -
>>> -     for_each_possible_cpu(cpu)
>>> -             sum += *per_cpu_ptr(desc->kstat_irqs, cpu);
>>> -
>>> -     return sum;
>>> -}
>>
>> May I ask why this has been merged in the first place?
>>
>> Nothing in a driver has ever to fiddle with the internals of an irq
>> descriptor. We have functions for properly accessing them. Just because
>> C allows to fiddle with everything is not a justification. If the
>> required function is not exported then adding the export with a proper
>> explanation is not asked too much.
>>
>> Also this lacks protection or at least a comment why this can be called
>> safely and is not subject to a concurrent removal of the irq descriptor.
>> The same problem exists when calling kstat_irqs(). It's even documented
>> at the top of the function.
>>
>> Thanks,
>>
>>          tglx
>>
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> 
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

WARNING: multiple messages have this Message-ID (diff)
From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
	Jerry Snitselaar <jsnitsel@redhat.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	linux-kernel@vger.kernel.org,
	Tvrtko Ursulin <tvrtko.ursulin@intel.com>,
	Chris Wilson <chris@chris-wilson.co.uk>
Cc: David Airlie <airlied@linux.ie>,
	Peter Zijlstra <peterz@infradead.org>,
	intel-gfx@lists.freedesktop.org,
	Matthew Garrett <mjg59@google.com>,
	James Bottomley <James.Bottomley@HansenPartnership.com>,
	Jason Gunthorpe <jgg@ziepe.ca>,
	Jarkko Sakkinen <jarkko@kernel.org>,
	dri-devel@lists.freedesktop.org, linux-integrity@vger.kernel.org,
	Peter Huewe <peterhuewe@gmx.de>
Subject: Re: [Intel-gfx] [PATCH v3 2/4] drm/i915/pmu: Use kstat_irqs to get interrupt count
Date: Thu, 10 Dec 2020 10:45:34 +0000	[thread overview]
Message-ID: <e9892cc4-6344-be07-66b5-236b8576100e@linux.intel.com> (raw)
In-Reply-To: <160758677957.5062.15497765500689083558@jlahtine-mobl.ger.corp.intel.com>


On 10/12/2020 07:53, Joonas Lahtinen wrote:
> + Tvrtko and Chris for comments
> 
> Code seems to be added in:
> 
> commit 0cd4684d6ea9a4ffec33fc19de4dd667bb90d0a5
> Author: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Date:   Tue Nov 21 18:18:50 2017 +0000
> 
>      drm/i915/pmu: Add interrupt count metric
> 
> I think later in the thread there was a suggestion to replace this with
> simple counter increment in IRQ handler.

It was indeed unsafe until recent b00bccb3f0bb ("drm/i915/pmu: Handle 
PCI unbind") but now should be fine.

If kstat_irqs does not get exported it is easy enough for i915 to keep a 
local counter. Reasoning was very infrequent per cpu summation is much 
cheaper than very frequent atomic add. Up to thousands of interrupts per 
second vs "once per second" PMU read kind of thing.

Regards,

Tvrtko

> Quoting Thomas Gleixner (2020-12-06 18:38:44)
>> On Fri, Dec 04 2020 at 18:43, Jerry Snitselaar wrote:
>>
>>> Now that kstat_irqs is exported, get rid of count_interrupts in
>>> i915_pmu.c
>>> --- a/drivers/gpu/drm/i915/i915_pmu.c
>>> +++ b/drivers/gpu/drm/i915/i915_pmu.c
>>> @@ -423,22 +423,6 @@ static enum hrtimer_restart i915_sample(struct hrtimer *hrtimer)
>>>        return HRTIMER_RESTART;
>>>   }
>>>   
>>> -static u64 count_interrupts(struct drm_i915_private *i915)
>>> -{
>>> -     /* open-coded kstat_irqs() */
>>> -     struct irq_desc *desc = irq_to_desc(i915->drm.pdev->irq);
>>> -     u64 sum = 0;
>>> -     int cpu;
>>> -
>>> -     if (!desc || !desc->kstat_irqs)
>>> -             return 0;
>>> -
>>> -     for_each_possible_cpu(cpu)
>>> -             sum += *per_cpu_ptr(desc->kstat_irqs, cpu);
>>> -
>>> -     return sum;
>>> -}
>>
>> May I ask why this has been merged in the first place?
>>
>> Nothing in a driver has ever to fiddle with the internals of an irq
>> descriptor. We have functions for properly accessing them. Just because
>> C allows to fiddle with everything is not a justification. If the
>> required function is not exported then adding the export with a proper
>> explanation is not asked too much.
>>
>> Also this lacks protection or at least a comment why this can be called
>> safely and is not subject to a concurrent removal of the irq descriptor.
>> The same problem exists when calling kstat_irqs(). It's even documented
>> at the top of the function.
>>
>> Thanks,
>>
>>          tglx
>>
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2020-12-10 10:47 UTC|newest]

Thread overview: 87+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-05  1:43 [PATCH v3 0/4] tpm_tis: Detect interrupt storms Jerry Snitselaar
2020-12-05  1:43 ` [Intel-gfx] " Jerry Snitselaar
2020-12-05  1:43 ` Jerry Snitselaar
2020-12-05  1:43 ` [PATCH v3 1/4] irq: export kstat_irqs Jerry Snitselaar
2020-12-05  1:43   ` [Intel-gfx] " Jerry Snitselaar
2020-12-05  1:43   ` Jerry Snitselaar
2020-12-05 10:39   ` Jarkko Sakkinen
2020-12-05 10:39     ` [Intel-gfx] " Jarkko Sakkinen
2020-12-05 10:39     ` Jarkko Sakkinen
2020-12-06 16:40     ` Thomas Gleixner
2020-12-06 16:40       ` [Intel-gfx] " Thomas Gleixner
2020-12-06 16:40       ` Thomas Gleixner
2020-12-06 17:40       ` James Bottomley
2020-12-06 17:40         ` [Intel-gfx] " James Bottomley
2020-12-06 17:40         ` James Bottomley
2020-12-06 19:29         ` Thomas Gleixner
2020-12-06 19:29           ` [Intel-gfx] " Thomas Gleixner
2020-12-06 19:29           ` Thomas Gleixner
2020-12-06 17:54   ` Thomas Gleixner
2020-12-06 17:54     ` [Intel-gfx] " Thomas Gleixner
2020-12-06 17:54     ` Thomas Gleixner
2020-12-06 21:46     ` Jerry Snitselaar
2020-12-06 21:46       ` [Intel-gfx] " Jerry Snitselaar
2020-12-06 21:46       ` Jerry Snitselaar
2020-12-05  1:43 ` [PATCH v3 2/4] drm/i915/pmu: Use kstat_irqs to get interrupt count Jerry Snitselaar
2020-12-05  1:43   ` [Intel-gfx] " Jerry Snitselaar
2020-12-05  1:43   ` Jerry Snitselaar
2020-12-06 16:38   ` Thomas Gleixner
2020-12-06 16:38     ` [Intel-gfx] " Thomas Gleixner
2020-12-06 16:38     ` Thomas Gleixner
2020-12-06 21:33     ` Thomas Gleixner
2020-12-06 21:33       ` [Intel-gfx] " Thomas Gleixner
2020-12-06 21:33       ` Thomas Gleixner
2020-12-08  9:54       ` Jarkko Sakkinen
2020-12-08  9:54         ` [Intel-gfx] " Jarkko Sakkinen
2020-12-08  9:54         ` Jarkko Sakkinen
2020-12-06 21:47     ` Jerry Snitselaar
2020-12-06 21:47       ` [Intel-gfx] " Jerry Snitselaar
2020-12-06 21:47       ` Jerry Snitselaar
2020-12-06 23:38       ` Thomas Gleixner
2020-12-06 23:38         ` [Intel-gfx] " Thomas Gleixner
2020-12-06 23:38         ` Thomas Gleixner
2020-12-10  7:53     ` [Intel-gfx] " Joonas Lahtinen
2020-12-10  7:53       ` Joonas Lahtinen
2020-12-10  7:53       ` Joonas Lahtinen
2020-12-10 10:45       ` Tvrtko Ursulin [this message]
2020-12-10 10:45         ` Tvrtko Ursulin
2020-12-10 10:45         ` Tvrtko Ursulin
2020-12-10 16:35         ` Thomas Gleixner
2020-12-10 16:35           ` Thomas Gleixner
2020-12-10 16:35           ` Thomas Gleixner
2020-12-10 17:09           ` Tvrtko Ursulin
2020-12-10 17:09             ` Tvrtko Ursulin
2020-12-10 17:09             ` Tvrtko Ursulin
2020-12-10 17:44             ` Thomas Gleixner
2020-12-10 17:44               ` Thomas Gleixner
2020-12-10 17:44               ` Thomas Gleixner
2020-12-10 17:51               ` Tvrtko Ursulin
2020-12-10 17:51                 ` Tvrtko Ursulin
2020-12-10 17:51                 ` Tvrtko Ursulin
2020-12-05  1:43 ` [PATCH v3 3/4] tpm_tis: Disable interrupts if interrupt storm detected Jerry Snitselaar
2020-12-05  1:43   ` [Intel-gfx] " Jerry Snitselaar
2020-12-05  1:43   ` Jerry Snitselaar
2020-12-06 19:26   ` Thomas Gleixner
2020-12-06 19:26     ` [Intel-gfx] " Thomas Gleixner
2020-12-06 19:26     ` Thomas Gleixner
2020-12-07 19:28     ` Jason Gunthorpe
2020-12-07 19:28       ` Jason Gunthorpe
2020-12-07 19:58       ` James Bottomley
2020-12-07 19:58         ` [Intel-gfx] " James Bottomley
2020-12-07 19:58         ` James Bottomley
2020-12-08 17:43         ` Jarkko Sakkinen
2020-12-08 17:43           ` [Intel-gfx] " Jarkko Sakkinen
2020-12-08 17:43           ` Jarkko Sakkinen
2020-12-08 17:42       ` Jarkko Sakkinen
2020-12-08 17:42         ` [Intel-gfx] " Jarkko Sakkinen
2020-12-08 17:42         ` Jarkko Sakkinen
2020-12-05  1:43 ` [PATCH v3 4/4] tpm_tis: Disable Interrupts on the ThinkPad L490 Jerry Snitselaar
2020-12-05  1:43   ` [Intel-gfx] " Jerry Snitselaar
2020-12-05  1:43   ` Jerry Snitselaar
2020-12-05  1:55 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for tpm_tis: Detect interrupt storms Patchwork
2020-12-05  2:25 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2020-12-05  5:32 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
2020-12-06 19:50 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for tpm_tis: Detect interrupt storms (rev2) Patchwork
2020-12-06 19:51 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2020-12-06 20:22 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2020-12-06 21:59 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork

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=e9892cc4-6344-be07-66b5-236b8576100e@linux.intel.com \
    --to=tvrtko.ursulin@linux.intel.com \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=airlied@linux.ie \
    --cc=chris@chris-wilson.co.uk \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jarkko@kernel.org \
    --cc=jgg@ziepe.ca \
    --cc=joonas.lahtinen@linux.intel.com \
    --cc=jsnitsel@redhat.com \
    --cc=linux-integrity@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mjg59@google.com \
    --cc=peterhuewe@gmx.de \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=tvrtko.ursulin@intel.com \
    /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.