Right, so you are saying you started out with IRQs enabled, and theYep.
above local_irq_restore() would simply be the first irq-op to re-enable
it and goes splat.
In which case your disabled from beginning 'fix' looks like the right
thing to do.
Or perhaps the second warning is real; in which case, where does the problem lie? (I guess another case of being bitten by calling __purge_vmap_area_lazy from interrupt context.)
Looks like a real problem, and yes your suggestion makes sense.