diff options
Diffstat (limited to 'drivers/pci/msi.c')
-rw-r--r-- | drivers/pci/msi.c | 14 |
1 files changed, 2 insertions, 12 deletions
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index ba44fdfda66b..9e1569107cd6 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c | |||
@@ -1058,7 +1058,7 @@ static int __pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec, | |||
1058 | 1058 | ||
1059 | for (;;) { | 1059 | for (;;) { |
1060 | if (affd) { | 1060 | if (affd) { |
1061 | nvec = irq_calc_affinity_vectors(nvec, affd); | 1061 | nvec = irq_calc_affinity_vectors(minvec, nvec, affd); |
1062 | if (nvec < minvec) | 1062 | if (nvec < minvec) |
1063 | return -ENOSPC; | 1063 | return -ENOSPC; |
1064 | } | 1064 | } |
@@ -1097,7 +1097,7 @@ static int __pci_enable_msix_range(struct pci_dev *dev, | |||
1097 | 1097 | ||
1098 | for (;;) { | 1098 | for (;;) { |
1099 | if (affd) { | 1099 | if (affd) { |
1100 | nvec = irq_calc_affinity_vectors(nvec, affd); | 1100 | nvec = irq_calc_affinity_vectors(minvec, nvec, affd); |
1101 | if (nvec < minvec) | 1101 | if (nvec < minvec) |
1102 | return -ENOSPC; | 1102 | return -ENOSPC; |
1103 | } | 1103 | } |
@@ -1165,16 +1165,6 @@ int pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs, | |||
1165 | if (flags & PCI_IRQ_AFFINITY) { | 1165 | if (flags & PCI_IRQ_AFFINITY) { |
1166 | if (!affd) | 1166 | if (!affd) |
1167 | affd = &msi_default_affd; | 1167 | affd = &msi_default_affd; |
1168 | |||
1169 | if (affd->pre_vectors + affd->post_vectors > min_vecs) | ||
1170 | return -EINVAL; | ||
1171 | |||
1172 | /* | ||
1173 | * If there aren't any vectors left after applying the pre/post | ||
1174 | * vectors don't bother with assigning affinity. | ||
1175 | */ | ||
1176 | if (affd->pre_vectors + affd->post_vectors == min_vecs) | ||
1177 | affd = NULL; | ||
1178 | } else { | 1168 | } else { |
1179 | if (WARN_ON(affd)) | 1169 | if (WARN_ON(affd)) |
1180 | affd = NULL; | 1170 | affd = NULL; |