From patchwork Tue Apr 23 08:32:08 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 238791 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id ABA232C0142 for ; Tue, 23 Apr 2013 18:32:42 +1000 (EST) Received: from localhost ([::1]:41026 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UUYeW-0004kX-O2 for incoming@patchwork.ozlabs.org; Tue, 23 Apr 2013 04:32:40 -0400 Received: from eggs.gnu.org ([208.118.235.92]:56541) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UUYe6-0004jT-Op for qemu-devel@nongnu.org; Tue, 23 Apr 2013 04:32:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UUYe5-0001LO-BH for qemu-devel@nongnu.org; Tue, 23 Apr 2013 04:32:14 -0400 Received: from mx1.redhat.com ([209.132.183.28]:3701) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UUYe5-0001L4-4k for qemu-devel@nongnu.org; Tue, 23 Apr 2013 04:32:13 -0400 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r3N8WChv007727 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 23 Apr 2013 04:32:12 -0400 Received: from rincewind.home.kraxel.org (ovpn-116-29.ams2.redhat.com [10.36.116.29]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r3N8WAGr026515; Tue, 23 Apr 2013 04:32:11 -0400 Received: by rincewind.home.kraxel.org (Postfix, from userid 500) id 1C78345B49; Tue, 23 Apr 2013 10:32:10 +0200 (CEST) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Tue, 23 Apr 2013 10:32:08 +0200 Message-Id: <1366705929-11251-4-git-send-email-kraxel@redhat.com> In-Reply-To: <1366705929-11251-1-git-send-email-kraxel@redhat.com> References: <1366705929-11251-1-git-send-email-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 209.132.183.28 Cc: Gerd Hoffmann Subject: [Qemu-devel] [PATCH 3/4] usb: better speed mismatch error reporting X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Report the supported speeds for device and port in the error message. Also add the speeds to the tracepoint. And while being at it drop the redundant error message in usb_desc_attach, usb_device_attach will report the error anyway. Signed-off-by: Gerd Hoffmann --- hw/usb/bus.c | 36 ++++++++++++++++++++++++++++++++---- hw/usb/desc.c | 2 -- trace-events | 2 +- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/hw/usb/bus.c b/hw/usb/bus.c index b10c290..d1827be 100644 --- a/hw/usb/bus.c +++ b/hw/usb/bus.c @@ -417,19 +417,47 @@ void usb_release_port(USBDevice *dev) bus->nfree++; } +static void usb_mask_to_str(char *dest, size_t size, + unsigned int speedmask) +{ + static const struct { + unsigned int mask; + const char *name; + } speeds[] = { + { .mask = USB_SPEED_MASK_FULL, .name = "full" }, + { .mask = USB_SPEED_MASK_HIGH, .name = "high" }, + { .mask = USB_SPEED_MASK_SUPER, .name = "super" }, + }; + int i, pos = 0; + + for (i = 0; i < ARRAY_SIZE(speeds); i++) { + if (speeds[i].mask & speedmask) { + pos += snprintf(dest + pos, size - pos, "%s%s", + pos ? "+" : "", + speeds[i].name); + } + } +} + int usb_device_attach(USBDevice *dev) { USBBus *bus = usb_bus_from_device(dev); USBPort *port = dev->port; + char devspeed[32], portspeed[32]; assert(port != NULL); assert(!dev->attached); - trace_usb_port_attach(bus->busnr, port->path); + usb_mask_to_str(devspeed, sizeof(devspeed), dev->speedmask); + usb_mask_to_str(portspeed, sizeof(portspeed), port->speedmask); + trace_usb_port_attach(bus->busnr, port->path, + devspeed, portspeed); if (!(port->speedmask & dev->speedmask)) { - error_report("Warning: speed mismatch trying to attach " - "usb device %s to bus %s", - dev->product_desc, bus->qbus.name); + error_report("Warning: speed mismatch trying to attach" + " usb device \"%s\" (%s speed)" + " to bus \"%s\", port \"%s\" (%s speed)", + dev->product_desc, devspeed, + bus->qbus.name, port->path, portspeed); return -1; } diff --git a/hw/usb/desc.c b/hw/usb/desc.c index b389381..fce303e 100644 --- a/hw/usb/desc.c +++ b/hw/usb/desc.c @@ -522,8 +522,6 @@ void usb_desc_attach(USBDevice *dev) } else if (desc->full && (dev->port->speedmask & USB_SPEED_MASK_FULL)) { dev->speed = USB_SPEED_FULL; } else { - fprintf(stderr, "usb: port/device speed mismatch for \"%s\"\n", - usb_device_get_product_desc(dev)); return; } usb_desc_setdefaults(dev); diff --git a/trace-events b/trace-events index e587487..ffaa3f4 100644 --- a/trace-events +++ b/trace-events @@ -277,7 +277,7 @@ usb_packet_state_fault(int bus, const char *port, int ep, void *p, const char *o # hw/usb/bus.c usb_port_claim(int bus, const char *port) "bus %d, port %s" -usb_port_attach(int bus, const char *port) "bus %d, port %s" +usb_port_attach(int bus, const char *port, const char *devspeed, const char *portspeed) "bus %d, port %s, devspeed %s, portspeed %s" usb_port_detach(int bus, const char *port) "bus %d, port %s" usb_port_release(int bus, const char *port) "bus %d, port %s"