linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Missing interrupts? - more...
@ 2003-07-23 19:19 no_spam
  0 siblings, 0 replies; only message in thread
From: no_spam @ 2003-07-23 19:19 UTC (permalink / raw)
  To: linux-kernel


The missing interrupts gets murkier-

On all good machines interrupts are routed regardless of the PCI slot or IRQ 
allocated.

On the one bad machine interrupts are received iff the IRQ is 11.
I have tried all the available slots in the machine for my card and I have 
tried reconfiguring the IRQs allocated to these slots via the BIOS.  The 
upshot is that on interrupts 3 9 10 nothing is received by the card 
regardless of slot location.  If I select IRQ 11 for the card then it works 
perfectly. (I can only select 3 9 10 11 in the BIOS).

I have also witnessed a couple of "spurious interrupt" messages in the kernel 
on good and the bad machines - these are received when the driver registers 
the interrupt (always seem to be routed to IRQ7). Like so: (from dmesg)

....
PI: init_module: installing /proc
PI: installation complete
PI: enabling board
PI: open: registered interrupt 10 Ok
spurious 8259A interrupt: IRQ7.    <-------------- on good or bad machine
PI: reset performed


Since the original post I have changed the way I discover the IRQ and now 
query the pci_dev structure rather than the pci config space (although these 
have agreed so far) but it makes no difference.


On the bad machine:
cat /proc/interrupts
           CPU0
  0:     408059          XT-PIC  timer
  1:         24          XT-PIC  keyboard
  2:          0          XT-PIC  cascade
  5:          0          XT-PIC  usb-uhci
  8:          1          XT-PIC  rtc
  9:          0          XT-PIC  usb-uhci
 10:          0          XT-PIC  ehci-hcd
 11:      34980          XT-PIC  usb-uhci, e100
 12:        474          XT-PIC  PS/2 Mouse
 14:      11376          XT-PIC  ide0
 15:         22          XT-PIC  ide1
NMI:          0
ERR:          0
 - no interrupts are ever received on irqs 3 9 10 regardless of the settings 
in the BIOS.


Any suggestions (broken computer?) I am about to release the driver......

Thanks SA

On bad machine:
cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 15
model           : 2
model name      : Intel(R) Pentium(R) 4 CPU 1.80GHz
stepping        : 4
cpu MHz         : 1799.843
cache size      : 512 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca 
cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm
bogomips        : 3591.37


Also some sort of intel motherboard - no sure of exact type.

dmesg after boot  truncated....
mtrr: detected mtrr type: Intel
PCI: PCI BIOS revision 2.10 entry at 0xf0031, last bus=2
PCI: Using configuration type 1
PCI: Probing PCI hardware
Unknown bridge resource 0: assuming transparent
PCI: Using IRQ router PIIX [8086/24c0] at 00:1f.0
PCI: Found IRQ 9 for device 00:1f.1
PCI: Sharing IRQ 9 with 00:1d.2






------
Dear LK,

I am testing a new device driver and have found that one one machine it does
 not receive any interrupts. I am stumped by this problem and wonder if
 anyone had any advice before I start to take things apart blindly.

Machines test where everything worked: kernels 2.4.18-10 and  2.4.18-24.8.0
 on athlon based PCs

Machine where interrupts failed to appear: kernel 2.4.18-3 on a pentium 4.

I register the interrupt on open with
       
 err=request_irq(pi_stage.interrupt,pi_int_handler,SA_SHIRQ,PI_IRQ_ID,(void*)
&pi_stage);

My handler looks like

static void pi_int_handler(int irq, void *dev_id,struct pt_regs *regs){
u32 event;
        pi_stage.ints_all++;
        event=pi_read_control(PI_STAGE_INTEVENTSET);
        if(event & PI_STAGE_ALLINTS){
                pi_write_control(PI_STAGE_INTEVENTCLEAR,event 
 &PI_STAGE_ALLINTS); if(event & PI_STAGE_INTGPIO3)
                        pi_stage.ints_io++;
                if(event & PI_STAGE_GPINT){
                        pi_stage.ints_axis++;
                        tasklet_schedule(&pi_tasklet);
                        }
                pi_stage.ints_board++;
                }
        }

On the dodgy machine I see the driver and card working fine except for the
 missing interrupts. The variable pi_stage.ints_all is never incremented and
 /proc/interrupts never reports any interrupts. On all machines the
 conditions that generate the interrupts do occur.

It looks like on this one machine that interrupts are never received by the
 system.

Is it possible that differences between the BIOSs on the machines could cause
 this? (ie my card is init'd differently so on the bad machine the ints are
 never generated or received).

Any suggestions?

Thanks SA


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2003-07-23 19:07 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-07-23 19:19 Missing interrupts? - more no_spam

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).