I’m having a problem getting IoConnectInterrupt() to succeed on a dual
CPU SMP system when it works fine on a single CPU system. On the SMP
system, IoConnectInterrupt() returns STATUS_INVALID_PARAMETER. I’m
trying to figure out *which* parameter it doesn’t like. Everything is
the same in both cases, except for the Vector, Irql, and Affinity
returned from the call to HalGetInterruptVector(), which is what I’m now
investigating.
Take a case of trying to connect to IRQ3, the IRQ for COM2, this is what
I get for those parameters on my two test systems:
Vector = HalGetInterruptVector(Isa, 0, 3, 3, &Irql, &Affinity);
UP: Vector = 0x33, Irql = 0x18, Affinity = 0x1
SMP: Vector = 0x61, Irql = 0x05, Affinity = 0x3
I know the HAL is different on the two systems, so I don’t necessarily
expect similar results, but an Irql of only 5 looks suspiciously low to
me.
Is this normal and my problem is elsewhere, or am I on to something
here?
Thanks,
Jay Talbott
Principal Consulting Engineer
SysPro Consulting, LLC
3519 E. South Fork Drive
Suite 201
Phoenix, AZ 85044
(480) 704-8045
xxxxx@sysproconsulting.com
http://www.sysproconsulting.com
You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com
Those are completely reasonable values to get back from
HalGetInterruptVector, in both cases.
I assume that you’re writing for NT4, since you’re calling this obsolete
API. If you’re not writing for NT4, you should be getting all of this
information from the parameters of IRP_MN_START_DEVICE.
IoConnectInterrupt will return STATUS_INVALID_PARAMETER under a couple
of conditions. First, the affinity that you pass in may not intersect
with any of the active processors in the machine, which is unlikely if
you just used what you got from HalGetInterruptVector. Second, if the
kernel fails to put your interrupt object on the chain for that vector,
you’ll get the same error. This could happen if you specified that your
interrupt was non-shareable and there was already another driver
connected. Or, the other driver that is already connected could have
connected as non-shareable.
-----Original Message-----
Subject: HalGetInterruptVector() on SMP systems
From: “Jay Talbott”
Date: Wed, 16 Jan 2002 17:29:42 -0700
X-Message-Number: 26
I’m having a problem getting IoConnectInterrupt() to succeed on a dual
CPU SMP system when it works fine on a single CPU system. On the SMP
system, IoConnectInterrupt() returns STATUS_INVALID_PARAMETER. I’m
trying to figure out which parameter it doesn’t like. Everything is
the same in both cases, except for the Vector, Irql, and Affinity
returned from the call to HalGetInterruptVector(), which is what I’m now
investigating.
Take a case of trying to connect to IRQ3, the IRQ for COM2, this is what
I get for those parameters on my two test systems:
Vector = HalGetInterruptVector(Isa, 0, 3, 3, &Irql, &Affinity);
UP: Vector = 0x33, Irql = 0x18, Affinity = 0x1
SMP: Vector = 0x61, Irql = 0x05, Affinity = 0x3
I know the HAL is different on the two systems, so I don’t necessarily
expect similar results, but an Irql of only 5 looks suspiciously low to
me.
Is this normal and my problem is elsewhere, or am I on to something
here?
Thanks,
- Jay
Jay Talbott
Principal Consulting Engineer
SysPro Consulting, LLC
3519 E. South Fork Drive
Suite 201
Phoenix, AZ 85044
(480) 704-8045
xxxxx@sysproconsulting.com
http://www.sysproconsulting.com
—
You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com