L4Linux: Make block driver MP safe
Release block-request-queue-spin lock when blocking during packet allocations, this is necessary to re-enable VCPU IRQs. Fixes issue #395
This commit is contained in:
parent
c06dc73738
commit
7822c4e9a4
|
@ -93,9 +93,16 @@ static void genode_blk_request(struct request_queue *q)
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
|
|
||||||
/* block until new responses are available */
|
|
||||||
dev->stopped = 1;
|
dev->stopped = 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function is called with the request queue lock held, unlock to
|
||||||
|
* enable VCPU IRQs
|
||||||
|
*/
|
||||||
|
spin_unlock_irq(q->queue_lock);
|
||||||
|
/* block until new responses are available */
|
||||||
down(&dev->queue_wait);
|
down(&dev->queue_wait);
|
||||||
|
spin_lock_irq(q->queue_lock);
|
||||||
|
|
||||||
/* start_queue needs disabled interrupts */
|
/* start_queue needs disabled interrupts */
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user