Bug 85221

Summary: parport_irq_handler breaks memory ballooning (and probably something else)
Product: Drivers Reporter: Matwey V. Kornilov (matwey.kornilov)
Component: ParallelAssignee: drivers_parallel
Status: RESOLVED INVALID    
Severity: normal    
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 3.11.10+ Subsystem:
Regression: No Bisected commit-id:
Attachments: lspci output

Description Matwey V. Kornilov 2014-09-27 14:53:24 UTC
Hi,

I am running a virtual machine, with PCI device (parport board) passed into it.

Please, find lspci attached here. Two devices PCI board and virtio balloon device share the same IRQ 10.

Then when I try to increase memory amount for VM it hangs.

I suspect that the issue in the following.

irqreturn_t parport_irq_handler(int irq, void *dev_id)
{
        struct parport *port = dev_id;
 
        parport_generic_irq(port);
 
        return IRQ_HANDLED;
}

parport_irq_handler always return IRQ_HANDLED

and the same time handle_irq_event_percpu has the following code in action-loop:

                case IRQ_HANDLED:
                        flags |= action->flags;
                        break;

so, when parport_irq_handler is in the action list, then other actions are not called. Even if this interrupt is not related to parport at all. This may potentially lead to device drivers malfunction.
Comment 1 Matwey V. Kornilov 2014-09-27 14:53:47 UTC
Created attachment 151991 [details]
lspci output