Daniel Wagner changed bug 1161867
What Removed Added
CC   daniel.wagner@suse.com

Comment # 2 on bug 1161867 from
The messager: chip.c:

static int
__irq_startup_managed(struct irq_desc *desc, struct cpumask *aff, bool force)
{
[...]
    if (cpumask_any_and(aff, cpu_online_mask) >= nr_cpu_ids) {
        /*
         * Catch code which fiddles with enable_irq() on a managed
         * and potentially shutdown IRQ. Chained interrupt
         * installment or irq auto probing should not happen on
         * managed irqs either.
         */
        if (WARN_ON_ONCE(force))
            return IRQ_STARTUP_ABORT;
[...]
}

And the source of the problem:

/*
 * Poll for completions any queue, including those not dedicated to polling.
 * Can be called from any context.
 */
static int nvme_poll_irqdisable(struct nvme_queue *nvmeq, unsigned int tag)
{
    struct pci_dev *pdev = to_pci_dev(nvmeq->dev->dev);
    u16 start, end;
    int found;

    /*
     * For a poll queue we need to protect against the polling thread
     * using the CQ lock.  For normal interrupt driven threads we have
     * to disable the interrupt to avoid racing with it.
     */
    if (test_bit(NVMEQ_POLLED, &nvmeq->flags)) {
        spin_lock(&nvmeq->cq_poll_lock);
        found = nvme_process_cq(nvmeq, &start, &end, tag);
        spin_unlock(&nvmeq->cq_poll_lock);
    } else {
        disable_irq(pci_irq_vector(pdev, nvmeq->cq_vector));
        found = nvme_process_cq(nvmeq, &start, &end, tag);
        enable_irq(pci_irq_vector(pdev, nvmeq->cq_vector));
    }

    nvme_complete_cqes(nvmeq, start, end);
    return found;
}


You are receiving this mail because: