massa@aurora.cis.upenn.edu (Mike Massa) (05/03/91)
The bottom half of my device driver includes a timer interrupt handler which calls e_wakeup() to restart sleeping calls in the top half of the driver. The driver is broken up into separate object modules which are loaded together when the driver is configured. The event_word parameter is located in the DDS, which is allocated on the pinned kernel heap, and is set to EVENT_NULL in the top-half module prior to the timer being started. If I allow the interrupt handler to call e_wakeup() with the address of the event_word, the system crashes with a Data Storage Interrupt - PROC. If it doesn't call e_wakeup(), but instead merely accesses the event_word (ie assign a local variable to point to it, assign its value to a local variable), everything works fine - except of course that my sleeping calls hang. Note that even if no calls are sleeping, the system still crashes on the call to e_wakeup(). I'm running AIX 3.01.0003.0018 on an RS/6000 model 320. Any suggestions out there? Thanks -- Mike Massa University of Pennsylvania Distributed Systems Laboratory