Interrupt problem in multiprocessor platform

Hi All,

I am developing a PCI driver for Windows 2003.

Its working fine in uniprocessor mode.

But when I am running the driver on multiprocessor
platform, after some time I am losing interrupts. This
is happening when the driver gets the interrupts at
the same time. Because of that only one DPC object has
been inserted in the DPC queue instead of two. So that
I am losing one DPC object and so that interrupt. I
am using KeInsertQueueDpc to insert the DPC object
in the queue.

When I see the DDK docs, It has been specified to use
KeAcquireInterruptSpinLock and KeSynchronizeExecution
to serialize the interrupt handling in ISRs. But both
of them failed. When I used, I am getting the blue
screen of message with 0xF (SPIN_LOCK_ALREADY_OWNED).

Can anybody please tell me some way of how I can
synchronize the ISRs in SMP platforms?

Thanks,
Sundar


Do you Yahoo!?
Win a $20,000 Career Makeover at Yahoo! HotJobs
http://hotjobs.sweepstakes.yahoo.com/careermakeover

Have your ISR update some memory in the device extension which records
the interrupt condition and any associated data and then queue a DPC.
The DPC calls KeAcquireInterruptSpinLock, copies the interrupt condition
data to the stack and clears the shared state, drops the interrupt
spinlock and processes the interrupts that have occurred. If there’s no
work to do then the DPC just exits.

-p

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of sundarapandian
durairaj
Sent: Tuesday, April 27, 2004 9:58 AM
To: Windows System Software Devs Interest List
Cc: xxxxx@yahoo.com
Subject: [ntdev] Interrupt problem in multiprocessor platform

Hi All,

I am developing a PCI driver for Windows 2003.

Its working fine in uniprocessor mode.

But when I am running the driver on multiprocessor platform, after some
time I am losing interrupts. This is happening when the driver gets the
interrupts at the same time. Because of that only one DPC object has
been inserted in the DPC queue instead of two. So that I am losing one
DPC object and so that interrupt. I
am using KeInsertQueueDpc to insert the DPC object
in the queue.

When I see the DDK docs, It has been specified to use
KeAcquireInterruptSpinLock and KeSynchronizeExecution to serialize the
interrupt handling in ISRs. But both of them failed. When I used, I am
getting the blue screen of message with 0xF (SPIN_LOCK_ALREADY_OWNED).

Can anybody please tell me some way of how I can synchronize the ISRs in
SMP platforms?

Thanks,
Sundar


Do you Yahoo!?
Win a $20,000 Career Makeover at Yahoo! HotJobs
http://hotjobs.sweepstakes.yahoo.com/careermakeover


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@windows.microsoft.com
To unsubscribe send a blank email to xxxxx@lists.osr.com