diff options
Diffstat (limited to 'drivers/pci/msi.c')
| -rw-r--r-- | drivers/pci/msi.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index 202b7507a357..48723d6fa60f 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c | |||
| @@ -137,6 +137,8 @@ static void set_msi_affinity(unsigned int vector, cpumask_t cpu_mask) | |||
| 137 | break; | 137 | break; |
| 138 | } | 138 | } |
| 139 | } | 139 | } |
| 140 | #else | ||
| 141 | #define set_msi_affinity NULL | ||
| 140 | #endif /* CONFIG_SMP */ | 142 | #endif /* CONFIG_SMP */ |
| 141 | 143 | ||
| 142 | static void mask_MSI_irq(unsigned int vector) | 144 | static void mask_MSI_irq(unsigned int vector) |
| @@ -214,7 +216,7 @@ static struct hw_interrupt_type msix_irq_type = { | |||
| 214 | .disable = mask_MSI_irq, | 216 | .disable = mask_MSI_irq, |
| 215 | .ack = mask_MSI_irq, | 217 | .ack = mask_MSI_irq, |
| 216 | .end = end_msi_irq_w_maskbit, | 218 | .end = end_msi_irq_w_maskbit, |
| 217 | .set_affinity = set_msi_irq_affinity | 219 | .set_affinity = set_msi_affinity |
| 218 | }; | 220 | }; |
| 219 | 221 | ||
| 220 | /* | 222 | /* |
| @@ -230,7 +232,7 @@ static struct hw_interrupt_type msi_irq_w_maskbit_type = { | |||
| 230 | .disable = mask_MSI_irq, | 232 | .disable = mask_MSI_irq, |
| 231 | .ack = mask_MSI_irq, | 233 | .ack = mask_MSI_irq, |
| 232 | .end = end_msi_irq_w_maskbit, | 234 | .end = end_msi_irq_w_maskbit, |
| 233 | .set_affinity = set_msi_irq_affinity | 235 | .set_affinity = set_msi_affinity |
| 234 | }; | 236 | }; |
| 235 | 237 | ||
| 236 | /* | 238 | /* |
| @@ -246,7 +248,7 @@ static struct hw_interrupt_type msi_irq_wo_maskbit_type = { | |||
| 246 | .disable = do_nothing, | 248 | .disable = do_nothing, |
| 247 | .ack = do_nothing, | 249 | .ack = do_nothing, |
| 248 | .end = end_msi_irq_wo_maskbit, | 250 | .end = end_msi_irq_wo_maskbit, |
| 249 | .set_affinity = set_msi_irq_affinity | 251 | .set_affinity = set_msi_affinity |
| 250 | }; | 252 | }; |
| 251 | 253 | ||
| 252 | static void msi_data_init(struct msg_data *msi_data, | 254 | static void msi_data_init(struct msg_data *msi_data, |
| @@ -416,7 +418,9 @@ static void attach_msi_entry(struct msi_desc *entry, int vector) | |||
| 416 | 418 | ||
| 417 | static void irq_handler_init(int cap_id, int pos, int mask) | 419 | static void irq_handler_init(int cap_id, int pos, int mask) |
| 418 | { | 420 | { |
| 419 | spin_lock(&irq_desc[pos].lock); | 421 | unsigned long flags; |
| 422 | |||
| 423 | spin_lock_irqsave(&irq_desc[pos].lock, flags); | ||
| 420 | if (cap_id == PCI_CAP_ID_MSIX) | 424 | if (cap_id == PCI_CAP_ID_MSIX) |
| 421 | irq_desc[pos].handler = &msix_irq_type; | 425 | irq_desc[pos].handler = &msix_irq_type; |
| 422 | else { | 426 | else { |
| @@ -425,7 +429,7 @@ static void irq_handler_init(int cap_id, int pos, int mask) | |||
| 425 | else | 429 | else |
| 426 | irq_desc[pos].handler = &msi_irq_w_maskbit_type; | 430 | irq_desc[pos].handler = &msi_irq_w_maskbit_type; |
| 427 | } | 431 | } |
| 428 | spin_unlock(&irq_desc[pos].lock); | 432 | spin_unlock_irqrestore(&irq_desc[pos].lock, flags); |
| 429 | } | 433 | } |
| 430 | 434 | ||
| 431 | static void enable_msi_mode(struct pci_dev *dev, int pos, int type) | 435 | static void enable_msi_mode(struct pci_dev *dev, int pos, int type) |
