[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] HPET interrupt remapping during boot
On 09.10.2019 13:29, Roger Pau Monné wrote: > On Wed, Oct 09, 2019 at 12:41:05PM +0200, Jan Beulich wrote: >> On 09.10.2019 12:11, Roger Pau Monné wrote: >>> And it does print the following when setting up the iommu: >>> >>> (XEN) ioapic 0 pin 0 not masked >>> (XEN) vec=00 delivery=ExINT dest=P status=0 polarity=0 irr=0 trig=E mask=0 >>> dest_id:00010000 >>> >>> I wonder, shouldn't all pins of all the io-apics be masked at boot? >> >> I think you might get different answers here depending on whether >> you ask firmware or OS people. In fact there are cases where the >> IO-APIC needs to be left in this state, I think, but such would >> likely need properly reflecting in ACPI tables (albeit I don't >> know/recall how this would be done; looking at the code ). This goes back to >> times >> when IO-APICs were new and OSes would not even know about them, >> yet they wouldn't get any interrupts to work if fiddling with >> only the PIC (sitting behind IO-APIC pin 0). >> >> See enable_IO_APIC(), where we actually use this property to >> determine the pin behind which the 8259 sits. >> >> I've seen quite many systems where in the BIOS setup you have an >> option to select whether you have an "ACPI OS" (wording of course >> varies). I've never checked whether this may e.g. reflect itself >> in the handover state of the GSI 0 RTE. >> >> In your testing patch, could you also log the PIC mask bytes? >> There ought to be at least one unmasked; or wait - there actually >> is a spurious interrupt there (right before IOMMU initialization): >> >> (XEN) spurious 8259A interrupt: IRQ7. > > So I've added a log of the PIC masks just before checking the ioapic > masks: > > (XEN) 8259A-1 mask: fe 8259A-2 mask: ff > > AFAICT IRQ7 seems to be unmasked? Sorry my knowledge of PICs is quite > limited since I've never had to deal with them. That's IRQ0 then which is unmasked. As said the spurious one (IRQ7) can't be masked (at the PIC); only the "normal" IRQ7 can be. > The line I've added is: > > printk("8259A-1 mask: %x 8259A-2 mask: %x\n", inb(0x21), inb(0xA1)); > > I wonder why does Xen even has any code to deal with the PICs, > shouldn't we rely on io-apics only for legacy delivery? There are (were?) systems where things wouldn't work without. >> Hence I wonder if there's not possibly a 2nd one once the IOMMU >> has been set up. > > Right, then I guess we either mask all the io-apic pins or we setup > proper remapping entries for non-masked pins? (in order to avoid iommu > faults) Making the ExtInt entry is at least worth an experiment, to (hopefully) confirm that this would take care of the IOMMU fault. But I'm afraid (as per above) it's not an option in general. What I could see us doing is mask the entry if all legacy IRQs are handled through the IO-APIC. This would take care of spurious interrupts, as these are the only ones which can make it through when the PIC mask bits are all set. However, maybe it is legitimate to mask the ExtInt entry when an IOMMU comes into play. As to "proper" remapping entries: I'll have to look at the spec what they say about this. There's only one IRT index that we can put in the RTE, yet this would need to serve all 15 IRQs potentially coming through the PIC. Recall that the vector gets supplied by the PIC in the ExtInt case, not by the IO-APIC RTE. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |