summaryrefslogtreecommitdiffstats
path: root/hw/usb
diff options
context:
space:
mode:
authorGerd Hoffmann2020-11-05 14:41:12 +0100
committerGerd Hoffmann2020-11-16 09:11:21 +0100
commitc590fe3aa23acb923159c41c741dd694cba9c544 (patch)
tree8810017e0b4db25f28955e18543b12ddd48343f7 /hw/usb
parentxhci: fix guest triggerable assert (diff)
downloadqemu-c590fe3aa23acb923159c41c741dd694cba9c544.tar.gz
qemu-c590fe3aa23acb923159c41c741dd694cba9c544.tar.xz
qemu-c590fe3aa23acb923159c41c741dd694cba9c544.zip
xhci: move sanity checks
The v variable goes negative for reg < 0x20. Reorder the code to first sanity check then calculate v and assign intr to make sanity checkers happy. Buglink: https://bugs.launchpad.net/qemu/+bug/1902112 Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-id: 20201105134112.25119-7-kraxel@redhat.com
Diffstat (limited to 'hw/usb')
-rw-r--r--hw/usb/hcd-xhci.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
index d00bb0141d..6dfb17cbe9 100644
--- a/hw/usb/hcd-xhci.c
+++ b/hw/usb/hcd-xhci.c
@@ -3010,14 +3010,17 @@ static void xhci_runtime_write(void *ptr, hwaddr reg,
uint64_t val, unsigned size)
{
XHCIState *xhci = ptr;
- int v = (reg - 0x20) / 0x20;
- XHCIInterrupter *intr = &xhci->intr[v];
+ XHCIInterrupter *intr;
+ int v;
+
trace_usb_xhci_runtime_write(reg, val);
if (reg < 0x20) {
trace_usb_xhci_unimplemented("runtime write", reg);
return;
}
+ v = (reg - 0x20) / 0x20;
+ intr = &xhci->intr[v];
switch (reg & 0x1f) {
case 0x00: /* IMAN */