mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-22 02:16:44 +00:00
Revert "usb_drv: Wait for IRQ on SKB exhaustion"
The fix overly influences gigabit ethernet performance (~200 MBit), so, we need to investigate further. This reverts commit aacb91f22abc56da291e8c066956f957828c6c08. Reopen #788.
This commit is contained in:
parent
241c0f38a4
commit
4807d469ca
@ -116,7 +116,6 @@ namespace Irq
|
|||||||
{
|
{
|
||||||
void init(Genode::Signal_receiver *recv);
|
void init(Genode::Signal_receiver *recv);
|
||||||
void check_irq();
|
void check_irq();
|
||||||
void wait_for_irq();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Event
|
namespace Event
|
||||||
|
@ -98,8 +98,9 @@ class Skb
|
|||||||
|
|
||||||
|
|
||||||
/* wait until some SKBs are freed */
|
/* wait until some SKBs are freed */
|
||||||
for (_wait_free = false; !_wait_free;)
|
_wait_free = false;
|
||||||
Irq::wait_for_irq();
|
//PDBG("wait for free skbs ...");
|
||||||
|
_wait_event(_wait_free);
|
||||||
|
|
||||||
return alloc();
|
return alloc();
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,6 @@ extern "C" {
|
|||||||
/* our local incarnation of sender and receiver */
|
/* our local incarnation of sender and receiver */
|
||||||
static Signal_helper *_signal = 0;
|
static Signal_helper *_signal = 0;
|
||||||
static Genode::Lock _irq_sync(Genode::Lock::LOCKED);
|
static Genode::Lock _irq_sync(Genode::Lock::LOCKED);
|
||||||
static Genode::Lock _irq_wait(Genode::Lock::LOCKED);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This contains the Linux-driver handlers
|
* This contains the Linux-driver handlers
|
||||||
@ -81,9 +80,6 @@ class Irq_context : public Driver_context,
|
|||||||
static Genode::Lock handler_lock;
|
static Genode::Lock handler_lock;
|
||||||
Genode::Lock::Guard guard(handler_lock);
|
Genode::Lock::Guard guard(handler_lock);
|
||||||
|
|
||||||
/* unlock if main thread is waiting */
|
|
||||||
_irq_wait.unlock();
|
|
||||||
|
|
||||||
Irq_context *ctx = static_cast<Irq_context *>(irq);
|
Irq_context *ctx = static_cast<Irq_context *>(irq);
|
||||||
|
|
||||||
/* set context & submit signal */
|
/* set context & submit signal */
|
||||||
@ -124,7 +120,7 @@ class Irq_context : public Driver_context,
|
|||||||
/* report IRQ to all clients */
|
/* report IRQ to all clients */
|
||||||
for (Irq_handler *h = _handler_list.first(); h; h = h->next()) {
|
for (Irq_handler *h = _handler_list.first(); h; h = h->next()) {
|
||||||
|
|
||||||
if ((handled = _handle_one(h)))
|
if (_handle_one(h))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
dde_kit_log(DEBUG_IRQ, "IRQ: %u ret: %u h: %p dev: %p", _irq, handled, h->handler, h->dev);
|
dde_kit_log(DEBUG_IRQ, "IRQ: %u ret: %u h: %p dev: %p", _irq, handled, h->handler, h->dev);
|
||||||
@ -195,13 +191,6 @@ void Irq::check_irq()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Irq::wait_for_irq()
|
|
||||||
{
|
|
||||||
while (!Irq_context::check_irq())
|
|
||||||
_irq_wait.lock();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************
|
/***********************
|
||||||
** linux/interrupt.h **
|
** linux/interrupt.h **
|
||||||
***********************/
|
***********************/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user