mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-23 21:32:39 +02:00
kernel: Review comments (move to private interface to private headers, atomics)
This commit is contained in:
parent
9da123f916
commit
26b17cdae5
@ -16,8 +16,3 @@ struct UsermodeEvent
|
||||
void ueventCreate(UsermodeEvent* e, bool auto_clear);
|
||||
void ueventClear(UsermodeEvent* e);
|
||||
void ueventSignal(UsermodeEvent* e);
|
||||
|
||||
// Internal methods (do not use!):
|
||||
bool _ueventConsumeIfSignalled(UsermodeEvent* e);
|
||||
void _ueventAddListener(UsermodeEvent* e, WaiterNode* w);
|
||||
void _ueventRemoveListener(UsermodeEvent* e, WaiterNode* w);
|
||||
|
@ -13,7 +13,3 @@ struct UsermodeTimer
|
||||
void utimerCreate(UsermodeTimer* t, u64 interval, bool start);
|
||||
void utimerStart(UsermodeTimer* t);
|
||||
void utimerStop(UsermodeTimer* t);
|
||||
|
||||
// Internal methods (do not use!):
|
||||
void _utimerRecalculate(UsermodeTimer* t, u64 old_time);
|
||||
u64 _utimerGetNextTime(UsermodeTimer* t);
|
||||
|
@ -26,10 +26,3 @@ struct Waiter
|
||||
WaiterNode nodes[MAX_WAIT];
|
||||
size_t num_nodes;
|
||||
};
|
||||
|
||||
// Internal methods (do not use!):
|
||||
void _waiterCreate(Waiter* w);
|
||||
void _waiterFree(Waiter* w, WaitObject* objects);
|
||||
void _waiterSubscribe(Waiter* w, UsermodeEvent* e);
|
||||
bool _waiterSignal(Waiter* w, s32 idx);
|
||||
s32 _waiterGetSignalledIndex(Waiter* w);
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include "kernel/mutex.h"
|
||||
#include "kernel/waiter.h"
|
||||
#include "kernel/uevent.h"
|
||||
#include "waiter.h"
|
||||
|
||||
void ueventCreate(UsermodeEvent* e, bool auto_clear)
|
||||
{
|
||||
|
7
nx/source/kernel/uevent.h
Normal file
7
nx/source/kernel/uevent.h
Normal file
@ -0,0 +1,7 @@
|
||||
// Copyright 2018 plutoo
|
||||
#pragma once
|
||||
#include "kernel/uevent.h"
|
||||
|
||||
bool _ueventConsumeIfSignalled(UsermodeEvent* e);
|
||||
void _ueventAddListener(UsermodeEvent* e, WaiterNode* w);
|
||||
void _ueventRemoveListener(UsermodeEvent* e, WaiterNode* w);
|
@ -14,22 +14,23 @@ void utimerCreate(UsermodeTimer* t, u64 interval, bool start)
|
||||
|
||||
void utimerStart(UsermodeTimer* t)
|
||||
{
|
||||
__sync_bool_compare_and_swap(&t->next_time, 0, armGetSystemTick() + armNsToTick(t->interval));
|
||||
u64 zero = 0;
|
||||
__atomic_compare_exchange_n(&t->next_time, &zero, armGetSystemTick() + armNsToTick(t->interval), false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
|
||||
}
|
||||
|
||||
void utimerStop(UsermodeTimer* t)
|
||||
{
|
||||
while (__sync_bool_compare_and_swap(&t->next_time, t->next_time, 0));
|
||||
while (!__atomic_compare_exchange_n(&t->next_time, &t->next_time, 0, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST));
|
||||
}
|
||||
|
||||
void _utimerRecalculate(UsermodeTimer* t, u64 old_time)
|
||||
{
|
||||
s64 interval = t->interval;
|
||||
s64 new_time = ((armGetSystemTick() - old_time + interval - 1) / interval) * interval;
|
||||
__sync_bool_compare_and_swap(&t->next_time, old_time, new_time);
|
||||
__atomic_compare_exchange_n(&t->next_time, &old_time, new_time, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
|
||||
}
|
||||
|
||||
u64 _utimerGetNextTime(UsermodeTimer* t)
|
||||
{
|
||||
return t->next_time;
|
||||
return __atomic_load_n(&t->next_time, __ATOMIC_SEQ_CST);
|
||||
}
|
||||
|
6
nx/source/kernel/utimer.h
Normal file
6
nx/source/kernel/utimer.h
Normal file
@ -0,0 +1,6 @@
|
||||
// Copyright 2018 plutoo
|
||||
#pragma once
|
||||
#include "kernel/utimer.h"
|
||||
|
||||
void _utimerRecalculate(UsermodeTimer* t, u64 old_time);
|
||||
u64 _utimerGetNextTime(UsermodeTimer* t);
|
@ -6,6 +6,9 @@
|
||||
#include "kernel/utimer.h"
|
||||
#include "kernel/uevent.h"
|
||||
#include "arm/counter.h"
|
||||
#include "waiter.h"
|
||||
#include "utimer.h"
|
||||
#include "uevent.h"
|
||||
#include "../internal.h"
|
||||
|
||||
Result waitN(s32* idx_out, WaitObject* objects, size_t num_objects, u64 timeout)
|
||||
|
@ -1,6 +1,8 @@
|
||||
// Copyright 2018 plutoo
|
||||
#include "kernel/waiter.h"
|
||||
#include "kernel/uevent.h"
|
||||
#include "waiter.h"
|
||||
#include "uevent.h"
|
||||
#include "../internal.h"
|
||||
|
||||
#define NOT_YET_SIGNALLED (-1)
|
||||
|
10
nx/source/kernel/waiter.h
Normal file
10
nx/source/kernel/waiter.h
Normal file
@ -0,0 +1,10 @@
|
||||
// Copyright 2018 plutoo
|
||||
#pragma once
|
||||
#include "kernel/waiter.h"
|
||||
|
||||
void _waiterCreate(Waiter* w);
|
||||
void _waiterFree(Waiter* w, WaitObject* objects);
|
||||
void _waiterSubscribe(Waiter* w, UsermodeEvent* e);
|
||||
bool _waiterSignal(Waiter* w, s32 idx);
|
||||
s32 _waiterGetSignalledIndex(Waiter* w);
|
||||
|
Loading…
Reference in New Issue
Block a user