Pull irq fix from Thomas Gleixner: "A small fix for the affinity spreading code. It failed to handle situations where a single vector was requested either due to only one CPU being available or vector exhaustion causing only a single interrupt to be granted. The fix is to simply remove the requirement in the affinity spreading code for more than one interrupt being available" * 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: genirq/affinity: Create affinity mask for single vector
Unified · Split
| @@ -251,11 +251,9 @@ irq_create_affinity_masks(unsigned int nvecs, struct irq_affinity *affd) · 250 unmodified lines | |||
| 251 | * Determine the number of vectors which need interrupt affinities | 251 | * Determine the number of vectors which need interrupt affinities |
| 252 | * assigned. If the pre/post request exhausts the available vectors | 252 | * assigned. If the pre/post request exhausts the available vectors |
| 253 | * then nothing to do here except for invoking the calc_sets() | 253 | * then nothing to do here except for invoking the calc_sets() |
| 254 | * callback so the device driver can adjust to the situation. If there | 254 | * callback so the device driver can adjust to the situation. |
| 255 | * is only a single vector, then managing the queue is pointless as | ||
| 256 | * well. | ||
| 257 | */ | 255 | */ |
| 258 | if (nvecs > 1 && nvecs > affd->pre_vectors + affd->post_vectors) | 256 | if (nvecs > affd->pre_vectors + affd->post_vectors) |
| 259 | affvecs = nvecs - affd->pre_vectors - affd->post_vectors; | 257 | affvecs = nvecs - affd->pre_vectors - affd->post_vectors; |
| 260 | else | 258 | else |
| 261 | affvecs = 0; | 259 | affvecs = 0; |