Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp4086246pxb; Tue, 19 Apr 2022 16:46:21 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwf+M/e2zf0lVXboy6eGVfIO9Rng2yk5i6zsoToC/w1rhBLnCFIi9kZ6l7RDRP1EHq2srY1 X-Received: by 2002:a17:907:6d9e:b0:6ef:f3a8:38b5 with SMTP id sb30-20020a1709076d9e00b006eff3a838b5mr2148813ejc.23.1650411981020; Tue, 19 Apr 2022 16:46:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1650411981; cv=none; d=google.com; s=arc-20160816; b=jlwUhPt9kmy9DRGcxo+JoR2k03M6dvFJC7gon0utd7KjkLmHifnqHyAZxfeH4K0jgC /Zn0tmjAoI1o8heYty60tCsLXAcoZ82TTc8TqpxUS2Zv4d4w9R1/agSQYHuBhHFHTdHu VTYesZrrRi9j2npOFhvk4jKhLAkzu35gDvGo3Ijt94LbXKjbbwldwOnu9KQ02dlmu3su vlOE+HHGLzyllqMJinSO/4vv9dwi9y5U7ofHumCRrdbRbSZFCRf55sE+hMbgeKTnQhAQ GHAs/8z1FkMl1WAGWG0j1AsunNhVNqh+OnTPhBlGcbOp10lYOTieA++N07gX2EuuoOAb 3U5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=EGi9oAUDyl+rEbbtB8qY1nM+vV74537SxMpG2Y4kiww=; b=N6bpsUc7AhnxF0epbjxiddmU1cfOfsf9U69ury3TzhV54om4JHv7sTSrpFXWTFBzcU 5IEm1krlA78wAQEBh8nP72kaI38cZx8zJrQoTx6j/qHmhWrJfbIzPdtuj22BgZWvopdT D1NAIcXmPrd8MB9u+KKcN6RuOE57kPWqSAG/yWMzAljBmaRsQ05tOnM84J4yAo7qRmqY 8qy6g2rDcJZYeaQsyeiNFobsYJn1u3VbECQvxtoVe84H+ORRiJL1w7cBkjf6stxcWtea 1cBekDDHHXgsihrlPDUTLRSfywo+em1091scdMtV1rM1utF6xawE6mH4plISNd3GozNf XfHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=N9vV7hIQ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d3-20020a1709067f0300b006e8625949efsi544011ejr.923.2022.04.19.16.45.57; Tue, 19 Apr 2022 16:46:21 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=N9vV7hIQ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241693AbiDSVxP (ORCPT + 99 others); Tue, 19 Apr 2022 17:53:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45060 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233514AbiDSVxL (ORCPT ); Tue, 19 Apr 2022 17:53:11 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 23B5639BA2 for ; Tue, 19 Apr 2022 14:50:27 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id E0B11B81A3D for ; Tue, 19 Apr 2022 21:50:25 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8842EC385B2 for ; Tue, 19 Apr 2022 21:50:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1650405024; bh=19+C6lovXblzkzesiQNBstoa94kewx17o/4B7AAGQ3A=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=N9vV7hIQyo8lzzHx/Up7J4SUised1IeJyLkHOyV+Qm0MrG8AvMoVkUj0cA5zMjfK6 5BbHpuyfX08WzvIYkX0cnMGoHWYgzfL2bFhqS19iwGcx9y6WzcK54/pt/UZfJvmrNo yqcDZvmOMa3iAwF0gQd6k4Qn0FrGGIWfRLnh/s7mMQKWLBEW3t7o9jN7M7h8uMf4K3 GE1qgyfLzEvUyXIjkrTo6I96DOwYkgMvtpkUOcv4XZAWaojEYZ4XIDqgGd2hdBo/av HgK6aOF79uGNkHIInXG8T6/02VzO3dfwfrzmtAEwbp6GpAYry5o0fAECdPJ9XUELz5 LwdToN9o/t8Yg== Received: by mail-oo1-f48.google.com with SMTP id f13-20020a4aa68d000000b0033a2c53d0baso1616797oom.0 for ; Tue, 19 Apr 2022 14:50:24 -0700 (PDT) X-Gm-Message-State: AOAM532GdJheomF3XfRgrJK1LCSGy6Zl/MtczIpOhHtJKukF0JyI1/AK jwpYrKau2i9IZf1+Zjj5h60FxfFYnIbhb51fgnk= X-Received: by 2002:a05:6820:16c:b0:33a:3348:bdbe with SMTP id k12-20020a056820016c00b0033a3348bdbemr4949595ood.98.1650405023571; Tue, 19 Apr 2022 14:50:23 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Ard Biesheuvel Date: Tue, 19 Apr 2022 23:50:11 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 07/10] crypto: Use ARCH_DMA_MINALIGN instead of ARCH_KMALLOC_MINALIGN To: Catalin Marinas Cc: Herbert Xu , Will Deacon , Marc Zyngier , Arnd Bergmann , Greg Kroah-Hartman , Andrew Morton , Linus Torvalds , Linux Memory Management List , Linux ARM , Linux Kernel Mailing List , "David S. Miller" Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-7.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 18 Apr 2022 at 18:44, Catalin Marinas wrote: > > On Mon, Apr 18, 2022 at 04:37:17PM +0800, Herbert Xu wrote: > > On Sun, Apr 17, 2022 at 05:30:27PM +0100, Catalin Marinas wrote: > > > Do you mean as per Ard's proposal here: > > > > > > https://lore.kernel.org/r/CAMj1kXH0x5Va7Wgs+mU1ONDwwsazOBuN4z4ihVzO2uG-n41Kbg@mail.gmail.com > > > > > > struct crypto_request { > > > union { > > > struct { > > > ... fields ... > > > }; > > > u8 __padding[ARCH_DMA_MINALIGN]; > > > }; > > > void __ctx[] __aligned(CRYPTO_MINALIGN); > > > }; > > > > > > If CRYPTO_MINALIGN is lowered to, say, 8 (to be the same as lowest > > > ARCH_KMALLOC_MINALIGN), the __alignof__(req->__ctx) would be 8. > > > Functions like crypto_tfm_ctx_alignment() will return 8 when what you > > > need is 128. We can change those functions to return ARCH_DMA_MINALIGN > > > instead or always bump cra_alignmask to ARCH_DMA_MINALIGN-1. > > > > OK, at this point I think we need to let the code do the talking :) > > > > I've seen Ard's patches already and I think I understand what your > > needs are. So let me whip up some code to show you guys what I > > think needs to be done. > > BTW before you have a go at this, there's also Linus' idea that does not > change the crypto code (at least not functionally). Of course, you and > Ard can still try to figure out how to reduce the padding but if we go > with Linus' idea of a new GFP_NODMA flag, there won't be any changes to > the crypto code as long as it doesn't pass such flag. So, the options: > > 1. Change ARCH_KMALLOC_MINALIGN to 8 (or ARCH_SLAB_MINALIGN if higher) > while keeping ARCH_DMA_MINALIGN to 128. By default kmalloc() will > honour the 128-byte alignment, unless GDP_NODMA is passed. This still > requires changing CRYPTO_MINALIGN to ARCH_DMA_MINALIGN but there is > no functional change, kmalloc() without the new flag will return > CRYPTO_MINALIGN-aligned pointers. > > 2. Leave ARCH_KMALLOC_MINALIGN as ARCH_DMA_MINALIGN (128) and introduce > a new GFP_PACKED (I think it fits better than 'NODMA') flag that > reduces the minimum kmalloc() below ARCH_KMALLOC_MINALIGN (and > probably at least ARCH_SLAB_MINALIGN). It's equivalent to (1) but > does not touch the crypto code at all. > > (1) and (2) are the same, just minor naming difference. Happy to go with > any of them. They still have the downside that we need to add the new > GFP_ flag to those hotspots that allocate small objects (Arnd provided > an idea on how to find them with ftrace) but at least we know it won't > inadvertently break anything. > I'm not sure GFP_NODMA adds much here. The way I see it, the issue in the crypto code is that we are relying on a ARCH_KMALLOC_ALIGN aligned zero length __ctx[] array for three different things: - ensuring/informing the compiler that top-level request/TFM structures are aligned to ARCH_KMALLOC_ALIGN, - adding padding to ensure that driver context structures that are embedded in those top-level request/TFM structures are sufficiently aligned so that any member C types appear at the expected alignment (but those structures are not usually defined as being aligned to ARCH_KMALLOC_ALIGN) - adding padding to ensure that these driver context structures do not share cache lines with the preceding top-level struct. One thing to note here is that the padding is only necessary when the driver context size > 0, and has nothing to do with the alignment of the top-level struct. Using a single aligned ctx member was a nice way to accomplish all of these when it was introduced, but I think it might be better to get rid of it, and move the padding logic to the static inline helpers instead. So something like struct skcipher_request { ... } CRYPTO_MINALIGN_ATTR; which states/ensures the alignment of the struct, and void *skcipher_request_ctx(struct skcipher_request *req) { return (void *)PTR_ALIGN(req + 1, ARCH_DMA_MINALIGN); } to get at the context struct, instead of using a struct field. Then, we could update skcipher_request_alloc() to only round up sizeof(struct skipher_request) to ARCH_DMA_MINALIGN if the reqsize is >0 to begin with, and if it is, to also round reqsize up to ARCH_DMA_MINALIGN when accessed. That way, we spell out the DMA padding requirements with relying on aligned struct members. If we do it this way, we have a clear distinction between expectations about what kmalloc returns in terms of alignment, and adding padding to influence the placement of the context struct. It also makes it easier to either apply the changes I proposed in the series I sent out a couple of weeks ago, or get rid of DMA alignment for request/TFM structures altogether, if we manage to identify and fix the drivers that are relying on this. In any case, it decouples these two things in a way that allows Catalin to make his kmalloc changes without having to redefine CRYPTO_MINALIGN to ARCH_DMA_MINALIGN. -- Ard.