• Keith Busch's avatar
    NVMe: Always use MSI/MSI-x interrupts · a5229050
    Keith Busch authored
    Multiple users have reported device initialization failure due the driver
    not receiving legacy PCI interrupts. This is not unique to any particular
    controller, but has been observed on multiple platforms.
    
    There have been no issues reported or observed when with message signaled
    interrupts, so this patch attempts to use MSI-x during initialization,
    falling back to MSI. If that fails, legacy would become the default.
    
    The setup_io_queues error handling had to change as a result: the admin
    queue's msix_entry used to be initialized to the legacy IRQ. The case
    where nr_io_queues is 0 would fail request_irq when setting up the admin
    queue's interrupt since re-enabling MSI-x fails with 0 vectors, leaving
    the admin queue's msix_entry invalid. Instead, return success immediately.
    Reported-by: default avatarTim Muhlemmer <muhlemmer@gmail.com>
    Reported-by: default avatarJon Derrick <jonathan.derrick@intel.com>
    Signed-off-by: default avatarKeith Busch <keith.busch@intel.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    a5229050
pci.c 55.3 KB