~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise

« back to all changes in this revision

Viewing changes to drivers/pci/xen-pcifront.c

  • Committer: Bazaar Package Importer
  • Author(s): Paolo Pisati
  • Date: 2011-06-29 15:23:51 UTC
  • mfrom: (26.1.1 natty-proposed)
  • Revision ID: james.westby@ubuntu.com-20110629152351-xs96tm303d95rpbk
Tags: 3.0.0-1200.2
* Rebased against 3.0.0-6.7
* BSP from TI based on 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
243
243
 
244
244
#ifdef CONFIG_PCI_MSI
245
245
static int pci_frontend_enable_msix(struct pci_dev *dev,
246
 
                                    int **vector, int nvec)
 
246
                                    int vector[], int nvec)
247
247
{
248
248
        int err;
249
249
        int i;
277
277
        if (likely(!err)) {
278
278
                if (likely(!op.value)) {
279
279
                        /* we get the result */
280
 
                        for (i = 0; i < nvec; i++)
281
 
                                *(*vector+i) = op.msix_entries[i].vector;
282
 
                        return 0;
 
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
                                }
 
288
                                vector[i] = op.msix_entries[i].vector;
 
289
                        }
283
290
                } else {
284
291
                        printk(KERN_DEBUG "enable msix get value %x\n",
285
292
                                op.value);
286
 
                        return op.value;
287
293
                }
288
294
        } else {
289
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
300
static void pci_frontend_disable_msix(struct pci_dev *dev)
310
316
                dev_err(&dev->dev, "pci_disable_msix get err %x\n", err);
311
317
}
312
318
 
313
 
static int pci_frontend_enable_msi(struct pci_dev *dev, int **vector)
 
319
static int pci_frontend_enable_msi(struct pci_dev *dev, int vector[])
314
320
{
315
321
        int err;
316
322
        struct xen_pci_op op = {
324
330
 
325
331
        err = do_pci_op(pdev, &op);
326
332
        if (likely(!err)) {
327
 
                *(*vector) = op.value;
 
333
                vector[0] = 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[0] = -1;
 
339
                }
328
340
        } else {
329
341
                dev_err(&dev->dev, "pci frontend enable msi failed for dev "
330
342
                                    "%x:%x\n", op.bus, op.devfn);
733
745
 
734
746
        pcifront_free_roots(pdev);
735
747
 
736
 
        /*For PCIE_AER error handling job*/
737
 
        flush_scheduled_work();
 
748
        cancel_work_sync(&pdev->op_work);
738
749
 
739
750
        if (pdev->irq >= 0)
740
751
                unbind_from_irqhandler(pdev->irq, pdev);