提交 719c130d 编写于 作者: H Hans de Goede 提交者: Gerd Hoffmann

uhci: Fix 1 ms delay in interrupt reporting to the guest

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: NHans de Goede <hdegoede@redhat.com>
Signed-off-by: NGerd Hoffmann <kraxel@redhat.com>
上级 4a9ef2c0
......@@ -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);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册