Re: expicitly use XT_PIC interrupt for an old device?

Dieter Schön
2008-08-12T07:04:18Z

hi,

thanks for the answer,

Zhao Yakui schrieb:
> On Mon, 2008-08-11 at 16:59 +0200, Dieter Schön wrote:
>> hi group,
>>
>> i have to migrate a character device driver for an old synchronus
>> serial PCI board (Moxa C502/PCI)
>> from 2.2.something to 2.6.5-smp x86_64.
>> the problem is, that no interrupts are routed to the driver.
>> i was able to get interrupts when i used a non-SMP kernel and the
>> "noapic" boot option.
>>
>> is there a way to explicitly force the use of the 8259 when i request
>> an interrupt to get the interrupts for this card not routed via the
>> APIC?
>> any pointers are appreciated.
> doubt whether the I8259 and I/O APIC can be used at the same time.
> When the non-smp kernel is used and boot option of "noapic" is added,
> there exists the interrupt for PCI UART card.
> Do you try it with the boot option of "noapic" on smp kernel?
> Can you try it on the latest kernel?

i have tried it with 2.6.25 on suse11, and also on another hardware
platform (i have heard that some motherboards/BIOSes have problems with
the APIC) to rule that out.

and it seems that it is possible to operate both ways at the same time:
the cascade driver seems to use the 8259.
my driver is one line below, the Moxa. another idea: would it be
possible to force a IO-APIC-level interrupt instead of an edge-triggered?

user@host $ cat /proc/interrupts
CPU0 CPU1
0: 145319 102178 IO-APIC-edge timer
1: 368 485 IO-APIC-edge i8042
2: 0 0 XT-PIC cascade
6: 0 0 IO-APIC-edge Moxa
8: 0 0 IO-APIC-edge rtc
9: 0 0 IO-APIC-level acpi
12: 668 1190 IO-APIC-edge i8042
14: 494 624 IO-APIC-edge ide0
16: 0 0 IO-APIC-level eth0, ehci_hcd, uhci_hcd
17: 0 0 IO-APIC-level eth1, uhci_hcd
18: 6783 3973 IO-APIC-level libata
NMI: 247349 247309
LOC: 246859 247246
ERR: 0
MIS: 0

user@host $ uname -a
Linux host 2.6.5-7.244-smp #1 SMP Mon Dec 12 18:32:25 UTC 2005 x86_64
x86_64 x86_64 GNU/Linux

user@host $ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 15
model : 6
model name : Intel(R) Pentium(R) D CPU 3.40GHz
stepping : 4
cpu MHz : 3400.280
cache size : 2048 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
fpu : yes
fpu_exception : yes
cpuid level : 6
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 syscall
lm pni monitor ds_cpl tm2 cid cmpxchg16b lahf_lm
bogomips : 6717.44
clflush size : 64
cache_alignment : 128
address sizes : 36 bits physical, 48 bits virtual
power management:

processor : 1
vendor_id : GenuineIntel
cpu family : 15
model : 6
model name : Intel(R) Pentium(R) D CPU 3.40GHz
stepping : 4
cpu MHz : 3400.280
cache size : 2048 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
fpu : yes
fpu_exception : yes
cpuid level : 6
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 syscall
lm pni monitor ds_cpl tm2 cid cmpxchg16b lahf_lm
bogomips : 6782.97
clflush size : 64
cache_alignment : 128
address sizes : 36 bits physical, 48 bits virtual
power management:

kind regards,