OSDN Git Service

xhci: fix numintrs sanity checks
authorGerd Hoffmann <kraxel@redhat.com>
Tue, 19 Mar 2013 08:18:20 +0000 (09:18 +0100)
committerGerd Hoffmann <kraxel@redhat.com>
Wed, 3 Apr 2013 07:55:49 +0000 (09:55 +0200)
Make sure numintrs is a power of two, msi requires this.

https://bugzilla.redhat.com/show_bug.cgi?id=918035

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
hw/usb/hcd-xhci.c

index 5aa342b..9d06c51 100644 (file)
@@ -3290,6 +3290,9 @@ static int usb_xhci_initfn(struct PCIDevice *dev)
     if (xhci->numintrs > MAXINTRS) {
         xhci->numintrs = MAXINTRS;
     }
+    while (xhci->numintrs & (xhci->numintrs - 1)) {   /* ! power of 2 */
+        xhci->numintrs++;
+    }
     if (xhci->numintrs < 1) {
         xhci->numintrs = 1;
     }