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: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
4a9ef2c042
commit
719c130dca
@ -1191,17 +1191,7 @@ static void uhci_frame_timer(void *opaque)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Complete the previous frame */
|
/* Process the current 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;
|
|
||||||
|
|
||||||
trace_usb_uhci_frame_start(s->frnum);
|
trace_usb_uhci_frame_start(s->frnum);
|
||||||
|
|
||||||
uhci_async_validate_begin(s);
|
uhci_async_validate_begin(s);
|
||||||
@ -1210,6 +1200,18 @@ static void uhci_frame_timer(void *opaque)
|
|||||||
|
|
||||||
uhci_async_validate_end(s);
|
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);
|
qemu_mod_timer(s->frame_timer, s->expire_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user