Messages in this thread | | | From | Thomas Gleixner <> | Subject | Re: [RFC PATCH V2 09/11] xen: Clear IRQD_IRQ_STARTED flag during shutdown PIRQs | Date | Wed, 08 Jan 2020 16:23:25 +0100 |
| |
Anchal Agarwal <anchalag@amazon.com> writes:
> shutdown_pirq is invoked during hibernation path and hence > PIRQs should be restarted during resume. > Before this commit'020db9d3c1dc0a' xen/events: Fix interrupt lost > during irq_disable and irq_enable startup_pirq was automatically > called during irq_enable however, after this commit pirq's did not > get explicitly started once resumed from hibernation. > > chip->irq_startup is called only if IRQD_IRQ_STARTED is unset during > irq_startup on resume. This flag gets cleared by free_irq->irq_shutdown > during suspend. free_irq() never gets explicitly called for ioapic-edge > and ioapic-level interrupts as respective drivers do nothing during > suspend/resume. So we shut them down explicitly in the first place in > syscore_suspend path to clear IRQ<>event channel mapping. shutdown_pirq > being called explicitly during suspend does not clear this flags, hence > .irq_enable is called in irq_startup during resume instead and pirq's > never start up.
What?
> +void irq_state_clr_started(struct irq_desc *desc) > { > irqd_clear(&desc->irq_data, IRQD_IRQ_STARTED); > } > +EXPORT_SYMBOL_GPL(irq_state_clr_started);
This is core internal state and not supposed to be fiddled with by drivers.
irq_chip has irq_suspend/resume/pm_shutdown callbacks for a reason.
Thanks,
tglx
| |