From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 815A5332EBC; Fri, 2 Oct 2026 19:01:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790967697; cv=none; b=hMtZGc2xwNY52y+TmongciyGqHnhM6BkkopgtjQRjAwp1OtUAu2XluTz2GFIS3hOJRsp4XpOQjI2ypyH87h+kSfuw0JDbnxWADqRpm0mFnNaq19jkdYohMSdjVkCQ7y1BU3Iz3FS/QJ77q/O8L3hJm0FkaNV6p7jaxOO6LVKack= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790967697; c=relaxed/simple; bh=n8IEXdLVOwjM2Sd6CHBfxOpqStRbcdyxqFYtTY9XNxk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=LPRZjJbD51ph1I+ExPz0PGVnjOawczX5WRGqNAZqYGPdlHbc6Mumm/3EcLYXDRsvzLg0ouvqBvc4bjFW9izixIlEpBY/Mizk0JhySMwBId4TkxdxS6btyS1YrpCm5fZl/lH01hdBIJl60C0AlElzNguCO12coJtcMCCoY6KADtQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MUQKqm+q; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="MUQKqm+q" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B31C41F00893; Fri, 2 Oct 2026 19:01:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1790967696; bh=vDPyKmqqls6OlM5RNXLH4F4PVsliipRxsPlZk3tQZ5s=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=MUQKqm+q13LIQM5n5mOUREjBW86Y/wk8GIpV5BdwdjevKRRnaQMhiSiwIdguyImKq Nfk2kCV+nSq1mGZiRh4mei33xDln1r+QDqRMJYlrh7f2YLpotA33anMsi5VH3RC8jU Fi7VLhCKTDGMnCNhw2qggrEbqv8IkzeN7T25H6k6Hp++DyJCyZwT7eA7831pQVusQa n6U8CDG7h55h8Y97WdZPPlPbMZtAT/XVmvq/oBG8wTSlHf6jUqFrA33AZTtjVt5I2c vmuHlCISv9VXn7xENO7NJ9dhOARC9qep/mxQauutnoZjBtqw0SEJIm7WF5HBpJgCcq yKrwmOTvNs9fQ== From: =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= To: Magnus Karlsson , Maciej Fijalkowski , Stanislav Fomichev , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Jonathan Corbet , Shuah Khan , Randy Dunlap , Alexander Duyck , kernel-team@meta.com, Andrew Lunn , Jesper Dangaard Brouer , Ilias Apalodimas , Alexei Starovoitov , Daniel Borkmann , John Fastabend , Pavel Begunkov , Jens Axboe , Andrii Nakryiko , Eduard Zingerman , Kumar Kartikeya Dwivedi , Martin KaFai Lau , Song Liu , Yonghong Song , Jiri Olsa , Emil Tsalapatis , Ihor Solodrai , netdev@vger.kernel.org, bpf@vger.kernel.org, io-uring@vger.kernel.org Cc: =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= , "Mike Marciniszyn (Meta)" , Weiming Shi , Nikolay Aleksandrov , David Wei , Alexander Lobakin , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Mina Almasry Subject: [RFC net-next 08/15] xsk: Handle a detached FILL ring in RX wakeup Date: Fri, 2 Oct 2026 21:00:09 +0200 Message-ID: <20261002190018.696925-9-bjorn@kernel.org> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261002190018.696925-1-bjorn@kernel.org> References: <20261002190018.696925-1-bjorn@kernel.org> Precedence: bulk X-Mailing-List: io-uring@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A buffer pool used as a memory provider can live longer than its FILL ring, while an old page pool finishes a deferred destroy. The RX need-wakeup helpers use pool->fq without a NULL check. Read pool->fq once and return if it is NULL. A normal pool always has a FILL ring here, so nothing changes for it. Signed-off-by: Björn Töpel --- net/xdp/xsk.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/net/xdp/xsk.c b/net/xdp/xsk.c index 33475b180ea6..b68dda9c37d1 100644 --- a/net/xdp/xsk.c +++ b/net/xdp/xsk.c @@ -50,10 +50,15 @@ static struct kmem_cache *xsk_tx_generic_cache; void xsk_set_rx_need_wakeup(struct xsk_buff_pool *pool) { + struct xsk_queue *fq = READ_ONCE(pool->fq); + + if (!fq) + return; + if (pool->cached_need_wakeup & XDP_WAKEUP_RX) return; - pool->fq->ring->flags |= XDP_RING_NEED_WAKEUP; + fq->ring->flags |= XDP_RING_NEED_WAKEUP; pool->cached_need_wakeup |= XDP_WAKEUP_RX; } EXPORT_SYMBOL(xsk_set_rx_need_wakeup); @@ -77,10 +82,15 @@ EXPORT_SYMBOL(xsk_set_tx_need_wakeup); void xsk_clear_rx_need_wakeup(struct xsk_buff_pool *pool) { + struct xsk_queue *fq = READ_ONCE(pool->fq); + + if (!fq) + return; + if (!(pool->cached_need_wakeup & XDP_WAKEUP_RX)) return; - pool->fq->ring->flags &= ~XDP_RING_NEED_WAKEUP; + fq->ring->flags &= ~XDP_RING_NEED_WAKEUP; pool->cached_need_wakeup &= ~XDP_WAKEUP_RX; } EXPORT_SYMBOL(xsk_clear_rx_need_wakeup); -- 2.55.0