drm/nvd0/disp: rewrite irq handler, should be somewhat sturdier now