mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-23 23:42:32 +00:00
lxip: add warning when schedule_timeout is called
genodelabs/genode#4551
This commit is contained in:
parent
a8070a429a
commit
1c5db07342
@ -306,10 +306,20 @@ class Lx::Timer
|
|||||||
|
|
||||||
void wait(unsigned long timeo = 0)
|
void wait(unsigned long timeo = 0)
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* XXX
|
||||||
|
* in contrast to wait_uninterruptible(), wait() should be interruptible
|
||||||
|
* although we return immediately once we dispatched any signal, we
|
||||||
|
* need to reflect this via signal_pending()
|
||||||
|
*/
|
||||||
|
|
||||||
if (timeo > 0)
|
if (timeo > 0)
|
||||||
_wait_one_shot.schedule(Genode::Microseconds(jiffies_to_usecs(timeo)));
|
_wait_one_shot.schedule(Genode::Microseconds(jiffies_to_usecs(timeo)));
|
||||||
|
|
||||||
_ep.wait_and_dispatch_one_io_signal();
|
_ep.wait_and_dispatch_one_io_signal();
|
||||||
|
/* update jiffies if we dispatched another signal */
|
||||||
|
if (_wait_one_shot.scheduled())
|
||||||
|
update_jiffies();
|
||||||
}
|
}
|
||||||
|
|
||||||
void wait_uninterruptible(unsigned long timeo)
|
void wait_uninterruptible(unsigned long timeo)
|
||||||
@ -400,9 +410,24 @@ signed long schedule_timeout(signed long timeout)
|
|||||||
{
|
{
|
||||||
unsigned long expire = timeout + jiffies;
|
unsigned long expire = timeout + jiffies;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* XXX
|
||||||
|
* schedule_timeout is called from sock_wait_for_wmem() (UDP) and
|
||||||
|
* sk_stream_wait_memory() (TCP) if sk_wmem_alloc (UDP) resp.
|
||||||
|
* sk_wmem_queued (TCP) reaches are certain threshold
|
||||||
|
* unfortunately, recovery from this state seems to be broken
|
||||||
|
* so that we land here for every skb once we hit the threshold
|
||||||
|
*/
|
||||||
|
static bool warned = false;
|
||||||
|
if (!warned) {
|
||||||
|
Genode::warning(__func__, " called (tx throttled?)");
|
||||||
|
warned = true;
|
||||||
|
}
|
||||||
|
|
||||||
long start = jiffies;
|
long start = jiffies;
|
||||||
_timer->wait(timeout);
|
_timer->wait(timeout);
|
||||||
timeout -= jiffies - start;
|
timeout -= jiffies - start;
|
||||||
|
|
||||||
return timeout < 0 ? 0 : timeout;
|
return timeout < 0 ? 0 : timeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user