From: Nathan Lynch <nathan.lynch@amd.com>
To: Eder Zulian <ezulian@redhat.com>, <Basavaraj.Natikar@amd.com>,
<vkoul@kernel.org>, <dmaengine@vger.kernel.org>,
<linux-kernel@vger.kernel.org>
Cc: <jsnitsel@redhat.com>, <ddutile@redhat.com>,
Eder Zulian <ezulian@redhat.com>
Subject: Re: [PATCH RFC 1/1] dmaengine: ptdma: use SLAB_TYPESAFE_BY_RCU for the DMA descriptor slab
Date: Thu, 17 Apr 2025 16:02:23 -0500 [thread overview]
Message-ID: <87ikn2lcww.fsf@AUSNATLYNCH.amd.com> (raw)
In-Reply-To: <20250411194148.247361-2-ezulian@redhat.com>
Eder Zulian <ezulian@redhat.com> writes:
> The SLAB_TYPESAFE_BY_RCU flag prevents a change of type for objects
> allocated from the slab cache (although the memory may be reallocated to
> a completetly different object of the same type.) Moreover, when the
> last reference to an object is dropped the finalization code must not
> run until all __rcu pointers referencing the object have been updated,
> and then a grace period has passed.
>
> Signed-off-by: Eder Zulian <ezulian@redhat.com>
> ---
> drivers/dma/amd/ptdma/ptdma-dmaengine.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/dma/amd/ptdma/ptdma-dmaengine.c b/drivers/dma/amd/ptdma/ptdma-dmaengine.c
> index 715ac3ae067b..b70dd1b0b9fb 100644
> --- a/drivers/dma/amd/ptdma/ptdma-dmaengine.c
> +++ b/drivers/dma/amd/ptdma/ptdma-dmaengine.c
> @@ -597,7 +597,8 @@ int pt_dmaengine_register(struct pt_device *pt)
>
> pt->dma_desc_cache = kmem_cache_create(desc_cache_name,
> sizeof(struct pt_dma_desc), 0,
> - SLAB_HWCACHE_ALIGN, NULL);
> + SLAB_HWCACHE_ALIGN |
> + SLAB_TYPESAFE_BY_RCU, NULL);
No, this code wasn't written to exploit SLAB_TYPESAFE_BY_RCU and this
change can only obscure the problem. There's likely a data race in the
driver.
I suspect pt_cmd_callback_work() has a bug:
spin_lock_irqsave(&chan->vc.lock, flags);
if (desc) {
if (desc->status != DMA_COMPLETE) {
if (desc->status != DMA_ERROR)
desc->status = DMA_COMPLETE;
dma_cookie_complete(tx_desc);
dma_descriptor_unmap(tx_desc);
} else {
tx_desc = NULL;
}
}
spin_unlock_irqrestore(&chan->vc.lock, flags);
if (tx_desc) {
dmaengine_desc_get_callback_invoke(tx_desc, NULL);
dma_run_dependencies(tx_desc);
>>>> list_del(&desc->vd.node); <<< must be done under vc.lock
vchan_vdesc_fini(vd);
}
But that's relatively new code that may not be in the kernel you're
running.
next prev parent reply other threads:[~2025-04-17 21:02 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-11 19:41 [PATCH RFC 0/1] ptdma: Add SLAB_TYPESAFE_BY_RCU to DMA descriptor slab Eder Zulian
2025-04-11 19:41 ` [PATCH RFC 1/1] dmaengine: ptdma: use SLAB_TYPESAFE_BY_RCU for the " Eder Zulian
2025-04-11 20:34 ` Dave Jiang
2025-04-11 21:23 ` Eder Zulian
2025-04-17 21:02 ` Nathan Lynch [this message]
2025-04-22 18:41 ` Eder Zulian
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=87ikn2lcww.fsf@AUSNATLYNCH.amd.com \
--to=nathan.lynch@amd.com \
--cc=Basavaraj.Natikar@amd.com \
--cc=ddutile@redhat.com \
--cc=dmaengine@vger.kernel.org \
--cc=ezulian@redhat.com \
--cc=jsnitsel@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=vkoul@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 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.