* [PATCH] mailbox: pcc: Free the channel before unmapping the shared memory
@ 2026-08-12 12:36 Breno Leitao
2026-08-13 2:57 ` Sudeep Holla
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Breno Leitao @ 2026-08-12 12:36 UTC (permalink / raw)
To: Sudeep Holla, Jassi Brar, Adam Young
Cc: linux-acpi, linux-kernel, rmikey, kernel-team, Breno Leitao
I am seeing a crash on PCC that is related to a an shared memory being
unmapped before the IRQ is disabled, and the IRQ kicks in and hits the
unmapped (NULL) address. This is a summary of what I see on my box:
scmi_protocol scmi_dev.1: Message for 1 type 0 is not expected!
Unable to handle kernel NULL pointer dereference at virtual address 0000000000000004
__handle_irq_event_percpu+0x1c4/0x9e0
handle_irq_event+0x98/0x218
handle_fasteoi_irq+0x230/0x750
generic_handle_domain_irq+0xac/0x138
gic_handle_irq+0x344/0x740
call_on_irq_stack+0x30/0x48
The trapping store is iowrite32(SCMI_SHMEM_FLAG_INTR_ENABLED,
&shmem->header.flags), a write of 1 at offset 4 of a NULL base.
But, back to the problem, pcc_mbox_free_channel() unmaps the shared
memory and clears pchan->chan.shmem *before* freeing the IRQ (aka
calling mbox_free_channel()).
The interrupt is still live when the mapping goes away.
Free the channel first, before the memory unmap. mbox_free_channel()
calls pcc_shutdown(), which frees the platform interrupt, and then unmap
shared memory.
Fixes: 7f9e19f207be ("mailbox: pcc: Check before sending MCTP PCC response ACK")
Signed-off-by: Breno Leitao <leitao@debian.org>
---
drivers/mailbox/pcc.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/mailbox/pcc.c b/drivers/mailbox/pcc.c
index 636879ae1db76..d32f170141de7 100644
--- a/drivers/mailbox/pcc.c
+++ b/drivers/mailbox/pcc.c
@@ -408,12 +408,13 @@ void pcc_mbox_free_channel(struct pcc_mbox_chan *pchan)
return;
pchan_info = chan->con_priv;
pcc_mbox_chan = &pchan_info->chan;
+
+ mbox_free_channel(chan);
+
if (pcc_mbox_chan->shmem) {
iounmap(pcc_mbox_chan->shmem);
pcc_mbox_chan->shmem = NULL;
}
-
- mbox_free_channel(chan);
}
EXPORT_SYMBOL_GPL(pcc_mbox_free_channel);
---
base-commit: 5e6de6a2b522f659defacb1551d0465ba6ce13cf
change-id: 20260812-pcc-3a7413982a5e
Best regards,
--
Breno Leitao <leitao@debian.org>
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCH] mailbox: pcc: Free the channel before unmapping the shared memory
2026-08-12 12:36 [PATCH] mailbox: pcc: Free the channel before unmapping the shared memory Breno Leitao
@ 2026-08-13 2:57 ` Sudeep Holla
2026-08-13 8:18 ` Breno Leitao
2026-08-13 10:54 ` Sudeep Holla
2026-08-16 3:58 ` Adam Young
2 siblings, 1 reply; 9+ messages in thread
From: Sudeep Holla @ 2026-08-13 2:57 UTC (permalink / raw)
To: Breno Leitao
Cc: Jassi Brar, Adam Young, linux-acpi, linux-kernel, rmikey,
kernel-team
On Wed, Aug 12, 2026 at 05:36:03AM -0700, Breno Leitao wrote:
> I am seeing a crash on PCC that is related to a an shared memory being
> unmapped before the IRQ is disabled, and the IRQ kicks in and hits the
> unmapped (NULL) address. This is a summary of what I see on my box:
>
> scmi_protocol scmi_dev.1: Message for 1 type 0 is not expected!
> Unable to handle kernel NULL pointer dereference at virtual address 0000000000000004
> __handle_irq_event_percpu+0x1c4/0x9e0
> handle_irq_event+0x98/0x218
> handle_fasteoi_irq+0x230/0x750
> generic_handle_domain_irq+0xac/0x138
> gic_handle_irq+0x344/0x740
> call_on_irq_stack+0x30/0x48
>
Just curious as how are you testing ACPI PCC + SCMI using upstream and
on which platform ?
--
Regards,
Sudeep
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] mailbox: pcc: Free the channel before unmapping the shared memory
2026-08-13 2:57 ` Sudeep Holla
@ 2026-08-13 8:18 ` Breno Leitao
2026-08-13 10:45 ` Sudeep Holla
0 siblings, 1 reply; 9+ messages in thread
From: Breno Leitao @ 2026-08-13 8:18 UTC (permalink / raw)
To: Sudeep Holla
Cc: Jassi Brar, Adam Young, linux-acpi, linux-kernel, rmikey,
kernel-team
Hello Sudeep,
On Thu, Aug 13, 2026 at 03:57:29AM +0100, Sudeep Holla wrote:
> On Wed, Aug 12, 2026 at 05:36:03AM -0700, Breno Leitao wrote:
> > I am seeing a crash on PCC that is related to a an shared memory being
> > unmapped before the IRQ is disabled, and the IRQ kicks in and hits the
> > unmapped (NULL) address. This is a summary of what I see on my box:
> >
> > scmi_protocol scmi_dev.1: Message for 1 type 0 is not expected!
> > Unable to handle kernel NULL pointer dereference at virtual address 0000000000000004
> > __handle_irq_event_percpu+0x1c4/0x9e0
> > handle_irq_event+0x98/0x218
> > handle_fasteoi_irq+0x230/0x750
> > generic_handle_domain_irq+0xac/0x138
> > gic_handle_irq+0x344/0x740
> > call_on_irq_stack+0x30/0x48
> >
>
> Just curious as how are you testing ACPI PCC + SCMI using upstream and
> on which platform ?
I am using Arm AGI CPU with the latest SCMI patches that are being under
discussion in the mailing list.
--breno
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] mailbox: pcc: Free the channel before unmapping the shared memory
2026-08-13 8:18 ` Breno Leitao
@ 2026-08-13 10:45 ` Sudeep Holla
0 siblings, 0 replies; 9+ messages in thread
From: Sudeep Holla @ 2026-08-13 10:45 UTC (permalink / raw)
To: Breno Leitao
Cc: Jassi Brar, Adam Young, linux-acpi, linux-kernel, rmikey,
kernel-team
On Thu, Aug 13, 2026 at 01:18:58AM -0700, Breno Leitao wrote:
> Hello Sudeep,
>
> On Thu, Aug 13, 2026 at 03:57:29AM +0100, Sudeep Holla wrote:
> > On Wed, Aug 12, 2026 at 05:36:03AM -0700, Breno Leitao wrote:
> > > I am seeing a crash on PCC that is related to a an shared memory being
> > > unmapped before the IRQ is disabled, and the IRQ kicks in and hits the
> > > unmapped (NULL) address. This is a summary of what I see on my box:
> > >
> > > scmi_protocol scmi_dev.1: Message for 1 type 0 is not expected!
> > > Unable to handle kernel NULL pointer dereference at virtual address 0000000000000004
> > > __handle_irq_event_percpu+0x1c4/0x9e0
> > > handle_irq_event+0x98/0x218
> > > handle_fasteoi_irq+0x230/0x750
> > > generic_handle_domain_irq+0xac/0x138
> > > gic_handle_irq+0x344/0x740
> > > call_on_irq_stack+0x30/0x48
> > >
> >
> > Just curious as how are you testing ACPI PCC + SCMI using upstream and
> > on which platform ?
>
> I am using Arm AGI CPU with the latest SCMI patches that are being under
> discussion in the mailing list.
>
Thanks, I just wanted to rule out any hidden issues in the ACPI PCC driver
I wrote which hasn't got much review 😉.
--
Regards,
Sudeep
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] mailbox: pcc: Free the channel before unmapping the shared memory
2026-08-12 12:36 [PATCH] mailbox: pcc: Free the channel before unmapping the shared memory Breno Leitao
2026-08-13 2:57 ` Sudeep Holla
@ 2026-08-13 10:54 ` Sudeep Holla
2026-08-16 3:58 ` Adam Young
2 siblings, 0 replies; 9+ messages in thread
From: Sudeep Holla @ 2026-08-13 10:54 UTC (permalink / raw)
To: Breno Leitao
Cc: Jassi Brar, Adam Young, linux-acpi, linux-kernel, rmikey,
kernel-team
On Wed, Aug 12, 2026 at 05:36:03AM -0700, Breno Leitao wrote:
> I am seeing a crash on PCC that is related to a an shared memory being
> unmapped before the IRQ is disabled, and the IRQ kicks in and hits the
> unmapped (NULL) address. This is a summary of what I see on my box:
>
> scmi_protocol scmi_dev.1: Message for 1 type 0 is not expected!
> Unable to handle kernel NULL pointer dereference at virtual address 0000000000000004
> __handle_irq_event_percpu+0x1c4/0x9e0
> handle_irq_event+0x98/0x218
> handle_fasteoi_irq+0x230/0x750
> generic_handle_domain_irq+0xac/0x138
> gic_handle_irq+0x344/0x740
> call_on_irq_stack+0x30/0x48
>
> The trapping store is iowrite32(SCMI_SHMEM_FLAG_INTR_ENABLED,
> &shmem->header.flags), a write of 1 at offset 4 of a NULL base.
>
> But, back to the problem, pcc_mbox_free_channel() unmaps the shared
> memory and clears pchan->chan.shmem *before* freeing the IRQ (aka
> calling mbox_free_channel()).
>
> The interrupt is still live when the mapping goes away.
>
> Free the channel first, before the memory unmap. mbox_free_channel()
> calls pcc_shutdown(), which frees the platform interrupt, and then unmap
> shared memory.
>
> Fixes: 7f9e19f207be ("mailbox: pcc: Check before sending MCTP PCC response ACK")
Reviewed-by: Sudeep Holla <sudeep.holla@kernel.org>
Digging my git repo, I found I had this fix initially as part of
Commit 9f3bbbb72ad0 ("mailbox: pcc: Initialize SHMEM before binding the
channel with the client") when I encountered that issue but then removed
to post it as separate fix which I never did 🙁.
Thanks for catching this, much appreciated!
--
Regards,
Sudeep
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [PATCH] mailbox: pcc: Free the channel before unmapping the shared memory
2026-08-12 12:36 [PATCH] mailbox: pcc: Free the channel before unmapping the shared memory Breno Leitao
2026-08-13 2:57 ` Sudeep Holla
2026-08-13 10:54 ` Sudeep Holla
@ 2026-08-16 3:58 ` Adam Young
2026-08-17 9:42 ` Breno Leitao
2 siblings, 1 reply; 9+ messages in thread
From: Adam Young @ 2026-08-16 3:58 UTC (permalink / raw)
To: Breno Leitao, Sudeep Holla, Jassi Brar, Adam Young
Cc: linux-acpi, linux-kernel, rmikey, kernel-team
On 8/12/26 08:36, Breno Leitao wrote:
> I am seeing a crash on PCC that is related to a an shared memory being
> unmapped before the IRQ is disabled, and the IRQ kicks in and hits the
> unmapped (NULL) address. This is a summary of what I see on my box:
>
> scmi_protocol scmi_dev.1: Message for 1 type 0 is not expected!
> Unable to handle kernel NULL pointer dereference at virtual address 0000000000000004
> __handle_irq_event_percpu+0x1c4/0x9e0
> handle_irq_event+0x98/0x218
> handle_fasteoi_irq+0x230/0x750
> generic_handle_domain_irq+0xac/0x138
> gic_handle_irq+0x344/0x740
> call_on_irq_stack+0x30/0x48
>
> The trapping store is iowrite32(SCMI_SHMEM_FLAG_INTR_ENABLED,
> &shmem->header.flags), a write of 1 at offset 4 of a NULL base.
>
> But, back to the problem, pcc_mbox_free_channel() unmaps the shared
> memory and clears pchan->chan.shmem *before* freeing the IRQ (aka
> calling mbox_free_channel()).
>
> The interrupt is still live when the mapping goes away.
>
> Free the channel first, before the memory unmap. mbox_free_channel()
> calls pcc_shutdown(), which frees the platform interrupt, and then unmap
> shared memory.
I posted a related fix undere the MCTP PCC Driver changes.
This fix is necessary but not sufficient to deal with the race
conditions. Take a look at the series of patches under here:
https://lore.kernel.org/all/20260721175258.87600-1-admiyo@os.amperecomputing.com/
>
> Fixes: 7f9e19f207be ("mailbox: pcc: Check before sending MCTP PCC response ACK")
> Signed-off-by: Breno Leitao <leitao@debian.org>
> ---
> drivers/mailbox/pcc.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mailbox/pcc.c b/drivers/mailbox/pcc.c
> index 636879ae1db76..d32f170141de7 100644
> --- a/drivers/mailbox/pcc.c
> +++ b/drivers/mailbox/pcc.c
> @@ -408,12 +408,13 @@ void pcc_mbox_free_channel(struct pcc_mbox_chan *pchan)
> return;
> pchan_info = chan->con_priv;
> pcc_mbox_chan = &pchan_info->chan;
> +
> + mbox_free_channel(chan);
> +
> if (pcc_mbox_chan->shmem) {
> iounmap(pcc_mbox_chan->shmem);
> pcc_mbox_chan->shmem = NULL;
> }
> -
> - mbox_free_channel(chan);
> }
> EXPORT_SYMBOL_GPL(pcc_mbox_free_channel);
>
>
> ---
> base-commit: 5e6de6a2b522f659defacb1551d0465ba6ce13cf
> change-id: 20260812-pcc-3a7413982a5e
>
> Best regards,
> --
> Breno Leitao <leitao@debian.org>
>
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [PATCH] mailbox: pcc: Free the channel before unmapping the shared memory
2026-08-16 3:58 ` Adam Young
@ 2026-08-17 9:42 ` Breno Leitao
2026-08-17 16:59 ` Adam Young
2026-08-17 17:06 ` Adam Young
0 siblings, 2 replies; 9+ messages in thread
From: Breno Leitao @ 2026-08-17 9:42 UTC (permalink / raw)
To: Adam Young
Cc: Sudeep Holla, Jassi Brar, Adam Young, linux-acpi, linux-kernel,
rmikey, kernel-team
Hello Adam,
On Sat, Aug 15, 2026 at 11:58:16PM -0400, Adam Young wrote:
> On 8/12/26 08:36, Breno Leitao wrote:
> > Free the channel first, before the memory unmap. mbox_free_channel()
> > calls pcc_shutdown(), which frees the platform interrupt, and then unmap
> > shared memory.
>
> I posted a related fix undere the MCTP PCC Driver changes.
>
> This fix is necessary but not sufficient to deal with the race conditions.
> Take a look at the series of patches under here:
>
> https://lore.kernel.org/all/20260721175258.87600-1-admiyo@os.amperecomputing.com/
That looks like a much bigger series, with new features, open discussions,
Nacks, and already 45 revisions.
This curent fix is only meant to address a real problem (user after
free) I am hitting in production systems.
My suggestion is that we get this real issue unblocked, even if not
complete, while you keep working on your larger series.
Thanks,
--breno
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] mailbox: pcc: Free the channel before unmapping the shared memory
2026-08-17 9:42 ` Breno Leitao
@ 2026-08-17 16:59 ` Adam Young
2026-08-17 17:06 ` Adam Young
1 sibling, 0 replies; 9+ messages in thread
From: Adam Young @ 2026-08-17 16:59 UTC (permalink / raw)
To: Breno Leitao
Cc: Sudeep Holla, Jassi Brar, Adam Young, linux-acpi, linux-kernel,
rmikey, kernel-team
On 8/17/26 05:42, Breno Leitao wrote:
> Hello Adam,
>
> On Sat, Aug 15, 2026 at 11:58:16PM -0400, Adam Young wrote:
>> On 8/12/26 08:36, Breno Leitao wrote:
>>> Free the channel first, before the memory unmap. mbox_free_channel()
>>> calls pcc_shutdown(), which frees the platform interrupt, and then unmap
>>> shared memory.
>> I posted a related fix undere the MCTP PCC Driver changes.
>>
>> This fix is necessary but not sufficient to deal with the race conditions.
>> Take a look at the series of patches under here:
>>
>> https://lore.kernel.org/all/20260721175258.87600-1-admiyo@os.amperecomputing.com/
> That looks like a much bigger series, with new features, open discussions,
> Nacks, and already 45 revisions.
>
> This curent fix is only meant to address a real problem (user after
> free) I am hitting in production systems.
>
> My suggestion is that we get this real issue unblocked, even if not
> complete, while you keep working on your larger series.
>
> Thanks,
> --breno
Yes. In order to get MCTP over PCC working, and get through both Human
and now AI code review, the series has grown again.
The Race condition you see is solved by one of the patches in the
series. However, it moves the start up out of the PCC specific function
and into the Mailbox start up and teardown. You cannot deal with the
race conditions without doing that.
I have been chasing PCC issues for a couple years now. The Type 2
drivers do not typically have the issues that the extended drivers have,
as they typically deal with a minimal amount of memory, usually just a
single atomic word that can be coupled with the doorbell. Extended
memory is much more likely to trigger hidden rac conditions as the
amount of work done per doorbell-ring or message-send is non-atomic.
THe cases include: a doorbell coming during start up or during tear down.
I am happy to resubmit any of the changes from that series in a differnt
name/order to get them reviewed and merged. However, previous patches I
submited have gotten minimal review. I put them all in one series as I
need the Network reviewers to be able to sign off on the end-to-end of
the MCTP over PCC patch.
So, I am very flexible as far as what to do with the patches, but lets
not put in half-fixes that make that process harder.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] mailbox: pcc: Free the channel before unmapping the shared memory
2026-08-17 9:42 ` Breno Leitao
2026-08-17 16:59 ` Adam Young
@ 2026-08-17 17:06 ` Adam Young
1 sibling, 0 replies; 9+ messages in thread
From: Adam Young @ 2026-08-17 17:06 UTC (permalink / raw)
To: Breno Leitao
Cc: Sudeep Holla, Jassi Brar, Adam Young, linux-acpi, linux-kernel,
rmikey, kernel-team
On 8/17/26 05:42, Breno Leitao wrote:
> Hello Adam,
>
> On Sat, Aug 15, 2026 at 11:58:16PM -0400, Adam Young wrote:
>> On 8/12/26 08:36, Breno Leitao wrote:
>>> Free the channel first, before the memory unmap. mbox_free_channel()
>>> calls pcc_shutdown(), which frees the platform interrupt, and then unmap
>>> shared memory.
>> I posted a related fix undere the MCTP PCC Driver changes.
>>
>> This fix is necessary but not sufficient to deal with the race conditions.
>> Take a look at the series of patches under here:
>>
>> https://lore.kernel.org/all/20260721175258.87600-1-admiyo@os.amperecomputing.com/
> That looks like a much bigger series, with new features, open discussions,
> Nacks, and already 45 revisions.
>
> This curent fix is only meant to address a real problem (user after
> free) I am hitting in production systems.
>
> My suggestion is that we get this real issue unblocked, even if not
> complete, while you keep working on your larger series.
>
> Thanks,
> --breno
There are two patches that address this issue from that series:
This one is, I believe, a superset of the fix you put in.
https://lore.kernel.org/all/20260721175258.87600-2-admiyo@os.amperecomputing.com/
Note that the unmap is moved to the mailbox teardown function, which
happens immediately after the IRQ unregister. Those two operatations
need to happen atomically to avoid the issue you saw. Thus, I think your
patch is insufficient to actually deal with the race condition: it
needs to happen in pcc_shutdown.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-08-17 17:06 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-12 12:36 [PATCH] mailbox: pcc: Free the channel before unmapping the shared memory Breno Leitao
2026-08-13 2:57 ` Sudeep Holla
2026-08-13 8:18 ` Breno Leitao
2026-08-13 10:45 ` Sudeep Holla
2026-08-13 10:54 ` Sudeep Holla
2026-08-16 3:58 ` Adam Young
2026-08-17 9:42 ` Breno Leitao
2026-08-17 16:59 ` Adam Young
2026-08-17 17:06 ` Adam Young
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox