In the new APIC platform, an interrupt vector number is only unique on the CPU which owns the vector, it isn't global unique in a system which has multiple CPUs. So we need both interrupt vector number and the CPU which owns this vector are needed to identify one unique vector.
In fact, in the new APIC platform, the output of '::interrupts" command in mdb is changed to below, it will be putback with APIC scability project together. pcplusmpx (proposed output for our new APIC changes) ======================================================== :: interrupts CPU/Vect IRQ IPL Bus Trg Type Share APIC/INT# ISR(s) 0/0x42 12 5 ISA Edg Fixed 1 0x0/0xc i8042_intr 0/0x84 22 9 PCI Lvl Fixed 2 0x0/0x16 ohci_intr 0/0x84 22 8 PCI Lvl Fixed 2 0x0/0x16 audiohd_intr 1/0x81 9 9 PCI Lvl Fixed 1 0x0/0x9 acpi_wrapper_isr 1/0xb0 4 12 ISA Edg Fixed 1 0x0/0x4 asyintr 2/0x40 20 5 PCI Lvl Fixed 1 0x0/0x14 0 2/0x82 - 7 PCI Edg MSI 1 - pepb_intr_handler 3/0x41 1 5 ISA Edg Fixed 1 0x0/0x1 i8042_intr 3/0x43 14 5 ISA Edg Fixed 1 0x0/0xe ata_intr 3/0x60 - 6 PCI Edg MSI 1 - bge_intr 3/0x83 21 9 PCI Lvl Fixed 1 0x0/0x15 ehci_intr all/0xa0 - 13 Edg IPI 1 - poke_cpu all/0xc0 - 14 Edg IPI 1 - xc_serv all/0xd0 - 14 Edg IPI 1 - kcpc_hw_overflow_intr all/0xd1 - 14 Edg IPI 1 - cbe_fire all/0xd3 - 14 Edg IPI 1 - cbe_fire all/0xe0 - 15 Edg IPI 1 - xc_serv all/0xe1 - 15 Edg IPI 1 - apic_error_intr Changes comparing to the old pcplusmp output(see 2): - use CPU/Vect instead of IRQ to list the interrupts info; - IRQ value is valid only for Fixed interrupt type. - shared interrupts are displayed seperatedly with its own IPL. Thanks, Andy Edward Shu ??: > See comments below. > 4. Technical Description >> 4.1. Introduction >> >> Pcitool is a low-level tool which provides a facility for getting and >> setting interrupt routing information. It is first introduced by >> PSARC/2005/232 and then made public by PSARC/2009/215. Currently on >> x86 it refers to an interrupt by using the interrupt vector, which >> isn't unique on a multi-CPU x86 system. >> >> On x86 platforms, the interrupt vectors are associated with the local >> APIC (Advanced Programmable Interrupt Controller) which is a component >> of CPU. So the number of total interrupt vectors in the system scales >> with the number of CPUs present in the system. And an interrupt vector >> number is only unique on the CPU which owns the vector, it isn't global >> unique in a system which has multiple CPUs. >> >> To uniquely identify an interrupt on x86, both interrupt vector number >> and the CPU which owns this vector are needed. This project will define >> the necessary changes to pcitool to uniquely identify an interrupt on >> x86, and also it will propose some output changes to be more user >> friendly. >> > When I type "'::interrupts" command in mdb, the output give me a list of > activating > interrupts. It seems that the interrupt vector is uniquely identified. > Why can't > we use the same vectors instead of adding owning CPU? Here is an output > example > from a X86 system. > > IRQ Vect IPL Bus Trg Type CPU Share APIC/INT# Driver Name(s) > 4 0xb0 12 ISA Edg Fixed 3 1 0x0/0x4 asy#0 > 9 0x81 9 PCI Lvl Fixed 1 1 0x0/0x9 acpi_wrapper_isr > 14 0x41 5 ISA Edg Fixed 2 1 0x0/0xe ata#0 > 20 0x82 9 PCI Lvl Fixed 3 1 0x0/0x14 ehci#0 > 21 0x83 9 PCI Lvl Fixed 0 1 0x0/0x15 ohci#0 > 22 0x60 6 PCI Lvl Fixed 1 1 0x0/0x16 nge#0 > 44 0x61 6 PCI Lvl Fixed 1 1 0x3/0x14 nge#1 > 56 0x62 6 PCI Lvl Fixed 2 1 0x2/0x0 e1000g#0 > 57 0x63 6 PCI Lvl Fixed 3 1 0x2/0x1 e1000g#1 > 58 0x40 5 PCI Lvl Fixed 2 1 0x2/0x2 mpt#0 > 160 0xa0 0 Edg IPI all 0 - poke_cpu > 208 0xd0 14 Edg IPI all 1 - kcpc_hw_overflow_intr > 209 0xd1 14 Edg IPI all 1 - cbe_fire > 210 0xd3 14 Edg IPI all 1 - cbe_fire > 240 0xe0 15 Edg IPI all 1 - xc_serv > 241 0xe1 15 Edg IPI all 1 - apic_error_intr > > > >