base-hw: always use 'unsigned' for priorities

At some points in the code, 'signed' was used instead of the more appropriate
'unsigned' type.

Ref #4217
This commit is contained in:
Martin Stein 2021-07-08 17:46:57 +02:00 committed by Norman Feske
parent b922dc5c10
commit 6e4ef43bf0
7 changed files with 36 additions and 26 deletions

View File

@ -34,7 +34,7 @@ void Cpu_scheduler::_reset_claims(unsigned const p)
void Cpu_scheduler::_next_round()
{
_residual = _quota;
_for_each_prio([&] (unsigned const p) { _reset_claims(p); });
_for_each_prio([&] (Cpu_priority const p, bool &) { _reset_claims(p); });
}
@ -90,21 +90,23 @@ void Cpu_scheduler::_head_filled(unsigned const r)
bool Cpu_scheduler::_claim_for_head()
{
for (signed p = Prio::MAX; p > Prio::MIN - 1; p--) {
bool result { false };
_for_each_prio([&] (Cpu_priority const p, bool &cancel_for_each_prio) {
Double_list_item<Cpu_share> *const item { _rcl[p].head() };
if (!item)
continue;
return;
Cpu_share &share { item->payload() };
if (!share._claim)
continue;
return;
_set_head(share, share._claim, 1);
return 1;
}
return 0;
result = true;
cancel_for_each_prio = true;
});
return result;
}

View File

@ -47,27 +47,28 @@ class Kernel::Cpu_priority
public:
enum {
MIN = 0,
MAX = cpu_priorities - 1,
};
static constexpr unsigned min() { return 0; }
static constexpr unsigned max() { return cpu_priorities - 1; }
/**
* Construct priority with value 'v'
*/
Cpu_priority(signed const v) : _value(Genode::min(v, MAX)) { }
Cpu_priority(unsigned const v)
:
_value { Genode::min(v, max()) }
{ }
/*
* Standard operators
*/
Cpu_priority &operator =(signed const v)
Cpu_priority &operator =(unsigned const v)
{
_value = Genode::min(v, MAX);
_value = Genode::min(v, max());
return *this;
}
operator signed() const { return _value; }
operator unsigned() const { return _value; }
};
@ -79,7 +80,7 @@ class Kernel::Cpu_share
Double_list_item<Cpu_share> _fill_item { *this };
Double_list_item<Cpu_share> _claim_item { *this };
signed const _prio;
Cpu_priority const _prio;
unsigned _quota;
unsigned _claim;
unsigned _fill { 0 };
@ -93,7 +94,7 @@ class Kernel::Cpu_share
* \param p claimed priority
* \param q claimed quota
*/
Cpu_share(signed const p, unsigned const q)
Cpu_share(Cpu_priority const p, unsigned const q)
: _prio(p), _quota(q), _claim(q) { }
/*
@ -111,8 +112,8 @@ class Kernel::Cpu_scheduler
typedef Cpu_share Share;
typedef Cpu_priority Prio;
Double_list<Cpu_share> _rcl[Prio::MAX + 1]; /* ready claims */
Double_list<Cpu_share> _ucl[Prio::MAX + 1]; /* unready claims */
Double_list<Cpu_share> _rcl[Prio::max() + 1]; /* ready claims */
Double_list<Cpu_share> _ucl[Prio::max() + 1]; /* unready claims */
Double_list<Cpu_share> _fills { }; /* ready fills */
Share &_idle;
Share *_head = nullptr;
@ -125,8 +126,15 @@ class Kernel::Cpu_scheduler
bool _need_to_schedule { true };
time_t _last_time { 0 };
template <typename F> void _for_each_prio(F f) {
for (signed p = Prio::MAX; p > Prio::MIN - 1; p--) { f(p); } }
template <typename F> void _for_each_prio(F f)
{
bool cancel_for_each_prio { false };
for (unsigned p = Prio::max(); p != Prio::min() - 1; p--) {
f(p, cancel_for_each_prio);
if (cancel_for_each_prio)
return;
}
}
static void _reset(Cpu_share &share);

View File

@ -293,7 +293,7 @@ class Kernel::Thread : private Kernel::Object, public Cpu_job, private Timeout
* \param label debugging label
*/
Thread(char const * const label)
: Thread(Cpu_priority::MIN, 0, label, true) { }
: Thread(Cpu_priority::min(), 0, label, true) { }
~Thread();

View File

@ -89,7 +89,7 @@ class Genode::Platform_thread : Noncopyable
unsigned _scale_priority(unsigned virt_prio)
{
return Cpu_session::scale_priority(Kernel::Cpu_priority::MAX,
return Cpu_session::scale_priority(Kernel::Cpu_priority::max(),
virt_prio);
}

View File

@ -26,7 +26,7 @@ Kernel::Vm::Vm(unsigned,
Identity & id)
:
Kernel::Object { *this },
Cpu_job(Cpu_priority::MIN, 0),
Cpu_job(Cpu_priority::min(), 0),
_state(state),
_context(context),
_id(id),

View File

@ -140,7 +140,7 @@ Kernel::Vm::Vm(unsigned cpu,
Identity & id)
:
Kernel::Object { *this },
Cpu_job(Cpu_priority::MIN, 0),
Cpu_job(Cpu_priority::min(), 0),
_state(state),
_context(context),
_id(id),

View File

@ -115,7 +115,7 @@ Vm::Vm(unsigned cpu,
Identity & id)
:
Kernel::Object { *this },
Cpu_job(Cpu_priority::MIN, 0),
Cpu_job(Cpu_priority::min(), 0),
_state(state),
_context(context),
_id(id),