All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 1/2] usb-host: update tracing
@ 2012-11-15 15:19 Gerd Hoffmann
  2012-11-15 15:19 ` [Qemu-devel] [PATCH 2/2] usb-host: fix splitted transfers Gerd Hoffmann
  2012-11-15 15:23 ` [Qemu-devel] [PATCH 1/2] usb-host: update tracing Hans de Goede
  0 siblings, 2 replies; 3+ messages in thread
From: Gerd Hoffmann @ 2012-11-15 15:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: hdegoede, Gerd Hoffmann

Now that we have separate status and length fields in USBPacket
update the completion tracepoint to log both.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/usb/host-linux.c |   20 ++++++++++++--------
 trace-events        |    2 +-
 2 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/hw/usb/host-linux.c b/hw/usb/host-linux.c
index b17e1dc..e3d394f 100644
--- a/hw/usb/host-linux.c
+++ b/hw/usb/host-linux.c
@@ -385,10 +385,12 @@ static void async_complete(void *opaque)
             }
 
             if (aurb->urb.type == USBDEVFS_URB_TYPE_CONTROL) {
-                trace_usb_host_req_complete(s->bus_num, s->addr, p, p->status);
+                trace_usb_host_req_complete(s->bus_num, s->addr, p,
+                                            p->status, aurb->urb.actual_length);
                 usb_generic_async_ctrl_complete(&s->dev, p);
             } else if (!aurb->more) {
-                trace_usb_host_req_complete(s->bus_num, s->addr, p, p->status);
+                trace_usb_host_req_complete(s->bus_num, s->addr, p,
+                                            p->status, aurb->urb.actual_length);
                 usb_packet_complete(&s->dev, p);
             }
         }
@@ -863,8 +865,9 @@ static void usb_host_handle_data(USBDevice *dev, USBPacket *p)
                             p->ep->nr, p->iov.size);
 
     if (!is_valid(s, p->pid, p->ep->nr)) {
-        trace_usb_host_req_complete(s->bus_num, s->addr, p, USB_RET_NAK);
         p->status = USB_RET_NAK;
+        trace_usb_host_req_complete(s->bus_num, s->addr, p,
+                                    p->status, p->actual_length);
         return;
     }
 
@@ -879,8 +882,9 @@ static void usb_host_handle_data(USBDevice *dev, USBPacket *p)
         ret = ioctl(s->fd, USBDEVFS_CLEAR_HALT, &arg);
         if (ret < 0) {
             perror("USBDEVFS_CLEAR_HALT");
-            trace_usb_host_req_complete(s->bus_num, s->addr, p, USB_RET_NAK);
             p->status = USB_RET_NAK;
+            trace_usb_host_req_complete(s->bus_num, s->addr, p,
+                                        p->status, p->actual_length);
             return;
         }
         clear_halt(s, p->pid, p->ep->nr);
@@ -936,15 +940,15 @@ static void usb_host_handle_data(USBDevice *dev, USBPacket *p)
 
             switch(errno) {
             case ETIMEDOUT:
-                trace_usb_host_req_complete(s->bus_num, s->addr, p,
-                                            USB_RET_NAK);
                 p->status = USB_RET_NAK;
+                trace_usb_host_req_complete(s->bus_num, s->addr, p,
+                                            p->status, p->actual_length);
                 break;
             case EPIPE:
             default:
-                trace_usb_host_req_complete(s->bus_num, s->addr, p,
-                                            USB_RET_STALL);
                 p->status = USB_RET_STALL;
+                trace_usb_host_req_complete(s->bus_num, s->addr, p,
+                                            p->status, p->actual_length);
             }
             return;
         }
diff --git a/trace-events b/trace-events
index 913e00b..02cdabc 100644
--- a/trace-events
+++ b/trace-events
@@ -431,7 +431,7 @@ usb_host_claim_interfaces(int bus, int addr, int config, int nif) "dev %d:%d, co
 usb_host_release_interfaces(int bus, int addr) "dev %d:%d"
 usb_host_req_control(int bus, int addr, void *p, int req, int value, int index) "dev %d:%d, packet %p, req 0x%x, value %d, index %d"
 usb_host_req_data(int bus, int addr, void *p, int in, int ep, int size) "dev %d:%d, packet %p, in %d, ep %d, size %d"
