I am currently developing a PCI block driver and can use only MSI interrupt.  
During interrupt initialization, I called the pci_enable_msi and request_irq 
with following sample irq initialization function -

static int mydev_init_irq(struct mydevice *dev_ptr)
{
        int error;
        struct pci_dev *pdev = dev_ptr->pdev;
        const char *mydev_irq = "mydev_irq";

        error = pci_enable_msi(pdev);

        if (error) {

                printk(KERN_WARNING "Failed to enable MSI.");
                return error;
        }

        error = request_irq(pdev->irq, mydev_irq_handler, IRQF_SHARED,
                            mydev_irq, dev_ptr);

        return error;
}

After the request_irq executes, I always see from my debug trace that my driver 
is interrupted i.e. mydev_irq_handler got called.  I don't think it's proper 
behavior, because I'm sure at this point of the initialization the device is 
not fully initialized as well and hasn't sent me an interrupt yet (didn't see 
this behavior in our Windows driver).  At this point in initialization, since 
the device is not yet fully initialized and can't provide other info to the 
spurious interrupt I received, the IRQ handler will skip most of the handler 
function body and go straight to return IRQ_HANDLED, but I'm concerned with 
this bug.

What could be causing that, and did I miss anything during interrupt 
initialization that caused it?  Right now it's harmless, but I'm worried that 
it may cause problems in the future, like if I ported it to another Linux 
distro, and so I want to be able to prevent this.



Sent from Samsung Mobile
_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

Reply via email to