mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-19 13:47:56 +00:00
parent
65291902e0
commit
23ce0b2071
@ -39,6 +39,7 @@ class Block::Session_component : public Block::Session_rpc_object
|
|||||||
Signal_dispatcher<Session_component> _sink_ack;
|
Signal_dispatcher<Session_component> _sink_ack;
|
||||||
Signal_dispatcher<Session_component> _sink_submit;
|
Signal_dispatcher<Session_component> _sink_submit;
|
||||||
bool _req_queue_full;
|
bool _req_queue_full;
|
||||||
|
bool _ack_queue_full;
|
||||||
Packet_descriptor _p_to_handle;
|
Packet_descriptor _p_to_handle;
|
||||||
unsigned _p_in_fly;
|
unsigned _p_in_fly;
|
||||||
|
|
||||||
@ -124,8 +125,10 @@ class Block::Session_component : public Block::Session_rpc_object
|
|||||||
* them, and the driver's request queue isn't full,
|
* them, and the driver's request queue isn't full,
|
||||||
* direct the packet request to the driver backend
|
* direct the packet request to the driver backend
|
||||||
*/
|
*/
|
||||||
for (; !_req_queue_full && tx_sink()->packet_avail() &&
|
for (_ack_queue_full = (_p_in_fly >= tx_sink()->ack_slots_free());
|
||||||
!(_p_in_fly >= tx_sink()->ack_slots_free()); _p_in_fly++)
|
!_req_queue_full && !_ack_queue_full
|
||||||
|
&& tx_sink()->packet_avail();
|
||||||
|
_ack_queue_full = (++_p_in_fly >= tx_sink()->ack_slots_free()))
|
||||||
_handle_packet(tx_sink()->get_packet());
|
_handle_packet(tx_sink()->get_packet());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,12 +179,10 @@ class Block::Session_component : public Block::Session_rpc_object
|
|||||||
*/
|
*/
|
||||||
void ack_packet(Packet_descriptor &packet, bool success = true)
|
void ack_packet(Packet_descriptor &packet, bool success = true)
|
||||||
{
|
{
|
||||||
bool ack_queue_full = _p_in_fly >= tx_sink()->ack_slots_free();
|
|
||||||
|
|
||||||
packet.succeeded(success);
|
packet.succeeded(success);
|
||||||
_ack_packet(packet);
|
_ack_packet(packet);
|
||||||
|
|
||||||
if (!_req_queue_full && !ack_queue_full)
|
if (!_req_queue_full && !_ack_queue_full)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user