From patchwork Mon Jul 17 08:11:45 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ladi Prosek X-Patchwork-Id: 9844189 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 6AA4160212 for ; Mon, 17 Jul 2017 08:15:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5D0AF27FC0 for ; Mon, 17 Jul 2017 08:15:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 519342821F; Mon, 17 Jul 2017 08:15:34 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id DE04227FC0 for ; Mon, 17 Jul 2017 08:15:33 +0000 (UTC) Received: from localhost ([::1]:48672 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dX1Bk-0007Ft-R3 for patchwork-qemu-devel@patchwork.kernel.org; Mon, 17 Jul 2017 04:15:32 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56695) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dX18P-0005KV-4C for qemu-devel@nongnu.org; Mon, 17 Jul 2017 04:12:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dX18O-0001Ja-1A for qemu-devel@nongnu.org; Mon, 17 Jul 2017 04:12:05 -0400 Received: from mx1.redhat.com ([209.132.183.28]:33956) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dX18N-0001JE-Nq for qemu-devel@nongnu.org; Mon, 17 Jul 2017 04:12:03 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C419C356D1; Mon, 17 Jul 2017 08:12:02 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com C419C356D1 Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=lprosek@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com C419C356D1 Received: from dhcp-1-107.brq.redhat.com (unknown [10.43.2.170]) by smtp.corp.redhat.com (Postfix) with ESMTP id C6C3F5C2FA; Mon, 17 Jul 2017 08:12:00 +0000 (UTC) From: Ladi Prosek To: qemu-devel@nongnu.org Date: Mon, 17 Jul 2017 10:11:45 +0200 Message-Id: <20170717081152.17153-3-lprosek@redhat.com> In-Reply-To: <20170717081152.17153-1-lprosek@redhat.com> References: <20170717081152.17153-1-lprosek@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Mon, 17 Jul 2017 08:12:02 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v3 2/9] virtio: introduce virtqueue_error X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: casasfernando@hotmail.com, mst@redhat.com, jasowang@redhat.com, cohuck@redhat.com, armbru@redhat.com, groug@kaod.org, arei.gonglei@huawei.com, aneesh.kumar@linux.vnet.ibm.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Most virtio error output pertains to a specific virtqueue so it makes sense to include the queue index in error messages. Suggested-by: Stefan Hajnoczi Signed-off-by: Ladi Prosek Reviewed-by: Cornelia Huck --- hw/virtio/virtio.c | 44 +++++++++++++++++++++++++++++++++----------- include/hw/virtio/virtio.h | 1 + 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index d7fae54..935a5e3 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -2465,18 +2465,8 @@ static const char *virtio_get_device_id(VirtIODevice *vdev) return ""; } -void GCC_FMT_ATTR(2, 3) virtio_error(VirtIODevice *vdev, const char *fmt, ...) +static void virtio_device_set_broken(VirtIODevice *vdev) { - va_list ap; - char *msg; - - va_start(ap, fmt); - msg = g_strdup_vprintf(fmt, ap); - va_end(ap); - - error_report("%s (id=%s): %s", vdev->name, virtio_get_device_id(vdev), msg); - g_free(msg); - if (virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) { virtio_set_status(vdev, vdev->status | VIRTIO_CONFIG_S_NEEDS_RESET); virtio_notify_config(vdev); @@ -2485,6 +2475,38 @@ void GCC_FMT_ATTR(2, 3) virtio_error(VirtIODevice *vdev, const char *fmt, ...) vdev->broken = true; } +void GCC_FMT_ATTR(2, 3) virtio_error(VirtIODevice *vdev, const char *fmt, ...) +{ + va_list ap; + char *msg; + + va_start(ap, fmt); + msg = g_strdup_vprintf(fmt, ap); + va_end(ap); + + error_report("%s (id=%s): %s", vdev->name, virtio_get_device_id(vdev), msg); + g_free(msg); + + virtio_device_set_broken(vdev); +} + +void GCC_FMT_ATTR(2, 3) virtqueue_error(VirtQueue *vq, const char *fmt, ...) +{ + VirtIODevice *vdev = vq->vdev; + va_list ap; + char *msg; + + va_start(ap, fmt); + msg = g_strdup_vprintf(fmt, ap); + va_end(ap); + + error_report("%s (id=%s) queue %d: %s", vdev->name, + virtio_get_device_id(vdev), vq->queue_index, msg); + g_free(msg); + + virtio_device_set_broken(vdev); +} + static void virtio_memory_listener_commit(MemoryListener *listener) { VirtIODevice *vdev = container_of(listener, VirtIODevice, listener); diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h index 80c45c3..c6c56a0 100644 --- a/include/hw/virtio/virtio.h +++ b/include/hw/virtio/virtio.h @@ -151,6 +151,7 @@ void virtio_init(VirtIODevice *vdev, const char *name, void virtio_cleanup(VirtIODevice *vdev); void virtio_error(VirtIODevice *vdev, const char *fmt, ...) GCC_FMT_ATTR(2, 3); +void virtqueue_error(VirtQueue *vq, const char *fmt, ...) GCC_FMT_ATTR(2, 3); /* Set the child bus name. */ void virtio_device_set_child_bus_name(VirtIODevice *vdev, char *bus_name);