From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DCA69FEE4C6 for ; Sat, 28 Feb 2026 06:50:47 +0000 (UTC) Received: from boromir.ozlabs.org (localhost [127.0.0.1]) by lists.ozlabs.org (Postfix) with ESMTP id 4fNG6t0XYWz30hg; Sat, 28 Feb 2026 17:50:46 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip="2600:3c04:e001:324:0:1991:8:25" ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1772261446; cv=none; b=gxZOf2pwrYoNGAGk0PB6wEHhuYKf5gXooS9sUDuOjhUT4/Ps0cwiD1ca5mEVI3Hc0ngqR2+1JOnn0GeGQz77nSDmBNnvn6GwEGwcToqkcxMMTUzBC0hHDpENsDxyX57Dji1Z2xeDI0e5YIDstgYQDvucKUZLWFOSXRvRcTtKpbdN9Qv6x4vyFqSRRRSQ685/fXLdnJbu25GiQZyr9myPThD3IKkdjPVgGgu577NqwDbIBJWQ6CsWIAH+mFUv/Y3E1vxhmt1TmteF5NUb5jOlKxvu/k7/l3Yi3B5uz35Txdxv6NQCOBONKrIOOVVIoWb0aSQtOGdG9w62SufhYOu/mQ== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1772261446; c=relaxed/relaxed; bh=X3j0hnt2JP/KFdQ4c7HYEW0UCDX2N/3z8ziNkQTinCU=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=QujyVrfr5r31A6oRWGOaHKMvosFk1qDmJN3Cuyxpv2LGbyTYwNU17dMr5g2PQa0AFMO+WwWgmuYf2AytFUO+wzHqDrpiPZFAZtLhLJ01OF7z1MWYcFjgv5/GMnQA093gR6pzMoLBZm6JoahiN50+Pa9lveDVGyBYus+LqVizTvtxym91N2DBpLuO1a0wzxb0m5a8fSOisEY4RgVjasmUrzsq+CrV2d32f00tTiu5PrX053MIC24/iG8fhq6NbH0MjFnSnSKOdmxEwgNM7tAuarpxAluYnD26sAUa2hBMSbeMNXbL3PTrIctUD/DIPuAk1O16EaFNf655cRAKIlqUDw== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=kernel.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20201202 header.b=iTFfr8oc; dkim-atps=neutral; spf=pass (client-ip=2600:3c04:e001:324:0:1991:8:25; helo=tor.source.kernel.org; envelope-from=ebiggers@kernel.org; receiver=lists.ozlabs.org) smtp.mailfrom=kernel.org Authentication-Results: lists.ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=kernel.org Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20201202 header.b=iTFfr8oc; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=kernel.org (client-ip=2600:3c04:e001:324:0:1991:8:25; helo=tor.source.kernel.org; envelope-from=ebiggers@kernel.org; receiver=lists.ozlabs.org) Received: from tor.source.kernel.org (tor.source.kernel.org [IPv6:2600:3c04:e001:324:0:1991:8:25]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4fNG6s215Qz30BR for ; Sat, 28 Feb 2026 17:50:45 +1100 (AEDT) Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id 3CCA96001D; Sat, 28 Feb 2026 06:50:42 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 11F92C116D0; Sat, 28 Feb 2026 06:50:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772261441; bh=vPTEPlrxe6ytedqa6Me+M+hZkV+rGO8rrN4LIEvszKU=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=iTFfr8ocKEvs3vXYRewYWPSFe2kL3EkPqlXMH9SFlbuxla7B1++TfbbR29cAr/T69 8RlajaFDOInAOiN+ZK7veFCGRmxjx3J7bE/ObG1rUVu/wJzBNzB68455fQxxkndpm2 Tm8vLFnkUPRX5ZN0PkWUIEMTd4tfYl/XR8pSy9Z/UPR0Qpq83+piDFPoy0+TgckjTx fIBVNpnimUABvVb4nGDJC3hmwuwMOJKdRSInNWdlSTmxsPRa6fXgS00DoHU0JgsDRW lp50vbyxlZIuxosoVMrxCRj/2aCgMhGTMqw6gfvTpMznmcYFwDNIHqHcgooJXMIogZ UhhsWMu+jeEcw== Date: Fri, 27 Feb 2026 22:50:38 -0800 From: Eric Biggers To: Christoph Hellwig Cc: Andrew Morton , Richard Henderson , Matt Turner , Magnus Lindholm , Russell King , Catalin Marinas , Will Deacon , Huacai Chen , WANG Xuerui , Madhavan Srinivasan , Michael Ellerman , Nicholas Piggin , "Christophe Leroy (CS GROUP)" , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Christian Borntraeger , Sven Schnelle , "David S. Miller" , Andreas Larsson , Richard Weinberger , Anton Ivanov , Johannes Berg , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Herbert Xu , Dan Williams , Chris Mason , David Sterba , Arnd Bergmann , Song Liu , Yu Kuai , Li Nan , linux-alpha@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, loongarch@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, linux-crypto@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-arch@vger.kernel.org, linux-raid@vger.kernel.org Subject: Re: [PATCH 21/25] xor: add a better public API Message-ID: <20260228065038.GH65277@quark> References: <20260226151106.144735-1-hch@lst.de> <20260226151106.144735-22-hch@lst.de> X-Mailing-List: linuxppc-dev@lists.ozlabs.org List-Id: List-Help: List-Owner: List-Post: List-Archive: , List-Subscribe: , , List-Unsubscribe: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260226151106.144735-22-hch@lst.de> On Thu, Feb 26, 2026 at 07:10:33AM -0800, Christoph Hellwig wrote: > xor_blocks is very annoying to use, because it is limited to 4 + 1 > sources / destinations, has an odd argument order and is completely > undocumented. > > Lift the code that loops around it from btrfs and async_tx/async_xor into > common code under the name xor_gen and properly document it. > > Signed-off-by: Christoph Hellwig > --- > include/linux/raid/xor.h | 3 +++ > lib/raid/xor/xor-core.c | 28 ++++++++++++++++++++++++++++ > 2 files changed, 31 insertions(+) > > diff --git a/include/linux/raid/xor.h b/include/linux/raid/xor.h > index 02bda8d99534..4735a4e960f9 100644 > --- a/include/linux/raid/xor.h > +++ b/include/linux/raid/xor.h > @@ -7,4 +7,7 @@ > extern void xor_blocks(unsigned int count, unsigned int bytes, > void *dest, void **srcs); > > +void xor_gen(void *dest, void **srcss, unsigned int src_cnt, > + unsigned int bytes); srcss => srcs Ideally the source vectors would be 'const' as well. > +/** > + * xor_gen - generate RAID-style XOR information > + * @dest: destination vector > + * @srcs: source vectors > + * @src_cnt: number of source vectors > + * @bytes: length in bytes of each vector > + * > + * Performs bit-wise XOR operation into @dest for each of the @src_cnt vectors > + * in @srcs for a length of @bytes bytes. > + * > + * Note: for typical RAID uses, @dest either needs to be zeroed, or filled with > + * the first disk, which then needs to be removed from @srcs. > + */ > +void xor_gen(void *dest, void **srcs, unsigned int src_cnt, unsigned int bytes) > +{ > + unsigned int src_off = 0; > + > + while (src_cnt > 0) { > + unsigned int this_cnt = min(src_cnt, MAX_XOR_BLOCKS); > + > + xor_blocks(this_cnt, bytes, dest, srcs + src_off); > + > + src_cnt -= this_cnt; > + src_off += this_cnt; > + } > +} > +EXPORT_SYMBOL(xor_gen); The alignment requirements on the vectors should be documented, as should which values of bytes are accepted. It looks like, at the very least, the vectors have to be 32-byte aligned and the length has to be a nonzero multiple of 512 bytes. But I didn't check every implementation. Also, the requirement on the calling context (e.g. !is_interrupt()) should be documented as well. - Eric