PCI/MSI: fix msi_mask() shift fix
Hidetoshi Seto points out that commit
bffac3c593
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>
This commit is contained in:
parent
37bed90094
commit
0b49ec37a2
1 changed files with 4 additions and 6 deletions
|
@ -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 inline __attribute_const__ u32 msi_mask(unsigned x)
|
||||||
{
|
{
|
||||||
static const u32 mask[] = { 1, 2, 4, 0xf, 0xff, 0xffff, 0xffffffff };
|
/* Don't shift by >= width of type */
|
||||||
return mask[x];
|
if (x >= 5)
|
||||||
|
return 0xffffffff;
|
||||||
|
return (1 << (1 << x)) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void msix_flush_writes(struct irq_desc *desc)
|
static void msix_flush_writes(struct irq_desc *desc)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue