Linux Perf Users
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Robin Murphy <robin.murphy@arm.com>
Cc: Dave Jiang <dave.jiang@intel.com>,
	linux-cxl@vger.kernel.org, linux-perf-users@vger.kernel.org,
	will@kernel.org, mark.rutland@arm.com, dave@stgolabs.net,
	sashiko-bot@kernel.org
Subject: Re: [PATCH v2 8/9] perf/cxl: Don't use pmu.dev in IRQ and hotplug callbacks after unregister
Date: Thu, 30 Jul 2026 19:51:27 +0100	[thread overview]
Message-ID: <20260730195127.208d939a@jic23-huawei> (raw)
In-Reply-To: <76fbd2ce-5d25-47a4-82d8-5577860a948c@arm.com>

On Thu, 30 Jul 2026 12:38:28 +0100
Robin Murphy <robin.murphy@arm.com> wrote:

> On 29/07/2026 3:55 pm, Dave Jiang wrote:
> > On device removal the devm actions unwind LIFO, so cxl_pmu_perf_unregister()
> > runs first and perf_pmu_unregister() frees info->pmu.dev (device_del() +
> > put_device() -> kfree()). The overflow IRQ (freed last) and the CPU-hotplug
> > instance (removed next) are still live at that point, and both
> > cxl_pmu_irq() and cxl_pmu_offline_cpu() log via dev_dbg()/dev_err() on
> > info->pmu.dev, dereferencing freed memory. The shared IRQ can be entered
> > for a co-function on the same MSI vector, and a CPU can go offline in the
> > window before the hotplug instance is removed.
> > 
> > Log through info->pmu.parent instead, the cxl_pmu device passed to probe,
> > which is devm-managed and outlives every teardown action.
> > 
> > Fixes: 5d7107c72796 ("perf: CXL Performance Monitoring Unit driver")
> > Reported-by: sashiko-bot@kernel.org
> > Closes: https://sashiko.dev/#/patchset/20260715191454.459673-1-dave@stgolabs.net?part=1
> > Assisted-by: Claude:claude-opus-4-8
> > Signed-off-by: Dave Jiang <dave.jiang@intel.com>
> > ---
> >   drivers/perf/cxl_pmu.c | 4 ++--
> >   1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/perf/cxl_pmu.c b/drivers/perf/cxl_pmu.c
> > index 2e817a52ff1e..f42238b2b6b0 100644
> > --- a/drivers/perf/cxl_pmu.c
> > +++ b/drivers/perf/cxl_pmu.c
> > @@ -803,7 +803,7 @@ static irqreturn_t cxl_pmu_irq(int irq, void *data)
> >   		struct perf_event *event = info->hw_events[i];
> >   
> >   		if (!event) {
> > -			dev_dbg(info->pmu.dev,
> > +			dev_dbg(info->pmu.parent,
> >   				"overflow but on non enabled counter %d\n", i);
> >   			continue;  
> 
> This seems dubious - we don't permit sharing the IRQ, and all events 
> must have been stopped and descheduled to allow the PMU to be removed in 
> the first place, so how would an overflow interrupt happen?

Hmm. Today the driver itself does permit sharing.  Which is awkward given
need for the interrupts not to get migrated to different CPUs which
I guess might happen if we get a race with driver bind and hotplug events.
I may well be missing other reasons sharing is bad, but that one seems
like enough to rule it out.

Perhaps the fix for now is remove the IRQF_SHARED flag.   Clear no one
was using the driver yet with real hardware given some of the fixes
in this series so we aren't going to regress anyone.

Hopefully no one actually thinks a device that puts PMUs on shared interrupts
is a good idea and no host running CXL runs out and has to force the PCIe
stuff to collapse them to a smaller set of vectors.

> 
> >   		}
> > @@ -966,7 +966,7 @@ static int cxl_pmu_offline_cpu(unsigned int cpu, struct hlist_node *node)
> >   	info->on_cpu = -1;
> >   	
target = cpumask_any_but(cpu_online_mask, cpu);
> >   	if (target >= nr_cpu_ids) {  
> 
> And this again is nonsense anyway - if the pointless dead code is 
> bothering people, just delete the whole check.
True enough.  I fear I gut and paste that from somewhere so might
be worth a more general scrub for other instances :(  

J
> 
> Thanks,
> Robin.
> 
> > -		dev_err(info->pmu.dev, "Unable to find a suitable CPU\n");
> > +		dev_err(info->pmu.parent, "Unable to find a suitable CPU\n");
> >   		return 0;
> >   	}
> >     
> 
> 


  reply	other threads:[~2026-07-30 18:51 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-29 14:55 [PATCH v2 0/9] perf/cxlpmu: Misc sashiko raised issues fixes Dave Jiang
2026-07-29 14:55 ` [PATCH v2 1/9] perf/cxl: Program the requested event group on configurable counters Dave Jiang
2026-07-29 15:06   ` sashiko-bot
2026-07-29 22:29   ` Jonathan Cameron
2026-07-30 15:50     ` Dave Jiang
2026-07-29 14:55 ` [PATCH v2 2/9] perf/cxl: Clear stale event fields before reprogramming a counter Dave Jiang
2026-07-29 15:08   ` sashiko-bot
2026-07-29 22:25   ` Jonathan Cameron
2026-07-30 15:45     ` Dave Jiang
2026-07-29 14:55 ` [PATCH v2 3/9] perf/cxl: Fix the counter overflow delta fixup Dave Jiang
2026-07-29 15:13   ` sashiko-bot
2026-07-29 22:21   ` Jonathan Cameron
2026-07-30 16:56     ` Dave Jiang
2026-07-30 17:19       ` Dave Jiang
2026-07-30 19:00       ` Jonathan Cameron
2026-07-29 14:55 ` [PATCH v2 4/9] perf/cxl: Accept an overflow interrupt on MSI message number 0 Dave Jiang
2026-07-29 19:28   ` Jonathan Cameron
2026-07-29 19:59   ` Davidlohr Bueso
2026-07-30 12:18   ` Robin Murphy
2026-07-30 17:57     ` Dave Jiang
2026-07-30 18:57     ` Jonathan Cameron
2026-07-30 21:32       ` Dave Jiang
2026-07-29 14:55 ` [PATCH v2 5/9] perf/cxl: Keep the overflow interrupt pinned to the managed CPU Dave Jiang
2026-07-29 15:23   ` sashiko-bot
2026-07-29 19:25   ` Jonathan Cameron
2026-07-29 20:27   ` Davidlohr Bueso
2026-07-30 11:46   ` Robin Murphy
2026-07-30 18:55     ` Jonathan Cameron
2026-07-30 21:34       ` Dave Jiang
2026-07-30 22:19     ` Dave Jiang
2026-07-29 14:55 ` [PATCH v2 6/9] perf/cxl: Unfreeze counters after handling an overflow interrupt Dave Jiang
2026-07-29 19:24   ` Jonathan Cameron
2026-07-30 12:04   ` Robin Murphy
2026-07-30 18:53     ` Jonathan Cameron
2026-07-30 23:00       ` Dave Jiang
2026-07-29 14:55 ` [PATCH v2 7/9] perf/cxl: Validate the hardware-reported counter width Dave Jiang
2026-07-29 15:11   ` sashiko-bot
2026-07-29 19:21   ` Jonathan Cameron
2026-07-29 14:55 ` [PATCH v2 8/9] perf/cxl: Don't use pmu.dev in IRQ and hotplug callbacks after unregister Dave Jiang
2026-07-29 15:34   ` sashiko-bot
2026-07-29 19:17   ` Jonathan Cameron
2026-07-30 11:38   ` Robin Murphy
2026-07-30 18:51     ` Jonathan Cameron [this message]
2026-07-29 14:55 ` [PATCH v2 9/9] perf/cxl: Avoid cpumask_of(-1) when no CPU is assigned Dave Jiang
2026-07-29 15:19   ` sashiko-bot
2026-07-29 19:14   ` Jonathan Cameron
2026-07-30  9:36     ` Robin Murphy
2026-07-31  0:11     ` Dave Jiang

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=20260730195127.208d939a@jic23-huawei \
    --to=jic23@kernel.org \
    --cc=dave.jiang@intel.com \
    --cc=dave@stgolabs.net \
    --cc=linux-cxl@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=robin.murphy@arm.com \
    --cc=sashiko-bot@kernel.org \
    --cc=will@kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox