mirror of
https://github.com/RGBCube/serenity
synced 2025-05-22 15:55:07 +00:00
Kernel: Don't use function-level static variables
When building the kernel for x86_64 the compiler injects calls to __cxa_guard_acquire which depends on a bunch of pthread functions we don't have in the kernel.
This commit is contained in:
parent
6600835802
commit
dc3cc7368b
1 changed files with 3 additions and 3 deletions
|
@ -17,6 +17,7 @@
|
||||||
namespace Kernel {
|
namespace Kernel {
|
||||||
|
|
||||||
static AK::Singleton<KernelRng> s_the;
|
static AK::Singleton<KernelRng> s_the;
|
||||||
|
static Atomic<u32, AK::MemoryOrder::memory_order_relaxed> s_next_random_value = 1;
|
||||||
|
|
||||||
KernelRng& KernelRng::the()
|
KernelRng& KernelRng::the()
|
||||||
{
|
{
|
||||||
|
@ -88,7 +89,6 @@ size_t EntropySource::next_source { static_cast<size_t>(EntropySource::Static::M
|
||||||
|
|
||||||
static void do_get_fast_random_bytes(u8* buffer, size_t buffer_size)
|
static void do_get_fast_random_bytes(u8* buffer, size_t buffer_size)
|
||||||
{
|
{
|
||||||
static Atomic<u32, AK::MemoryOrder::memory_order_relaxed> next = 1;
|
|
||||||
|
|
||||||
union {
|
union {
|
||||||
u8 bytes[4];
|
u8 bytes[4];
|
||||||
|
@ -97,10 +97,10 @@ static void do_get_fast_random_bytes(u8* buffer, size_t buffer_size)
|
||||||
size_t offset = 4;
|
size_t offset = 4;
|
||||||
for (size_t i = 0; i < buffer_size; ++i) {
|
for (size_t i = 0; i < buffer_size; ++i) {
|
||||||
if (offset >= 4) {
|
if (offset >= 4) {
|
||||||
auto current_next = next.load();
|
auto current_next = s_next_random_value.load();
|
||||||
for (;;) {
|
for (;;) {
|
||||||
auto new_next = current_next * 1103515245 + 12345;
|
auto new_next = current_next * 1103515245 + 12345;
|
||||||
if (next.compare_exchange_strong(current_next, new_next)) {
|
if (s_next_random_value.compare_exchange_strong(current_next, new_next)) {
|
||||||
u.value = new_next;
|
u.value = new_next;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue