ad40fffd80
The kernel masks an IRQ line when it delivers the interrupt to userspace (trigger() -> pic_mask()/ioapic_mask()) and only re-enables it when the driver writes the count back (kwrite -> acknowledge() -> pic_unmask()/ ioapic_unmask()). That write-back is therefore mandatory, not optional. ahcid only performed it inside the `is > 0` branch. IRQ lines are shared (on q35 the AHCI controller sits on IRQ 10 with other devices), so an interrupt raised by a different device reaches the handler with the HBA interrupt status register reading 0. In that case ahcid returned without writing back, leaving the line masked permanently: every subsequent AHCI completion was lost and all disk I/O blocked forever. Move the write-back out of the branch so the line is re-armed whether or not the interrupt turned out to be ours, and keep scheme.tick() gated on `is > 0` since there is no completion to service otherwise. Device-level status is still cleared before unmasking, so this cannot cause a storm.