diff --git a/Kernel/Random.cpp b/Kernel/Random.cpp index e49678a0f3..f98162565e 100644 --- a/Kernel/Random.cpp +++ b/Kernel/Random.cpp @@ -29,27 +29,17 @@ KernelRng& KernelRng::the() UNMAP_AFTER_INIT KernelRng::KernelRng() { #if ARCH(X86_64) - bool supports_rdseed = Processor::current().has_feature(CPUFeature::RDSEED); - bool supports_rdrand = Processor::current().has_feature(CPUFeature::RDRAND); - if (supports_rdseed || supports_rdrand) { - dmesgln("KernelRng: Using RDSEED or RDRAND as entropy source"); - for (size_t i = 0; i < pool_count * reseed_threshold; ++i) { - u32 value = 0; - if (supports_rdseed) { - asm volatile( - "1:\n" - "rdseed %0\n" - "jnc 1b\n" - : "=r"(value)); - } else { - asm volatile( - "1:\n" - "rdrand %0\n" - "jnc 1b\n" - : "=r"(value)); - } + if (Processor::current().has_feature(CPUFeature::RDSEED)) { + dmesgln("KernelRng: Using RDSEED as entropy source"); - add_random_event(value, i % 32); + for (size_t i = 0; i < pool_count * reseed_threshold; ++i) { + add_random_event(Kernel::rdseed(), i % 32); + } + } else if (Processor::current().has_feature(CPUFeature::RDRAND)) { + dmesgln("KernelRng: Using RDRAND as entropy source"); + + for (size_t i = 0; i < pool_count * reseed_threshold; ++i) { + add_random_event(Kernel::rdrand(), i % 32); } } else if (TimeManagement::the().can_query_precise_time()) { // Add HPET as entropy source if we don't have anything better.