You know what? suspend calls free_irq() via i915_drm_freeze() -> drm_irq_uninstall() and the resume code calls request_irq() again. free_irq() removes the action and request_irq installs it fresh.
Yeah this is a known issue with the DRM code, I thought Dave had a fix queued a long time ago though... Dave?
/me doesn't remember seeing one but maybe this one?
http://lists.freedesktop.org/archives/dri-devel/2011-August/013407.html
probably fell down a hole.
Dave.