struct mutex            lock; /* guards the alloc/free operations */
        u64                     target_addr;
        int                     irq;
-       /* used indicates which MSI interrupts have been alloc'd */
-       unsigned long           used;
+       DECLARE_BITMAP(used, BRCM_INT_PCI_MSI_NR);
        bool                    legacy;
        /* Some chips have MSIs in bits [31..24] of a shared register. */
        int                     legacy_shift;
        int hwirq;
 
        mutex_lock(&msi->lock);
-       hwirq = bitmap_find_free_region(&msi->used, msi->nr, 0);
+       hwirq = bitmap_find_free_region(msi->used, msi->nr, 0);
        mutex_unlock(&msi->lock);
 
        return hwirq;
 static void brcm_msi_free(struct brcm_msi *msi, unsigned long hwirq)
 {
        mutex_lock(&msi->lock);
-       bitmap_release_region(&msi->used, hwirq, 0);
+       bitmap_release_region(msi->used, hwirq, 0);
        mutex_unlock(&msi->lock);
 }
 
        msi->irq = irq;
        msi->legacy = pcie->hw_rev < BRCM_PCIE_HW_REV_33;
 
+       /*
+        * Sanity check to make sure that the 'used' bitmap in struct brcm_msi
+        * is large enough.
+        */
+       BUILD_BUG_ON(BRCM_INT_PCI_MSI_LEGACY_NR > BRCM_INT_PCI_MSI_NR);
+
        if (msi->legacy) {
                msi->intr_base = msi->base + PCIE_INTR2_CPU_BASE;
                msi->nr = BRCM_INT_PCI_MSI_LEGACY_NR;