From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55008) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UpETq-0004DH-VE for qemu-devel@nongnu.org; Wed, 19 Jun 2013 05:15:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UpETn-0004Hc-Ur for qemu-devel@nongnu.org; Wed, 19 Jun 2013 05:15:06 -0400 Received: from mx1.redhat.com ([209.132.183.28]:23458) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UpETn-0004En-E3 for qemu-devel@nongnu.org; Wed, 19 Jun 2013 05:15:03 -0400 Message-ID: <51C17724.5040309@redhat.com> Date: Wed, 19 Jun 2013 11:17:24 +0200 From: Laszlo Ersek MIME-Version: 1.0 References: <20130616234827.23764.98763.malonedeb@wampee.canonical.com> <20130618180122.22327.47349.malone@gac.canonical.com> <51C0B6D8.5090900@redhat.com> In-Reply-To: Content-Type: multipart/mixed; boundary="------------010506010003050704080507" Subject: Re: [Qemu-devel] [Bug 1191606] Re: qemu crashes with iscsi initiator (libiscsi) when using virtio List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: ronnie sahlberg Cc: Bug 1191606 <1191606@bugs.launchpad.net>, qemu-devel This is a multi-part message in MIME format. --------------010506010003050704080507 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit On 06/19/13 06:34, ronnie sahlberg wrote: > I can reproduce with current QEMU. > > Ubuntu 13 crashes with if=virtio but if=ide is fine. > > > But it seems dependent on the guest/kernel. > > For example Fedora-18-x86_64-Live-Desktop.iso installs and runs just > fine, even with virtio > But both ubuntu-12.04-desktop-amd64.iso or > ubuntu-13.04-desktop-amd64.iso crash with if=virtio > > > Stack backtrace I got is > #0 0x00007f7a9e22d037 in __GI_raise (sig=sig@entry=6) > at ../nptl/sysdeps/unix/sysv/linux/raise.c:56 > #1 0x00007f7a9e230698 in __GI_abort () at abort.c:90 > #2 0x00007f7aa0a93ec8 in qemu_ram_addr_from_host_nofail ( > ptr=ptr@entry=0x2020202024008000) at /DATA/SRC/qemu-kvm/qemu/exec.c:1399 > #3 0x00007f7aa0a94a50 in address_space_unmap (as=, > buffer=0x2020202024008000, len=, is_write=, > access_len=1) at /DATA/SRC/qemu-kvm/qemu/exec.c:2155 > #4 0x00007f7aa0a94bef in cpu_physical_memory_unmap (buffer=, > len=, is_write=, access_len=) > at /DATA/SRC/qemu-kvm/qemu/exec.c:2189 > #5 0x00007f7aa0ad7867 in virtqueue_fill (vq=vq@entry=0x7f7aa34277f0, > elem=elem@entry=0x7f7aa37ca328, len=1, idx=idx@entry=0) > at /DATA/SRC/qemu-kvm/qemu/hw/virtio/virtio.c:243 > #6 0x00007f7aa0ad79cf in virtqueue_push (vq=0x7f7aa34277f0, > elem=elem@entry=0x7f7aa37ca328, len=) > at /DATA/SRC/qemu-kvm/qemu/hw/virtio/virtio.c:279 > #7 0x00007f7aa0aa9989 in virtio_blk_req_complete ( > req=req@entry=0x7f7aa37ca320, status=status@entry=0) > at /DATA/SRC/qemu-kvm/qemu/hw/block/virtio-blk.c:49 > #8 0x00007f7aa0aa9ffb in virtio_blk_handle_request ( > req=req@entry=0x7f7aa37ca320, mrb=mrb@entry=0x7fff7a7b2060) > at /DATA/SRC/qemu-kvm/qemu/hw/block/virtio-blk.c:376 Can you try the attached patch? It will produce quite a bit of output on stderr. Thanks Laszlo --------------010506010003050704080507 Content-Type: text/plain; charset=ISO-8859-2; name="0001-log-map-unmap-in-virtqueue_map_sg-and-virtqueue_fill.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="0001-log-map-unmap-in-virtqueue_map_sg-and-virtqueue_fill.pa"; filename*1="tch" >>From 18b0c531e9ff1c33cce517c308c8330dd7d33a43 Mon Sep 17 00:00:00 2001 From: Laszlo Ersek Date: Wed, 19 Jun 2013 10:37:31 +0200 Subject: [PATCH] log map/unmap in virtqueue_map_sg() and virtqueue_fill(), plus blk req type Signed-off-by: Laszlo Ersek --- hw/block/virtio-blk.c | 1 + hw/virtio/virtio.c | 9 +++++++++ 2 files changed, 10 insertions(+), 0 deletions(-) diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c index cf12469..14cf898 100644 --- a/hw/block/virtio-blk.c +++ b/hw/block/virtio-blk.c @@ -358,6 +358,7 @@ static void virtio_blk_handle_request(VirtIOBlockReq *req, req->in = (void *)req->elem.in_sg[req->elem.in_num - 1].iov_base; type = ldl_p(&req->out->type); + fprintf(stderr, "%s: type=0x%08" PRIx32 "\n", __FUNCTION__, type); if (type & VIRTIO_BLK_T_FLUSH) { virtio_blk_handle_flush(req, mrb); diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index 8176c14..0af31c5 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -240,6 +240,9 @@ void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem, for (i = 0; i < elem->in_num; i++) { size_t size = MIN(len - offset, elem->in_sg[i].iov_len); + fprintf(stderr, "%s: unmapping hva=%p for length=%zu, " + "access_len=%zu, is_write=1\n", __FUNCTION__, + elem->in_sg[i].iov_base, elem->in_sg[i].iov_len, size); cpu_physical_memory_unmap(elem->in_sg[i].iov_base, elem->in_sg[i].iov_len, 1, size); @@ -248,6 +251,9 @@ void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem, } for (i = 0; i < elem->out_num; i++) + fprintf(stderr, "%s: unmapping hva=%p for length=access_len=%zu, " + "is_write=0\n", __FUNCTION__, elem->out_sg[i].iov_base, + elem->out_sg[i].iov_len); cpu_physical_memory_unmap(elem->out_sg[i].iov_base, elem->out_sg[i].iov_len, 0, elem->out_sg[i].iov_len); @@ -430,6 +436,9 @@ void virtqueue_map_sg(struct iovec *sg, hwaddr *addr, error_report("virtio: trying to map MMIO memory"); exit(1); } + fprintf(stderr, "%s: mapped gpa=" TARGET_FMT_plx " at hva=%p " + "for length=%" HWADDR_PRIu ", is_write=%d\n", __FUNCTION__, + addr[i], sg[i].iov_base, len, is_write); } } -- 1.7.1 --------------010506010003050704080507--