Good afternoon! I'm looking at the linux kernel's design for NVMe driver. As far as I understood, whenever interrupt raised by SSD controller, nvme_irq() function takes control. Inside nvme_irq(), there is function named nvme_process_cq(). When I tested kernel trace with direct IO requests in sync, using FIO, there is some cases where nvme_irq() is called, but nothing useful done inside nvme_process_cq(). More specifically, inside nvme_process_cq(), there is function call nvme_handle_cqe(). And there is some cases where nvme_irq is called but nvme_handle_cqe is not handled. I understood that no invocation of nvme_handle_cqe (because of returning false from nvme_read_cqe()) means that NVMe controller didn't append new element to CQ. Then, my question is, why interrupt is raised in the first place? I thought there is no need for raising interrupt if there is no jobs done in interrupt irq, as I described above.
Thanks in advance!