Comment 2 for bug 1648449

Revision history for this message
Dan Streetman (ddstreet) wrote :

This is a problem only in xenial and later (yakkety, zesty, upstream). The issue is the driver configures an MSIX interrupt to use with the admin queue during initialization, and then when setting up its I/O queues, it releases the MSIX interrupt for the admin queue, and then immediately configures lots of MSIX interrupts for its I/O queues (the admin queue then shares the MSIX interrupt of the first I/O queue). This MSIX release/request is what causes the failure; if the MSIX interrupts are configured only once, the driver initializes all controllers ok.

Before the xenial kernel (e.g. in trusty), the driver works. However, the reason it works is because it uses a polling kthread instead of a MSIX interrupt for the admin queue, and so doesn't request the first single MSIX interrupt, thus this specific problem isn't present there. Later kernels, starting with xenial, do not use the polling kthread (as it was never actually needed), and do use MSIX interrupts for the admin queue and I/O queues.