Call ast when handling irq from userspace, otherwise we could miss reschedule. Right now arm_cpu_intr() does critical_exit() as the last action, so the impact is not serious.
Keep interrupts disabled after do_ast, otherwise we might miss reschedule if interrupt is delivered after the ast handler called.