Skip to content

Commit

Permalink
PCI/MSI: fix msi_mask() shift fix
Browse files Browse the repository at this point in the history
Hidetoshi Seto points out that commit
bffac3c has wrong values in the array.
Rather than correct the array, we can just use a bounds check and
perform the calculation specified in the comment.  As a bonus, this will
not run off the end of the array if the device specifies an illegal
value in the MSI capability.

Signed-off-by: Matthew Wilcox <willy@linux.intel.com>
Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
  • Loading branch information
Matthew Wilcox authored and Jesse Barnes committed Feb 13, 2009
1 parent 37bed90 commit 0b49ec3
Showing 1 changed file with 4 additions and 6 deletions.
10 changes: 4 additions & 6 deletions drivers/pci/msi.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,14 +103,12 @@ static void msix_set_enable(struct pci_dev *dev, int enable)
}
}

/*
* Essentially, this is ((1 << (1 << x)) - 1), but without the
* undefinedness of a << 32.
*/
static inline __attribute_const__ u32 msi_mask(unsigned x)
{
static const u32 mask[] = { 1, 2, 4, 0xf, 0xff, 0xffff, 0xffffffff };
return mask[x];
/* Don't shift by >= width of type */
if (x >= 5)
return 0xffffffff;
return (1 << (1 << x)) - 1;
}

static void msix_flush_writes(struct irq_desc *desc)
Expand Down

0 comments on commit 0b49ec3

Please sign in to comment.