From: Eder Zulian <ezulian@redhat.com>
To: Nathan Lynch <nathan.lynch@amd.com>
Cc: Basavaraj.Natikar@amd.com, vkoul@kernel.org,
dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org,
jsnitsel@redhat.com, ddutile@redhat.com
Subject: Re: [PATCH RFC 1/1] dmaengine: ptdma: use SLAB_TYPESAFE_BY_RCU for the DMA descriptor slab
Date: Tue, 22 Apr 2025 20:41:29 +0200 [thread overview]
Message-ID: <aAfi2SeDqD8IybOJ@f39> (raw)
In-Reply-To: <87ikn2lcww.fsf@AUSNATLYNCH.amd.com>
Hello Nathan,
On Thu, Apr 17, 2025 at 04:02:23PM -0500, Nathan Lynch wrote:
> 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.
>
Ack. Let's conclude my RFC and discard the proposed patch then.
Thank you very much for your feedback.
> 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.
>
True. pt_cmd_callback_work() wasn't in the kernel used for tests and it
seems to be used only if 'pt->ver == AE4_DMA_VERSION'. In that kernel
pt_cmd_callback() would call pt_handle_active_desc() which seemed to have
the same bug.
Eder
prev parent reply other threads:[~2025-04-22 18:41 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
2025-04-22 18:41 ` Eder Zulian [this message]
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=aAfi2SeDqD8IybOJ@f39 \
--to=ezulian@redhat.com \
--cc=Basavaraj.Natikar@amd.com \
--cc=ddutile@redhat.com \
--cc=dmaengine@vger.kernel.org \
--cc=jsnitsel@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nathan.lynch@amd.com \
--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.