mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-22 06:57:51 +00:00
hw: rename functions of Ipc_node class signature
* Remove *request* in context of: wait, reply, send to shorten it. * Use ready_to_* instead of can_*, which is regularily used in Genode's APIs * Replace helping_sink with helping_destination, as destination is more common Ref genodelabs/genode#4704
This commit is contained in:
parent
fd3c70ec5b
commit
1151706243
@ -172,7 +172,7 @@ class Kernel::Cpu : public Genode::Cpu, private Irq::Pool, private Timeout
|
||||
* Returns the currently active job
|
||||
*/
|
||||
Job & scheduled_job() const {
|
||||
return *static_cast<Job *>(&_scheduler.head())->helping_sink(); }
|
||||
return *static_cast<Job *>(&_scheduler.head())->helping_destination(); }
|
||||
|
||||
unsigned id() const { return _id; }
|
||||
Cpu_scheduler &scheduler() { return _scheduler; }
|
||||
|
@ -88,7 +88,7 @@ class Kernel::Cpu_job : private Cpu_share
|
||||
/**
|
||||
* Return which job currently uses our CPU-share
|
||||
*/
|
||||
virtual Cpu_job * helping_sink() = 0;
|
||||
virtual Cpu_job * helping_destination() = 0;
|
||||
|
||||
/**
|
||||
* Construct a job with scheduling priority 'p' and time quota 'q'
|
||||
|
@ -63,13 +63,13 @@ bool Ipc_node::_helping() const
|
||||
}
|
||||
|
||||
|
||||
bool Ipc_node::can_send_request() const
|
||||
bool Ipc_node::ready_to_send() const
|
||||
{
|
||||
return _out.state == Out::READY && !_in.waiting();
|
||||
}
|
||||
|
||||
|
||||
void Ipc_node::send_request(Ipc_node &node, bool help)
|
||||
void Ipc_node::send(Ipc_node &node, bool help)
|
||||
{
|
||||
node._in.queue.enqueue(_queue_item);
|
||||
|
||||
@ -82,19 +82,19 @@ void Ipc_node::send_request(Ipc_node &node, bool help)
|
||||
}
|
||||
|
||||
|
||||
Thread &Ipc_node::helping_sink()
|
||||
Thread &Ipc_node::helping_destination()
|
||||
{
|
||||
return _helping() ? _out.node->helping_sink() : _thread;
|
||||
return _helping() ? _out.node->helping_destination() : _thread;
|
||||
}
|
||||
|
||||
|
||||
bool Ipc_node::can_await_request() const
|
||||
bool Ipc_node::ready_to_wait() const
|
||||
{
|
||||
return _in.state == In::READY;
|
||||
}
|
||||
|
||||
|
||||
void Ipc_node::await_request()
|
||||
void Ipc_node::wait()
|
||||
{
|
||||
_in.state = In::WAIT;
|
||||
_in.queue.head([&] (Queue_item &item) {
|
||||
@ -103,7 +103,7 @@ void Ipc_node::await_request()
|
||||
}
|
||||
|
||||
|
||||
void Ipc_node::send_reply()
|
||||
void Ipc_node::reply()
|
||||
{
|
||||
if (_in.state == In::REPLY)
|
||||
_in.queue.dequeue([&] (Queue_item &item) {
|
||||
|
@ -89,30 +89,28 @@ class Kernel::Ipc_node
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
*/
|
||||
Ipc_node(Thread &thread);
|
||||
|
||||
~Ipc_node();
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* Return whether this IPC node is ready to send a message
|
||||
*/
|
||||
Ipc_node(Thread &thread);
|
||||
bool ready_to_send() const;
|
||||
|
||||
/**
|
||||
* Send a request and wait for the according reply
|
||||
* Send a message and wait for the according reply
|
||||
*
|
||||
* \param node targeted IPC node
|
||||
* \param help wether the request implies a helping relationship
|
||||
*/
|
||||
bool can_send_request() const;
|
||||
void send_request(Ipc_node &node,
|
||||
bool help);
|
||||
void send(Ipc_node &node, bool help);
|
||||
|
||||
/**
|
||||
* Return root destination of the helping-relation tree we are in
|
||||
* Return final destination of the helping-chain
|
||||
* this IPC node is part of, or its own thread otherwise
|
||||
*/
|
||||
Thread &helping_sink();
|
||||
Thread &helping_destination();
|
||||
|
||||
/**
|
||||
* Call function 'f' of type 'void (Ipc_node *)' for each helper
|
||||
@ -128,24 +126,31 @@ class Kernel::Ipc_node
|
||||
}
|
||||
|
||||
/**
|
||||
* Wait until a request has arrived and load it for handling
|
||||
* Return whether this IPC node is ready to wait for messages
|
||||
*/
|
||||
bool ready_to_wait() const;
|
||||
|
||||
/**
|
||||
* Wait until a message has arrived, or handle it if one is available
|
||||
*
|
||||
* \return wether a request could be received already
|
||||
* \return wether a message could be received already
|
||||
*/
|
||||
bool can_await_request() const;
|
||||
void await_request();
|
||||
void wait();
|
||||
|
||||
/**
|
||||
* Reply to last request if there's any
|
||||
* Reply to last message if there's any
|
||||
*/
|
||||
void send_reply();
|
||||
void reply();
|
||||
|
||||
/**
|
||||
* If IPC node waits, cancel '_outbuf' to stop waiting
|
||||
* If IPC node waits, cancel it
|
||||
*/
|
||||
void cancel_waiting();
|
||||
|
||||
bool awaits_request() const { return _in.waiting(); }
|
||||
/**
|
||||
* Return whether this IPC node is waiting for messages
|
||||
*/
|
||||
bool waiting() const { return _in.waiting(); }
|
||||
};
|
||||
|
||||
#endif /* _CORE__KERNEL__IPC_NODE_H_ */
|
||||
|
@ -295,8 +295,8 @@ void Thread::_become_inactive(State const s)
|
||||
void Thread::_die() { _become_inactive(DEAD); }
|
||||
|
||||
|
||||
Cpu_job * Thread::helping_sink() {
|
||||
return &_ipc_node.helping_sink(); }
|
||||
Cpu_job * Thread::helping_destination() {
|
||||
return &_ipc_node.helping_destination(); }
|
||||
|
||||
|
||||
size_t Thread::_core_to_kernel_quota(size_t const quota) const
|
||||
@ -478,16 +478,16 @@ void Thread::_call_delete_pd()
|
||||
|
||||
void Thread::_call_await_request_msg()
|
||||
{
|
||||
if (_ipc_node.can_await_request()) {
|
||||
if (_ipc_node.ready_to_wait()) {
|
||||
_ipc_alloc_recv_caps((unsigned)user_arg_1());
|
||||
_ipc_node.await_request();
|
||||
if (_ipc_node.awaits_request()) {
|
||||
_ipc_node.wait();
|
||||
if (_ipc_node.waiting()) {
|
||||
_become_inactive(AWAITS_IPC);
|
||||
} else {
|
||||
user_arg_0(0);
|
||||
}
|
||||
} else {
|
||||
Genode::raw("IPC await request: bad state");
|
||||
Genode::raw("IPC await request: bad state, will block");
|
||||
_become_inactive(DEAD);
|
||||
}
|
||||
}
|
||||
@ -539,12 +539,12 @@ void Thread::_call_send_request_msg()
|
||||
bool const help = Cpu_job::_helping_possible(*dst);
|
||||
oir = oir->find(dst->pd());
|
||||
|
||||
if (!_ipc_node.can_send_request()) {
|
||||
if (!_ipc_node.ready_to_send()) {
|
||||
Genode::raw("IPC send request: bad state");
|
||||
} else {
|
||||
_ipc_alloc_recv_caps((unsigned)user_arg_2());
|
||||
_ipc_capid = oir ? oir->capid() : cap_id_invalid();
|
||||
_ipc_node.send_request(dst->_ipc_node, help);
|
||||
_ipc_node.send(dst->_ipc_node, help);
|
||||
}
|
||||
|
||||
_state = AWAITS_IPC;
|
||||
@ -554,7 +554,7 @@ void Thread::_call_send_request_msg()
|
||||
|
||||
void Thread::_call_send_reply_msg()
|
||||
{
|
||||
_ipc_node.send_reply();
|
||||
_ipc_node.reply();
|
||||
bool const await_request_msg = user_arg_2();
|
||||
if (await_request_msg) { _call_await_request_msg(); }
|
||||
else { user_arg_0(0); }
|
||||
|
@ -418,9 +418,9 @@ class Kernel::Thread : private Kernel::Object, public Cpu_job, private Timeout
|
||||
** Cpu_job **
|
||||
*************/
|
||||
|
||||
void exception(Cpu & cpu) override;
|
||||
void proceed(Cpu & cpu) override;
|
||||
Cpu_job * helping_sink() override;
|
||||
void exception(Cpu & cpu) override;
|
||||
void proceed(Cpu & cpu) override;
|
||||
Cpu_job * helping_destination() override;
|
||||
|
||||
|
||||
/*************
|
||||
|
@ -142,9 +142,9 @@ class Kernel::Vm : private Kernel::Object, public Cpu_job
|
||||
** Cpu_job **
|
||||
*************/
|
||||
|
||||
void exception(Cpu & cpu) override;
|
||||
void proceed(Cpu & cpu) override;
|
||||
Cpu_job * helping_sink() override { return this; }
|
||||
void exception(Cpu & cpu) override;
|
||||
void proceed(Cpu & cpu) override;
|
||||
Cpu_job * helping_destination() override { return this; }
|
||||
};
|
||||
|
||||
#endif /* _CORE__KERNEL__VM_H_ */
|
||||
|
Loading…
Reference in New Issue
Block a user