Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp1765520pxb; Sat, 23 Apr 2022 17:02:50 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxlqea/bH2zGL0lHKeTbeKRtq8BQwzq0HMvg+BJBClmCUi9sppSfwQpsYVDBbMLcLzxF9Fs X-Received: by 2002:a17:907:72d5:b0:6ef:a49f:133a with SMTP id du21-20020a17090772d500b006efa49f133amr10325033ejc.420.1650758569997; Sat, 23 Apr 2022 17:02:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1650758569; cv=none; d=google.com; s=arc-20160816; b=1IledWJCy4kkBHGzpTR/Jtfb0kkW1gVKCWlGiPknW6RRkQKdOFpYTYXA9sh5Jd2c4s Sb5KpSH42hmbTMM1ueTcOuMRHqYg8jmn66gQLrH/LEjiO1TM5A+DaAGZKuv0HzsWUAID N31v9xVMJhvQDie5fgLClzyt7GyTycCROoxt09OKhcYLux8e1nWkOVFTw/lpDYQ/Y9jx ot5xCRET4fygj1NrqQdb6SBUC8a+S3864rzhB2shXrz5vD/4oXra0Wptc66X7eukloZ+ j9s8Pfx0cp3jRiKtY3jrOtCuBJ8a/BnFM7fhjRdmg/uUI82JZpxn5SJLyN3B2/6xJQCX lmyw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Qw7HzrLJAMiqwJWcj8fLuq9LdY+aV/VnphhmLW9agDo=; b=AEt0YAu+gNWljJpx0TMNFfT+8TsM4HsarMWdGG/WShCSENpWjgyonYEUrYFnOmoV/n aZtePIbI2AyGhxRKW+u/mSXhJlF4Ty+IRIAvBwSnPUFfQms9A3sjrIMAa6WREkiZGqmF G2wCFCLbaoDcJxxlTMJBs0Cya3MQ22vIcH4yjmz+o5DSevWv9Yd1zBxGXTaR46uEnYef x4RW6M6rlmKA5YM6VAMNNMKSx2v4y2PIVFpvommwif2wsqj7y+zFaD+M9zPgW5UWodqH 2XFhCtRDAPt9n2s3lJOsEjAdpqDSW0dVisYFNJ7UfgFIDOxIy7KPX0Sqn9J0dVVOrKx+ dCaw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@zx2c4.com header.s=20210105 header.b=OmGmi1d7; 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=zx2c4.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ej22-20020a056402369600b00425c128194dsi4430940edb.373.2022.04.23.17.02.25; Sat, 23 Apr 2022 17:02:49 -0700 (PDT) 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=@zx2c4.com header.s=20210105 header.b=OmGmi1d7; 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=zx2c4.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237281AbiDWVbU (ORCPT + 99 others); Sat, 23 Apr 2022 17:31:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47624 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237177AbiDWVbB (ORCPT ); Sat, 23 Apr 2022 17:31:01 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 844FD2DA9C; Sat, 23 Apr 2022 14:27:31 -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 dfw.source.kernel.org (Postfix) with ESMTPS id 66E5461037; Sat, 23 Apr 2022 21:27:30 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 07EC7C385A0; Sat, 23 Apr 2022 21:27:28 +0000 (UTC) Authentication-Results: smtp.kernel.org; dkim=pass (1024-bit key) header.d=zx2c4.com header.i=@zx2c4.com header.b="OmGmi1d7" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zx2c4.com; s=20210105; t=1650749247; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Qw7HzrLJAMiqwJWcj8fLuq9LdY+aV/VnphhmLW9agDo=; b=OmGmi1d7JiSHaivA2CJ+c0BDv+W3GzH48CaEnNzOrQl5hIocXEAaqq0KI3EuM1vxvAlvuy VRk0ifm647x23uyTztbFSgsHXXT+SppYCp1nrsSeaRzIMnOoKoCrbx5pTNn4AYkdRSVv21 3pJUdTsMPmKkXKc6MFJtrg34u0a80Lk= Received: by mail.zx2c4.com (ZX2C4 Mail Server) with ESMTPSA id c077e6e5 (TLSv1.3:AEAD-AES256-GCM-SHA384:256:NO); Sat, 23 Apr 2022 21:27:27 +0000 (UTC) From: "Jason A. Donenfeld" To: linux-kernel@vger.kernel.org, linux-crypto@vger.kernel.org, tglx@linutronix.de, arnd@arndb.de Cc: "Jason A. Donenfeld" , "Maciej W . Rozycki" , Thomas Bogendoerfer Subject: [PATCH v6 09/17] mips: use fallback for random_get_entropy() instead of just c0 random Date: Sat, 23 Apr 2022 23:26:15 +0200 Message-Id: <20220423212623.1957011-10-Jason@zx2c4.com> In-Reply-To: <20220423212623.1957011-1-Jason@zx2c4.com> References: <20220423212623.1957011-1-Jason@zx2c4.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_HI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 For situations in which we don't have a c0 counter register available, we've been falling back to reading the c0 "random" register, which is usually bounded by the amount of TLB entries and changes every other cycle or so. This means it wraps extremely often. We can do better by combining this fast-changing counter with a potentially slower-changing counter from random_get_entropy_fallback() in the more significant bits. This commit combines the two, taking into account that the changing bits are in a different bit position depending on the CPU model. In addition, we previously were falling back to 0 for ancient CPUs that Linux does not support anyway; remove that dead path entirely. Cc: Thomas Gleixner Cc: Arnd Bergmann Tested-by: Maciej W. Rozycki Acked-by: Thomas Bogendoerfer Signed-off-by: Jason A. Donenfeld --- arch/mips/include/asm/timex.h | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/arch/mips/include/asm/timex.h b/arch/mips/include/asm/timex.h index b05bb70a2e46..8cfa485d19e6 100644 --- a/arch/mips/include/asm/timex.h +++ b/arch/mips/include/asm/timex.h @@ -76,25 +76,24 @@ static inline cycles_t get_cycles(void) else return 0; /* no usable counter */ } +#define get_cycles get_cycles /* * Like get_cycles - but where c0_count is not available we desperately * use c0_random in an attempt to get at least a little bit of entropy. - * - * R6000 and R6000A neither have a count register nor a random register. - * That leaves no entropy source in the CPU itself. */ static inline unsigned long random_get_entropy(void) { - unsigned int prid = read_c0_prid(); - unsigned int imp = prid & PRID_IMP_MASK; + unsigned int c0_random; - if (can_use_mips_counter(prid)) + if (can_use_mips_counter(read_c0_prid())) return read_c0_count(); - else if (likely(imp != PRID_IMP_R6000 && imp != PRID_IMP_R6000A)) - return read_c0_random(); + + if (cpu_has_3kex) + c0_random = (read_c0_random() >> 8) & 0x3f; else - return 0; /* no usable register */ + c0_random = read_c0_random() & 0x3f; + return (random_get_entropy_fallback() << 6) | (0x3f - c0_random); } #define random_get_entropy random_get_entropy -- 2.35.1