Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp6139395iog; Thu, 23 Jun 2022 12:09:57 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sVSVCvyec+hluYQJILkN0/Fjn/REkXYQ3ztcVoD1OJluOpzMmcjQwXIksdTEoecKMR+/3q X-Received: by 2002:a17:907:1b14:b0:6ef:a5c8:afbd with SMTP id mp20-20020a1709071b1400b006efa5c8afbdmr9752452ejc.151.1656011396966; Thu, 23 Jun 2022 12:09:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1656011396; cv=none; d=google.com; s=arc-20160816; b=v5JlUvuBx7gyNj8si9eyCdnhMxAc9IKLK0/nCPk/9ZpUg1c+1OWwoAehwBg0+md+1Y DKBVTlbeQu3HY5aXleaGFdIEYZZ2bVR/lOwqaPnGyhsQ4comGHJKl62VDaT8zxRGY515 f+boOLD9wXAzv3ftSpgu+Ree4DmoPg4mgIfA3Jo5j98YaRiNJBJuFQw7rAaS/NAs6kiG W8Ev3yhVEmyBi3baPmsDgo5EM421QIF8i4a/NEDSG1XUP1NdXCbZCK+vVoog3cqPtk0s 4eKtYoFdSap3LBCmfBGf7AFvPJXcEbAY1k/LsGlpG10G3eaipGB5M7mXzTA73uA4c3Lw CVUg== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=GBsq33IG7w/nIU2lbNpbZ3GrPr8LsCxxakp6ynYFGX4=; b=OYE1ZFpLWk+DTVwt4irltpGwcowyJ08Tm6ZtlIIsczPBRe6deAq1Qj0NZptJag/WoK yuJUlOXuSZrpc5ThBnZkkTtq6XLFdOmlVoRX5vKpF3vNrGzbumzZAx6GLvqKub9b2mB1 zVf1q8NYlFztak8zPLoURKaAZtXM7AD+/+2QPyGS5bgGiiM9np6Js56mf3ANIk4Ecbmr lIm5TMCWTJw2JgddQkWcIMv+RiVMxfFHDkVpgc79blUV1AZuIPKIzxqUGZOVURrwdCkd QxnupuVGdSFLXigFTqeImbECUQbCxP6DUUM+3ZI+6FgypViIoxL8ITVvFtq1T0ezFzfl 73eg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=EnNSUGDk; 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=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id dp17-20020a170906c15100b006fec459b41esi4645176ejc.541.2022.06.23.12.09.32; Thu, 23 Jun 2022 12:09:56 -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=@linuxfoundation.org header.s=korg header.b=EnNSUGDk; 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=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232019AbiFWREX (ORCPT + 99 others); Thu, 23 Jun 2022 13:04:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48506 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233500AbiFWRCt (ORCPT ); Thu, 23 Jun 2022 13:02:49 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 57876506EE; Thu, 23 Jun 2022 09:54:35 -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 11B9CB8249A; Thu, 23 Jun 2022 16:54:31 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 71B90C341C5; Thu, 23 Jun 2022 16:54:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1656003269; bh=Af/mC/zq4tKhaB0LwhH5Vk0R8nnqO8wO9ms7HejQAZU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EnNSUGDkuHKrULsDV6cs9lMYtdvjB0P1k4CLlW5zU+Q3SSok1BGUuhRSjW4tpxxAh X50Cd3SE1t55wZbelmFggej6U2nmfVhWGAtRwlLySlScGxQ6TWxWrUhA2ACWAtcEXM u90IadAhFuHMrNNkw5PQpfC1/ul2F7MV8/Q6a+Dc= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Thomas Gleixner , Arnd Bergmann , "Maciej W. Rozycki" , Thomas Bogendoerfer , "Jason A. Donenfeld" Subject: [PATCH 4.9 185/264] mips: use fallback for random_get_entropy() instead of just c0 random Date: Thu, 23 Jun 2022 18:42:58 +0200 Message-Id: <20220623164349.302969110@linuxfoundation.org> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220623164344.053938039@linuxfoundation.org> References: <20220623164344.053938039@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 From: "Jason A. Donenfeld" commit 1c99c6a7c3c599a68321b01b9ec243215ede5a68 upstream. 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 Signed-off-by: Greg Kroah-Hartman --- arch/mips/include/asm/timex.h | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) --- 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