diff options
| -rw-r--r-- | drivers/pci/xen-pcifront.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c index 030ce3743439..5c7b6ad68056 100644 --- a/drivers/pci/xen-pcifront.c +++ b/drivers/pci/xen-pcifront.c | |||
| @@ -277,18 +277,24 @@ static int pci_frontend_enable_msix(struct pci_dev *dev, | |||
| 277 | if (likely(!err)) { | 277 | if (likely(!err)) { |
| 278 | if (likely(!op.value)) { | 278 | if (likely(!op.value)) { |
| 279 | /* we get the result */ | 279 | /* we get the result */ |
| 280 | for (i = 0; i < nvec; i++) | 280 | for (i = 0; i < nvec; i++) { |
| 281 | if (op.msix_entries[i].vector <= 0) { | ||
| 282 | dev_warn(&dev->dev, "MSI-X entry %d is invalid: %d!\n", | ||
| 283 | i, op.msix_entries[i].vector); | ||
| 284 | err = -EINVAL; | ||
| 285 | *(*vector+i) = -1; | ||
| 286 | continue; | ||
| 287 | } | ||
| 281 | *(*vector+i) = op.msix_entries[i].vector; | 288 | *(*vector+i) = op.msix_entries[i].vector; |
| 282 | return 0; | 289 | } |
| 283 | } else { | 290 | } else { |
| 284 | printk(KERN_DEBUG "enable msix get value %x\n", | 291 | printk(KERN_DEBUG "enable msix get value %x\n", |
| 285 | op.value); | 292 | op.value); |
| 286 | return op.value; | ||
| 287 | } | 293 | } |
| 288 | } else { | 294 | } else { |
| 289 | dev_err(&dev->dev, "enable msix get err %x\n", err); | 295 | dev_err(&dev->dev, "enable msix get err %x\n", err); |
| 290 | return err; | ||
| 291 | } | 296 | } |
| 297 | return err; | ||
| 292 | } | 298 | } |
| 293 | 299 | ||
| 294 | static void pci_frontend_disable_msix(struct pci_dev *dev) | 300 | static void pci_frontend_disable_msix(struct pci_dev *dev) |
| @@ -325,6 +331,12 @@ static int pci_frontend_enable_msi(struct pci_dev *dev, int **vector) | |||
| 325 | err = do_pci_op(pdev, &op); | 331 | err = do_pci_op(pdev, &op); |
| 326 | if (likely(!err)) { | 332 | if (likely(!err)) { |
| 327 | *(*vector) = op.value; | 333 | *(*vector) = op.value; |
| 334 | if (op.value <= 0) { | ||
| 335 | dev_warn(&dev->dev, "MSI entry is invalid: %d!\n", | ||
| 336 | op.value); | ||
| 337 | err = -EINVAL; | ||
| 338 | *(*vector) = -1; | ||
| 339 | } | ||
| 328 | } else { | 340 | } else { |
| 329 | dev_err(&dev->dev, "pci frontend enable msi failed for dev " | 341 | dev_err(&dev->dev, "pci frontend enable msi failed for dev " |
| 330 | "%x:%x\n", op.bus, op.devfn); | 342 | "%x:%x\n", op.bus, op.devfn); |
