static int msi_init(void) { static int status = -ENOMEM; if (!status) return status; if (pci_msi_quirk) { pci_msi_enable = 0; printk(KERN_WARNING "PCI: MSI quirk detected. MSI disabled.\n"); status = -EINVAL; return status; } if ((status = msi_cache_init()) < 0) { pci_msi_enable = 0; printk(KERN_WARNING "PCI: MSI cache init failed\n"); return status; } last_alloc_vector = assign_irq_vector(AUTO_ASSIGN); if (last_alloc_vector < 0) { pci_msi_enable = 0; printk(KERN_WARNING "PCI: No interrupt vectors available for MSI\n"); status = -EBUSY; return status; } vector_irq[last_alloc_vector] = 0; nr_released_vectors++; return status; }
static int msi_init(void) { static int status = -ENOMEM; if (!status) return status; if ((status = msi_cache_init()) < 0) { pci_msi_enable = 0; printk(KERN_INFO "WARNING: MSI INIT FAILURE\n"); return status; } last_alloc_vector = assign_irq_vector(AUTO_ASSIGN); if (last_alloc_vector < 0) { pci_msi_enable = 0; printk(KERN_INFO "WARNING: ALL VECTORS ARE BUSY\n"); status = -EBUSY; return status; } vector_irq[last_alloc_vector] = 0; nr_released_vectors++; printk(KERN_INFO "MSI INIT SUCCESS\n"); return status; }