The below link contain code snippets that process SONET events via an interrupt. Basically an user space application waits on an ioctl call for events that are queued. These events are queued via a kernel thread that waits on a wait_event_interruptible call. When an interupt happens the thread processes the events, timestamps them and puts a message on a queue.
There is other code that is left out the starts the thread. If you are interested...ask. http://www.geocities.com/dbruce_01721/event.c