-usb_host_req_complete(int bus, int addr, void *p, int status) "dev %d:%d, packet %p, status %d"
+usb_host_req_complete(int bus, int addr, void *p, int status, int length) "dev %d:%d, packet %p, status %d, length %d"
 usb_host_req_emulated(int bus, int addr, void *p, int status) "dev %d:%d, packet %p, status %d"
 usb_host_req_canceled(int bus, int addr, void *p) "dev %d:%d, packet %p"
 usb_host_urb_submit(int bus, int addr, void *aurb, int length, int more) "dev %d:%d, aurb %p, length %d, more %d"
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [Qemu-devel] [PATCH 2/2] usb-host: fix splitted transfers
  2012-11-15 15:19 [Qemu-devel] [PATCH 1/2] usb-host: update tracing Gerd Hoffmann
@ 2012-11-15 15:19 ` Gerd Hoffmann
  2012-11-15 15:23 ` [Qemu-devel] [PATCH 1/2] usb-host: update tracing Hans de Goede
  1 sibling, 0 replies; 3+ messages in thread
From: Gerd Hoffmann @ 2012-11-15 15:19 UTC (permalink / raw)
  To: qemu-devel; +Cc: hdegoede, Gerd Hoffmann

USBPacket->actual_length wasn't updated correctly for USBPackets
splitted into multiple urbs.  Fix it.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/usb/host-linux.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/hw/usb/host-linux.c b/hw/usb/host-linux.c
index e3d394f..aa77b77 100644
--- a/hw/usb/host-linux.c
+++ b/hw/usb/host-linux.c
@@ -366,8 +366,11 @@ static void async_complete(void *opaque)
         if (p) {
             switch (aurb->urb.status) {
             case 0:
-                p->actual_length = aurb->urb.actual_length;
-                p->status = USB_RET_SUCCESS; /* Clear previous ASYNC status */
+                p->actual_length += aurb->urb.actual_length;
+                if (!aurb->more) {
+                    /* Clear previous ASYNC status */
+                    p->status = USB_RET_SUCCESS;
+                }
                 break;
 
             case -EPIPE:
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] usb-host: update tracing
  2012-11-15 15:19 [Qemu-devel] [PATCH 1/2] usb-host: update tracing Gerd Hoffmann
  2012-11-15 15:19 ` [Qemu-devel] [PATCH 2/2] usb-host: fix splitted transfers Gerd Hoffmann
@ 2012-11-15 15:23 ` Hans de Goede
  1 sibling, 0 replies; 3+ messages in thread
From: Hans de Goede @ 2012-11-15 15:23 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: qemu-devel

ACK series.

Regards,

Hans


On 11/15/2012 04:19 PM, Gerd Hoffmann wrote:
> Now that we have separate status and length fields in USBPacket
> update the completion tracepoint to log both.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>   hw/usb/host-linux.c |   20 ++++++++++++--------
>   trace-events        |    2 +-
>   2 files changed, 13 insertions(+), 9 deletions(-)
>
> diff --git a/hw/usb/host-linux.c b/hw/usb/host-linux.c
> index b17e1dc..e3d394f 100644
> --- a/hw/usb/host-linux.c
> +++ b/hw/usb/host-linux.c
> @@ -385,10 +385,12 @@ static void async_complete(void *opaque)
>               }
>
>               if (aurb->urb.type == USBDEVFS_URB_TYPE_CONTROL) {
> -                trace_usb_host_req_complete(s->bus_num, s->addr, p, p->status);
> +                trace_usb_host_req_complete(s->bus_num, s->addr, p,
> +                                            p->status, aurb->urb.actual_length);
>                   usb_generic_async_ctrl_complete(&s->dev, p);
>               } else if (!aurb->more) {
> -                trace_usb_host_req_complete(s->bus_num, s->addr, p, p->status);
> +                trace_usb_host_req_complete(s->bus_num, s->addr, p,
> +                                            p->status, aurb->urb.actual_length);
>                   usb_packet_complete(&s->dev, p);
>               }
>           }
> @@ -863,8 +865,9 @@ static void usb_host_handle_data(USBDevice *dev, USBPacket *p)
>                               p->ep->nr, p->iov.size);
>
>       if (!is_valid(s, p->pid, p->ep->nr)) {
> -        trace_usb_host_req_complete(s->bus_num, s->addr, p, USB_RET_NAK);
>           p->status = USB_RET_NAK;
> +        trace_usb_host_req_complete(s->bus_num, s->addr, p,
> +                                    p->status, p->actual_length);
>           return;
>       }
>
> @@ -879,8 +882,9 @@ static void usb_host_handle_data(USBDevice *dev, USBPacket *p)
>           ret = ioctl(s->fd, USBDEVFS_CLEAR_HALT, &arg);
>           if (ret < 0) {
>               perror("USBDEVFS_CLEAR_HALT");
> -            trace_usb_host_req_complete(s->bus_num, s->addr, p, USB_RET_NAK);
>               p->status = USB_RET_NAK;
> +            trace_usb_host_req_complete(s->bus_num, s->addr, p,
> +                                        p->status, p->actual_length);
>               return;
>           }
>           clear_halt(s, p->pid, p->ep->nr);
> @@ -936,15 +940,15 @@ static void usb_host_handle_data(USBDevice *dev, USBPacket *p)
>
>               switch(errno) {
>               case ETIMEDOUT:
> -                trace_usb_host_req_complete(s->bus_num, s->addr, p,
> -                                            USB_RET_NAK);
>                   p->status = USB_RET_NAK;
> +                trace_usb_host_req_complete(s->bus_num, s->addr, p,
> +                                            p->status, p->actual_length);
>                   break;
>               case EPIPE:
>               default:
> -                trace_usb_host_req_complete(s->bus_num, s->addr, p,
> -                                            USB_RET_STALL);
>                   p->status = USB_RET_STALL;
> +                trace_usb_host_req_complete(s->bus_num, s->addr, p,
> +                                            p->status, p->actual_length);
>               }
>               return;
>           }
> diff --git a/trace-events b/trace-events
> index 913e00b..02cdabc 100644
> --- a/trace-events
> +++ b/trace-events
> @@ -431,7 +431,7 @@ usb_host_claim_interfaces(int bus, int addr, int config, int nif) "dev %d:%d, co
>   usb_host_release_interfaces(int bus, int addr) "dev %d:%d"
>   usb_host_req_control(int bus, int addr, void *p, int req, int value, int index) "dev %d:%d, packet %p, req 0x%x, value %d, index %d"
>   usb_host_req_data(int bus, int addr, void *p, int in, int ep, int size) "dev %d:%d, packet %p, in %d, ep %d, size %d"
> -usb_host_req_complete(int bus, int addr, void *p, int status) "dev %d:%d, packet %p, status %d"
> +usb_host_req_complete(int bus, int addr, void *p, int status, int length) "dev %d:%d, packet %p, status %d, length %d"
>   usb_host_req_emulated(int bus, int addr, void *p, int status) "dev %d:%d, packet %p, status %d"
>   usb_host_req_canceled(int bus, int addr, void *p) "dev %d:%d, packet %p"
>   usb_host_urb_submit(int bus, int addr, void *aurb, int length, int more) "dev %d:%d, aurb %p, length %d, more %d"
>

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-11-15 15:26 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-15 15:19 [Qemu-devel] [PATCH 1/2] usb-host: update tracing Gerd Hoffmann
2012-11-15 15:19 ` [Qemu-devel] [PATCH 2/2] usb-host: fix splitted transfers Gerd Hoffmann
2012-11-15 15:23 ` [Qemu-devel] [PATCH 1/2] usb-host: update tracing Hans de Goede

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.