Hi Badari,
On 12/08/11 06:50, Badari Pulavarty wrote:
On 8/10/2011 8:19 PM, Liu Yuan wrote:
When opening second device, we get panic since used_info_cachep is
already created. Just to make progress I moved this call to
vhost_blk_init().
I don't see any host panics now. With single block device (dd),
it seems to work fine. But when I start testing multiple block
devices I quickly run into hangs in the guest. I see following
messages in the guest from virtio_ring.c:
virtio_blk virtio2: requests: id 0 is not a head !
virtio_blk virtio1: requests: id 0 is not a head !
virtio_blk virtio4: requests: id 1 is not a head !
virtio_blk virtio3: requests: id 39 is not a head !
Thanks,
Badari
vq->data[] is initialized by guest virtio-blk driver and vhost_blk is
unware of it. it looks like used ID passed
over by vhost_blk to guest virtio_blk is wrong, but, it should not
happen. :|
And I can't reproduce this on my laptop. :(
Finally, found the issue :)
Culprit is:
+static struct io_event events[MAX_EVENTS];
With multiple devices, multiple threads could be executing
handle_completion() (one for
each fd) at the same time. "events" array is global :( Need to make it
one per device/fd.
For test, I changed MAX_EVENTS to 32 and moved "events" array to be
local (stack)
to handle_completion(). Tests are running fine.
Your laptop must have single processor, hence you have only one thread
executing handle_completion()
at any time..
Can you please post your code, or send me via email?
I'm also trying to get it running on a multi-processor system.
Thanks in advance,
Thanks,
Badari
--
Dongsu Park
Email: dongsu.park@xxxxxxxxxxxxxxxx
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html