-1

I am working on chassis based x86 machine where 8 PMC slots are provided. When my system brings up, it sometime gives IRQ0 to my PMC (PCI mezzanine card) while IRQ0 has already been allocated to Timer. This prevent loading of my pci module and hence system goes into unusable state. I have done following things:

  1. I used pci delay in BIOS but it didn't help.
  2. I have written a temporarily script which check my pci device presence in /proc file. If it doesn't find device presence in /proc file, the script simply reboot the system. This mechanism is not a full proof because it sometime gets failed.

I am dealing with Kernel-2.4.29. Is there any mechanism in kernel to deal with such situation?

Manish
  • 79
  • 1
  • 11
  • The problem appears to be that the BIOS does not allocate an interrupt for this device at all. A non-ancient kernel might be able to do this. – CL. Mar 02 '15 at 09:26
  • @CL. : Agree !! I believe that it is BIOS Issue. I was googling and found a useful link. P.S [link](http://home.icequake.net/~nemesis/pc/support/pr440fx-irq-conflict.html). But, Is it possible to fix this is in kernel? – Manish Mar 02 '15 at 16:26

1 Answers1

3

First of all, it's a quite normal case for modern PCI IRQ architecture. There are two or three of them, I don't remember though.

What you get is called shared interrupt. The drivers for the PCI devices must take care of this case.

So, if you are a driver writer you have to define that interrupt might be shared and handle this in the IRQ handler properly.

P.S. I doubt 2.4.x.y even knows a half of PCI features added in the latest standard.

0andriy
  • 4,183
  • 1
  • 24
  • 37
  • 1
    The timer interrupt is not sharable. – CL. Mar 02 '15 at 09:25
  • @CL. : Agree with you!! Since the system reseves the timer of the RTC. I think it is not shareable like PCI Interrupts. – Manish Mar 02 '15 at 16:21
  • @AndyShevchenko: I don't know much PCI subsystem. I believe that it is BIOS Issue. I was googling and found a useful link. P.S [link](http://home.icequake.net/~nemesis/pc/support/pr440fx-irq-conflict.html). But, Is it possible to fix this is in kernel? – Manish Mar 02 '15 at 16:24
  • @CL., yes, timer IRQ can't be shared at least on x86, though interrupt 0 can be shared same way as others on some systems, e.g. Intel MID. – 0andriy Mar 02 '15 at 19:52
  • @Manish, check `quirk_via_vlink()` in recent Linux kernel sources. It might give you a hint. – 0andriy Mar 02 '15 at 19:54
  • @CL. : Hey Thanx for addressing this issue !! – Manish Mar 03 '15 at 17:01
  • @AndyShevchenko : function quirk_via_vlink() is not present in kernel-2.4.29. It is present in 2.6.x. Is this BIOS or older Linux kernel issue ? – Manish Mar 19 '15 at 18:49
  • Check what is does. Then check what is present in 2.4.y. I suggest of course not to use 2.4.y at all. – 0andriy Mar 19 '15 at 20:48