From 7822c4e9a4353c582ef0d4e2daf275be14f7ddf5 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Fri, 12 Oct 2012 15:57:04 +0200 Subject: [PATCH] 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 --- ports-foc/src/drivers/genode_block.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ports-foc/src/drivers/genode_block.c b/ports-foc/src/drivers/genode_block.c index 86a676c790..bcce5530a4 100644 --- a/ports-foc/src/drivers/genode_block.c +++ b/ports-foc/src/drivers/genode_block.c @@ -93,9 +93,16 @@ static void genode_blk_request(struct request_queue *q) local_irq_restore(flags); local_irq_enable(); - /* block until new responses are available */ 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); + spin_lock_irq(q->queue_lock); /* start_queue needs disabled interrupts */ local_irq_save(flags);