root/arch/x86/kernel/cpu/rdrand.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. x86_rdrand_setup
  2. x86_init_rdrand

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  * This file is part of the Linux kernel.
   4  *
   5  * Copyright (c) 2011, Intel Corporation
   6  * Authors: Fenghua Yu <fenghua.yu@intel.com>,
   7  *          H. Peter Anvin <hpa@linux.intel.com>
   8  */
   9 
  10 #include <asm/processor.h>
  11 #include <asm/archrandom.h>
  12 #include <asm/sections.h>
  13 
  14 static int __init x86_rdrand_setup(char *s)
  15 {
  16         setup_clear_cpu_cap(X86_FEATURE_RDRAND);
  17         setup_clear_cpu_cap(X86_FEATURE_RDSEED);
  18         return 1;
  19 }
  20 __setup("nordrand", x86_rdrand_setup);
  21 
  22 /*
  23  * RDRAND has Built-In-Self-Test (BIST) that runs on every invocation.
  24  * Run the instruction a few times as a sanity check.
  25  * If it fails, it is simple to disable RDRAND here.
  26  */
  27 #define SANITY_CHECK_LOOPS 8
  28 
  29 #ifdef CONFIG_ARCH_RANDOM
  30 void x86_init_rdrand(struct cpuinfo_x86 *c)
  31 {
  32         unsigned long tmp;
  33         int i;
  34 
  35         if (!cpu_has(c, X86_FEATURE_RDRAND))
  36                 return;
  37 
  38         for (i = 0; i < SANITY_CHECK_LOOPS; i++) {
  39                 if (!rdrand_long(&tmp)) {
  40                         clear_cpu_cap(c, X86_FEATURE_RDRAND);
  41                         pr_warn_once("rdrand: disabled\n");
  42                         return;
  43                 }
  44         }
  45 }
  46 #endif

/* [<][>][^][v][top][bottom][index][help] */