c/s
650c31d3af "x86/IRQ: fix locking around vector management" adjusted the
locking in adjust_irq_affinity().
The S3 path ends up here via iommu_resume() before interrupts are enabled, at
which point spin_lock_irq() fails ASSERT(local_irq_is_enabled()); but with no
working console.
Use spin_lock_irqsave() instead to cope with interrupts already being
disabled.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
: NUMA_NO_NODE;
const cpumask_t *cpumask = NULL;
struct irq_desc *desc;
+ unsigned long flags;
if ( node < MAX_NUMNODES && node_online(node) &&
cpumask_intersects(&node_to_cpumask(node), &cpu_online_map) )
cpumask = &node_to_cpumask(node);
desc = irq_to_desc(drhd->iommu->msi.irq);
- spin_lock_irq(&desc->lock);
+ spin_lock_irqsave(&desc->lock, flags);
dma_msi_set_affinity(desc, cpumask);
- spin_unlock_irq(&desc->lock);
+ spin_unlock_irqrestore(&desc->lock, flags);
}
static int adjust_vtd_irq_affinities(void)