Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp10117821rwb; Fri, 25 Nov 2022 01:00:01 -0800 (PST) X-Google-Smtp-Source: AA0mqf6gggxjAW0TFDgBYcGVRfgIn37UvZbH/G4C9hb83HjGPfZVy3FIA+1BWignDOHdJv1h0V1B X-Received: by 2002:a17:902:b184:b0:189:1d01:a4ae with SMTP id s4-20020a170902b18400b001891d01a4aemr17921751plr.93.1669366801027; Fri, 25 Nov 2022 01:00:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669366801; cv=none; d=google.com; s=arc-20160816; b=xhxOUjJHTDmQOJ8mcNhH4AzaKoTPKu0oEb9GqXHosB6+Yz0zrop8vvBMinT9p5qxYE y92nHOXaV4yA5y7uGaaiq+/HIwrqA2m/InU8DgAuHlkxoePhd7mWexW9QJeI90RWGbQB vsgMJbt8i9/LiTpnfvu0v3gSwMflfAXi9be6qM5jDwMYS8cO62Wydyra5Olxoiq5G4e3 3kbEEuczFIOV/0HWHH/LUlMjlkEm1UtvvbXtxn3iUbhhQgJvJE81oKE9rxZywbAqHd8a uTJDYeyvAmCPFuiq6ng926YcOR5QZsO4geucK4z1tayACPkVEb6gMyCxHs08gpc/He9b IWxg== 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=uuUj1PbmJc8nR+mGPmSwMDO4t+Rz0wF10MneN8gPapM=; b=ID5JVNp6v5h2ORV7qRqcll0AW48rOXCga+Pbgmsr+l1sKyYKeAnlYk6Tu1CoAYOik7 WSetW9qZhhfy2L1KLSosu6/qmsfQD3Bz9crNCjbHtnPvT2G6rWkIBvqwdXEXP5PVNaP/ jEXyfH1ztB5+kR7OIBEqB+Qi3p/oFMmIVIPDS/fjljiiXp3rN4RqPv/29WlK7cYSaSbT nC1mcET7f2pnqLXBmGj0zLL54TFQR0J0z2E7gk0Sv+EZ6LvaDmuabPKU1ADlyf3dDAp/ 7mq7vHk7PiT6nm3hp4JxszMR4Nu/zZhF/nMl3JWDUzdVVmnd2TxY9qjT3h9GVNZrtoiE fTRg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=pvhygxmh; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-crypto-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 g8-20020a17090a67c800b002190ba4112dsi1234865pjm.94.2022.11.25.00.59.47; Fri, 25 Nov 2022 01:00:01 -0800 (PST) Received-SPF: pass (google.com: domain of linux-crypto-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=pvhygxmh; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-crypto-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 S229510AbiKYI7e (ORCPT + 99 others); Fri, 25 Nov 2022 03:59:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45794 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229502AbiKYI7d (ORCPT ); Fri, 25 Nov 2022 03:59:33 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 92C1431EE7; Fri, 25 Nov 2022 00:59:32 -0800 (PST) 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 dfw.source.kernel.org (Postfix) with ESMTPS id 16CBB6230E; Fri, 25 Nov 2022 08:59:32 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7DEB7C433B5; Fri, 25 Nov 2022 08:59:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1669366771; bh=tKXgzOEam9Y7w9Zqw7Ty+4SAeHCvrSV+lqu7ZnYbTtI=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=pvhygxmhUCTu+f6JE2uHMB7CNVv5IukUss7nahMmOqRKCGt6kEjpHhRdgTb4YFMxx PlvHWP+v3slpb6HpMTl9U3DQhMb1NVdPTwxdJO3bw9b8fFyd2q8VcnUWO1L3e0xvVr IU+WdCTTzVQokyJOVQwW9gPFol0Z+CbgWuSvhix4mWDMEUl7wZx2hgo3zeopKQG94l dBjCRGgyg4R2iZP3xlkQQl3tMAt45Gx9p0nr9l0wGNj/59rMgvGwqknHOOpyQJXned 7xqnAb/fz/jsQzpw9qKvk72NOAZnrYgx4Wd9zLJHMlLBw00ZIY4GOjTj4AwAz2IqdX cgoF78LTD5U2g== Received: by mail-lf1-f41.google.com with SMTP id d6so5873598lfs.10; Fri, 25 Nov 2022 00:59:31 -0800 (PST) X-Gm-Message-State: ANoB5pl0zR4nelQO+k4xRRfrhQLEsBH3LpPMVO4b/OMJyBoWPdE0KgBR enj/10Ytw7Zai+CdZFDJ7SNZcSMWF8UFz0Z8ar0= X-Received: by 2002:ac2:488e:0:b0:4b4:cf32:e105 with SMTP id x14-20020ac2488e000000b004b4cf32e105mr9000508lfc.110.1669366769424; Fri, 25 Nov 2022 00:59:29 -0800 (PST) MIME-Version: 1.0 References: <20221103042740.6556-1-elliott@hpe.com> <20221116041342.3841-1-elliott@hpe.com> <20221116041342.3841-11-elliott@hpe.com> In-Reply-To: From: Ard Biesheuvel Date: Fri, 25 Nov 2022 09:59:17 +0100 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v4 10/24] crypto: x86/poly - limit FPU preemption To: Herbert Xu Cc: "Jason A. Donenfeld" , Robert Elliott , davem@davemloft.net, tim.c.chen@linux.intel.com, ap420073@gmail.com, David.Laight@aculab.com, ebiggers@kernel.org, linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-7.1 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 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-crypto@vger.kernel.org On Fri, 25 Nov 2022 at 09:41, Herbert Xu wrote: > > On Wed, Nov 16, 2022 at 12:13:51PM +0100, Jason A. Donenfeld wrote: > > On Tue, Nov 15, 2022 at 10:13:28PM -0600, Robert Elliott wrote: > > > +/* avoid kernel_fpu_begin/end scheduler/rcu stalls */ > > > +static const unsigned int bytes_per_fpu = 337 * 1024; > > > + > > > > Use an enum for constants like this: > > > > enum { BYTES_PER_FPU = ... }; > > > > You can even make it function-local, so it's near the code that uses it, > > which will better justify its existence. > > > > Also, where did you get this number? Seems kind of weird. > > These numbers are highly dependent on hardware and I think having > them hard-coded is wrong. > > Perhaps we should try a different approach. How about just limiting > the size to 4K, and then depending on need_resched we break out of > the loop? Something like: > > if (!len) > return 0; > > kernel_fpu_begin(); > for (;;) { > unsigned int chunk = min(len, 4096); > > sha1_base_do_update(desc, data, chunk, sha1_xform); > > len -= chunk; > data += chunk; > > if (!len) > break; > > if (need_resched()) { > kernel_fpu_end(); > cond_resched(); > kernel_fpu_begin(); > } > } > kernel_fpu_end(); > On arm64, this is implemented in an assembler macro 'cond_yield' so we don't need to preserve/restore the SIMD state state at all if the yield is not going to result in a call to schedule(). For example, the SHA3 code keeps 400 bytes of state in registers, which we don't want to save and reload unless needed. (5f6cb2e617681 'crypto: arm64/sha512-ce - simplify NEON yield') So the asm routines will call cond_yield, and return early if a yield is required, with the number of blocks or bytes left to process as the return value. The C wrapper just calls the asm routine in a loop until the return value becomes 0. That way, we don't need magic values at all, and the yield will occur as soon as the asm inner loop observes the yield condition so the latency should be much lower as well. Note that it is only used in shash implementations, given that they are the only ones that may receive unbounded inputs.