[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 12/26] uhci: Fix 1 ms delay in interrupt reporting t
From: |
Hans de Goede |
Subject: |
[Qemu-devel] [PATCH 12/26] uhci: Fix 1 ms delay in interrupt reporting to the guest |
Date: |
Fri, 14 Dec 2012 14:35:33 +0100 |
Re-arrange how we process frames / increase frnum / report pending interrupts,
to avoid a 1 ms delay in interrupt reporting to the guest. This increases
the packet throughput for cases where the guest submits a single packet,
then waits for its completion then re-submits from 500 pkts / sec to
1000 pkts / sec. This impacts for example the use of redirected / virtual
usb to serial convertors.
Signed-off-by: Hans de Goede <address@hidden>
---
hw/usb/hcd-uhci.c | 24 +++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)
diff --git a/hw/usb/hcd-uhci.c b/hw/usb/hcd-uhci.c
index d053791..843927b 100644
--- a/hw/usb/hcd-uhci.c
+++ b/hw/usb/hcd-uhci.c
@@ -1191,17 +1191,7 @@ static void uhci_frame_timer(void *opaque)
return;
}
- /* Complete the previous frame */
- if (s->pending_int_mask) {
- s->status2 |= s->pending_int_mask;
- s->status |= UHCI_STS_USBINT;
- uhci_update_irq(s);
- }
- s->pending_int_mask = 0;
-
- /* Start new frame */
- s->frnum = (s->frnum + 1) & 0x7ff;
-
+ /* Process the current frame */
trace_usb_uhci_frame_start(s->frnum);
uhci_async_validate_begin(s);
@@ -1210,6 +1200,18 @@ static void uhci_frame_timer(void *opaque)
uhci_async_validate_end(s);
+ /* The uhci spec says frnum reflects the frame currently being processed,
+ * and the guest must look at frnum - 1 on interrupt, so inc frnum now */
+ s->frnum = (s->frnum + 1) & 0x7ff;
+
+ /* Complete the previous frame */
+ if (s->pending_int_mask) {
+ s->status2 |= s->pending_int_mask;
+ s->status |= UHCI_STS_USBINT;
+ uhci_update_irq(s);
+ }
+ s->pending_int_mask = 0;
+
qemu_mod_timer(s->frame_timer, s->expire_time);
}
--
1.8.0.1
- [Qemu-devel] [PATCH 07/26] ehci: Add an ehci_get_pid helper function, (continued)
- [Qemu-devel] [PATCH 07/26] ehci: Add an ehci_get_pid helper function, Hans de Goede, 2012/12/14
- [Qemu-devel] [PATCH 09/26] ehci: Use uframe precision for interrupt threshold checking, Hans de Goede, 2012/12/14
- Re: [Qemu-devel] [PATCH 09/26] ehci: Use uframe precision for interrupt threshold checking, Gerd Hoffmann, 2012/12/17
- Re: [Qemu-devel] [PATCH 09/26] ehci: Use uframe precision for interrupt threshold checking, Hans de Goede, 2012/12/17
- Re: [Qemu-devel] [PATCH 09/26] ehci: Use uframe precision for interrupt threshold checking, Gerd Hoffmann, 2012/12/17
- Re: [Qemu-devel] [PATCH 09/26] ehci: Use uframe precision for interrupt threshold checking, Hans de Goede, 2012/12/17
- Re: [Qemu-devel] [PATCH 09/26] ehci: Use uframe precision for interrupt threshold checking, Gerd Hoffmann, 2012/12/17
- Re: [Qemu-devel] [PATCH 09/26] ehci: Use uframe precision for interrupt threshold checking, Hans de Goede, 2012/12/18
- Re: [Qemu-devel] [PATCH 09/26] ehci: Use uframe precision for interrupt threshold checking, Gerd Hoffmann, 2012/12/18
- Re: [Qemu-devel] [PATCH 09/26] ehci: Use uframe precision for interrupt threshold checking, Hans de Goede, 2012/12/18
[Qemu-devel] [PATCH 12/26] uhci: Fix 1 ms delay in interrupt reporting to the guest,
Hans de Goede <=
[Qemu-devel] [PATCH 10/26] ehci: Further speedup rescanning if async schedule after raising an interrupt, Hans de Goede, 2012/12/14
[Qemu-devel] [PATCH 11/26] ehci: Don't call commit_irq after raising PCD, Hans de Goede, 2012/12/14
[Qemu-devel] [PATCH 13/26] uhci: Fix pending interrupts getting lost on migration, Hans de Goede, 2012/12/14
[Qemu-devel] [PATCH 14/26] uhci: Add a QH_VALID define, Hans de Goede, 2012/12/14
[Qemu-devel] [PATCH 17/26] hid: Change idle handling to use a timer, Hans de Goede, 2012/12/14
[Qemu-devel] [PATCH 15/26] uhci: Limit amount of frames processed in one go, Hans de Goede, 2012/12/14
[Qemu-devel] [PATCH 20/26] usbredir: Add an usbredir_stop_ep helper function, Hans de Goede, 2012/12/14
[Qemu-devel] [PATCH 19/26] usb: Add an usb_device_ep_stopped USBDevice method, Hans de Goede, 2012/12/14
[Qemu-devel] [PATCH 16/26] uhci: Maximize how many frames we catch up when behind, Hans de Goede, 2012/12/14
[Qemu-devel] [PATCH 21/26] usbredir: Add USBEP2I and I2USBEP helper macros, Hans de Goede, 2012/12/14