From: "Alexei Starovoitov" <alexei.starovoitov@gmail.com>
To: "Kang Chen" <k.chen@smail.nju.edu.cn>,
"Yonghong Song" <yonghong.song@linux.dev>,
"Daniel Borkmann" <daniel@iogearbox.net>,
"Andrii Nakryiko" <andrii@kernel.org>,
"Eduard Zingerman" <eddyz87@gmail.com>,
"Kumar Kartikeya Dwivedi" <memxor@gmail.com>
Cc: bpf@vger.kernel.org, linux-kernel@vger.kernel.org,
"Sumit Semwal" <sumit.semwal@linaro.org>,
"Christian König" <christian.koenig@amd.com>,
"Philipp Stanner" <phasta@kernel.org>,
linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org,
linaro-mm-sig@lists.linaro.org
Subject: Re: [PATCH] bpf: make dmabuf iterator stay drained after NULL
Date: Thu, 12 Nov 2026 20:04:52 +0000 [thread overview]
Message-ID: <DMTI31CK7EAZ.TT2P5ZN7BIVR@gmail.com> (raw)
In-Reply-To: <20261110125106.2935677-1-k.chen@smail.nju.edu.cn>
On Tue, Nov 10, 2026 at 04:51 AM Kang Chen <k.chen@smail.nju.edu.cn> wrote:
> +/*
> + * The iterator state is one pointer wide because struct bpf_iter_dmabuf is
> + * part of the generated vmlinux.h ABI. Use an invalid pointer value as the
> + * "drained" sentinel instead of growing the state.
> + */
> +#define DMABUF_ITER_DONE ((struct dma_buf *)1L)
+1 to T.J.'s point re: DMABUF_ITER_START.
bpf_iter_kmem_cache_next() does it that way.
dma_buf_iter_next() leaves NULL at the end of the list. Let NULL mean
drained. Then no need for the 2nd store in next() and for the long
comments.
diff --git a/kernel/bpf/dmabuf_iter.c b/kernel/bpf/dmabuf_iter.c
index cd50024..1bef87b 100644
--- a/kernel/bpf/dmabuf_iter.c
+++ b/kernel/bpf/dmabuf_iter.c
@@ -156,6 +156,8 @@ struct bpf_iter_dmabuf_kern {
struct dma_buf *dmabuf;
} __aligned(8);
+#define DMABUF_ITER_START ((struct dma_buf *)1L)
+
__bpf_kfunc_start_defs();
__bpf_kfunc int bpf_iter_dmabuf_new(struct bpf_iter_dmabuf *it)
@@ -165,7 +167,7 @@ __bpf_kfunc int bpf_iter_dmabuf_new(struct bpf_iter_dmabuf *it)
BUILD_BUG_ON(sizeof(*kit) > sizeof(*it));
BUILD_BUG_ON(__alignof__(*kit) != __alignof__(*it));
- kit->dmabuf = NULL;
+ kit->dmabuf = DMABUF_ITER_START;
return 0;
}
@@ -173,10 +175,14 @@ __bpf_kfunc struct dma_buf *bpf_iter_dmabuf_next(struct bpf_iter_dmabuf *it)
{
struct bpf_iter_dmabuf_kern *kit = (void *)it;
- if (kit->dmabuf)
- kit->dmabuf = dma_buf_iter_next(kit->dmabuf);
- else
+ /* Once NULL is returned, next() has to keep returning NULL */
+ if (!kit->dmabuf)
+ return NULL;
+
+ if (kit->dmabuf == DMABUF_ITER_START)
kit->dmabuf = dma_buf_iter_begin();
+ else
+ kit->dmabuf = dma_buf_iter_next(kit->dmabuf);
return kit->dmabuf;
}
@@ -185,7 +191,7 @@ __bpf_kfunc void bpf_iter_dmabuf_destroy(struct bpf_iter_dmabuf *it)
{
struct bpf_iter_dmabuf_kern *kit = (void *)it;
- if (kit->dmabuf)
+ if (kit->dmabuf && kit->dmabuf != DMABUF_ITER_START)
dma_buf_put(kit->dmabuf);
}
Pls take T.J.'s selftest as patch 2 and tag the respin as
[PATCH bpf v2].
Also you sent fixes for css and scx_dsq.
bpf_iter_task_vma_next() has the same problem.
It doesn't hold mmap_lock between the calls since
commit bee9ef4a40a2 ("bpf: switch task_vma iterator from mmap_lock to per-VMA locks"):
Pls fix it too.
pw-bot: cr
prev parent reply other threads:[~2026-11-12 20:04 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-10 12:51 [PATCH] bpf: make dmabuf iterator stay drained after NULL Kang Chen
2026-11-11 8:05 ` bot+bpf-ci
2026-11-11 8:18 ` Christian König
2026-11-11 19:54 ` T.J. Mercier
2026-11-11 19:59 ` [PATCH bpf] selftests/bpf: Test that a drained dmabuf iterator keeps returning NULL T.J. Mercier
2026-11-12 9:35 ` Christian König
2026-11-12 16:27 ` T.J. Mercier
2026-11-11 20:00 ` [PATCH] bpf: make dmabuf iterator stay drained after NULL T.J. Mercier
2026-11-12 20:04 ` Alexei Starovoitov [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=DMTI31CK7EAZ.TT2P5ZN7BIVR@gmail.com \
--to=alexei.starovoitov@gmail.com \
--cc=andrii@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=christian.koenig@amd.com \
--cc=daniel@iogearbox.net \
--cc=dri-devel@lists.freedesktop.org \
--cc=eddyz87@gmail.com \
--cc=k.chen@smail.nju.edu.cn \
--cc=linaro-mm-sig@lists.linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=memxor@gmail.com \
--cc=phasta@kernel.org \
--cc=sumit.semwal@linaro.org \
--cc=yonghong.song@linux.dev \
/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