diff options
-rw-r--r-- | arch/s390/pci/pci_msi.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/arch/s390/pci/pci_msi.c b/arch/s390/pci/pci_msi.c index 0297931335e1..b097aed05a9b 100644 --- a/arch/s390/pci/pci_msi.c +++ b/arch/s390/pci/pci_msi.c | |||
@@ -18,8 +18,9 @@ | |||
18 | 18 | ||
19 | /* mapping of irq numbers to msi_desc */ | 19 | /* mapping of irq numbers to msi_desc */ |
20 | static struct hlist_head *msi_hash; | 20 | static struct hlist_head *msi_hash; |
21 | static unsigned int msihash_shift = 6; | 21 | static const unsigned int msi_hash_bits = 8; |
22 | #define msi_hashfn(nr) hash_long(nr, msihash_shift) | 22 | #define MSI_HASH_BUCKETS (1U << msi_hash_bits) |
23 | #define msi_hashfn(nr) hash_long(nr, msi_hash_bits) | ||
23 | 24 | ||
24 | static DEFINE_SPINLOCK(msi_map_lock); | 25 | static DEFINE_SPINLOCK(msi_map_lock); |
25 | 26 | ||
@@ -74,6 +75,7 @@ int zpci_setup_msi_irq(struct zpci_dev *zdev, struct msi_desc *msi, | |||
74 | map->irq = nr; | 75 | map->irq = nr; |
75 | map->msi = msi; | 76 | map->msi = msi; |
76 | zdev->msi_map[nr & ZPCI_MSI_MASK] = map; | 77 | zdev->msi_map[nr & ZPCI_MSI_MASK] = map; |
78 | INIT_HLIST_NODE(&map->msi_chain); | ||
77 | 79 | ||
78 | pr_debug("%s hashing irq: %u to bucket nr: %llu\n", | 80 | pr_debug("%s hashing irq: %u to bucket nr: %llu\n", |
79 | __func__, nr, msi_hashfn(nr)); | 81 | __func__, nr, msi_hashfn(nr)); |
@@ -125,11 +127,11 @@ int __init zpci_msihash_init(void) | |||
125 | { | 127 | { |
126 | unsigned int i; | 128 | unsigned int i; |
127 | 129 | ||
128 | msi_hash = kmalloc(256 * sizeof(*msi_hash), GFP_KERNEL); | 130 | msi_hash = kmalloc(MSI_HASH_BUCKETS * sizeof(*msi_hash), GFP_KERNEL); |
129 | if (!msi_hash) | 131 | if (!msi_hash) |
130 | return -ENOMEM; | 132 | return -ENOMEM; |
131 | 133 | ||
132 | for (i = 0; i < (1U << msihash_shift); i++) | 134 | for (i = 0; i < MSI_HASH_BUCKETS; i++) |
133 | INIT_HLIST_HEAD(&msi_hash[i]); | 135 | INIT_HLIST_HEAD(&msi_hash[i]); |
134 | return 0; | 136 | return 0; |
135 | } | 137 | } |